Merge remote-tracking branch 'upstream/master'
authorJohannes van Waveren <janpaul.vanwaveren@oculus.com>
Tue, 12 Jul 2016 12:03:23 +0000 (07:03 -0500)
committerJohannes van Waveren <janpaul.vanwaveren@oculus.com>
Tue, 12 Jul 2016 12:03:23 +0000 (07:03 -0500)
130 files changed:
README.md
SPIRV/GlslangToSpv.cpp
SPIRV/SpvBuilder.cpp
SPIRV/SpvBuilder.h
StandAlone/ResourceLimits.cpp
StandAlone/StandAlone.cpp
Test/baseResults/120.vert.out
Test/baseResults/300BuiltIns.frag.out
Test/baseResults/310.vert.out
Test/baseResults/430.vert.out
Test/baseResults/430scope.vert.out
Test/baseResults/constFold.frag.out
Test/baseResults/functionSemantics.frag.out
Test/baseResults/glspv.esversion.vert.out [new file with mode: 0755]
Test/baseResults/glspv.frag.out [new file with mode: 0755]
Test/baseResults/glspv.version.frag.out [new file with mode: 0755]
Test/baseResults/glspv.version.vert.out [new file with mode: 0755]
Test/baseResults/glspv.vert.out [new file with mode: 0755]
Test/baseResults/hlsl.array.frag.out
Test/baseResults/hlsl.assoc.frag.out
Test/baseResults/hlsl.attribute.frag.out
Test/baseResults/hlsl.cast.frag.out
Test/baseResults/hlsl.discard.frag.out [new file with mode: 0755]
Test/baseResults/hlsl.doLoop.frag.out
Test/baseResults/hlsl.float1.frag.out
Test/baseResults/hlsl.float4.frag.out
Test/baseResults/hlsl.forLoop.frag.out
Test/baseResults/hlsl.if.frag.out
Test/baseResults/hlsl.init.frag.out [new file with mode: 0755]
Test/baseResults/hlsl.intrinsics.barriers.comp.out
Test/baseResults/hlsl.intrinsics.comp.out
Test/baseResults/hlsl.intrinsics.double.frag.out [new file with mode: 0644]
Test/baseResults/hlsl.intrinsics.evalfns.frag.out
Test/baseResults/hlsl.intrinsics.f1632.frag.out
Test/baseResults/hlsl.intrinsics.frag.out
Test/baseResults/hlsl.intrinsics.lit.frag.out
Test/baseResults/hlsl.intrinsics.negative.comp.out
Test/baseResults/hlsl.intrinsics.negative.frag.out
Test/baseResults/hlsl.intrinsics.negative.vert.out
Test/baseResults/hlsl.intrinsics.vert.out
Test/baseResults/hlsl.matType.frag.out
Test/baseResults/hlsl.max.frag.out
Test/baseResults/hlsl.precedence.frag.out
Test/baseResults/hlsl.precedence2.frag.out
Test/baseResults/hlsl.scope.frag.out
Test/baseResults/hlsl.sin.frag.out
Test/baseResults/hlsl.struct.frag.out
Test/baseResults/hlsl.switch.frag.out [new file with mode: 0755]
Test/baseResults/hlsl.swizzle.frag.out
Test/baseResults/hlsl.templatetypes.frag.out [new file with mode: 0644]
Test/baseResults/hlsl.typedef.frag.out [new file with mode: 0755]
Test/baseResults/hlsl.void.frag.out
Test/baseResults/hlsl.whileLoop.frag.out
Test/baseResults/maxClipDistances.vert.out [new file with mode: 0644]
Test/baseResults/specExamples.vert.out
Test/baseResults/spv.430.frag.out [new file with mode: 0755]
Test/baseResults/spv.430.vert.out
Test/baseResults/spv.450.tesc.out [new file with mode: 0755]
Test/baseResults/spv.atomic.comp.out
Test/baseResults/spv.glFragColor.frag.out [new file with mode: 0755]
Test/baseResults/spv.intOps.vert.out
Test/baseResults/spv.layoutNested.vert.out
Test/baseResults/spv.localAggregates.frag.out
Test/baseResults/spv.specConst.vert.out [new file with mode: 0755]
Test/baseResults/spv.variableArrayIndex.frag.out
Test/constFold.frag
Test/functionSemantics.frag
Test/glspv.esversion.vert [new file with mode: 0644]
Test/glspv.frag [new file with mode: 0644]
Test/glspv.version.frag [new file with mode: 0644]
Test/glspv.version.vert [new file with mode: 0644]
Test/glspv.vert [new file with mode: 0644]
Test/hlsl.discard.frag [new file with mode: 0644]
Test/hlsl.forLoop.frag
Test/hlsl.if.frag
Test/hlsl.init.frag [new file with mode: 0644]
Test/hlsl.intrinsics.comp
Test/hlsl.intrinsics.double.frag [new file with mode: 0644]
Test/hlsl.intrinsics.f1632.frag
Test/hlsl.intrinsics.frag
Test/hlsl.intrinsics.negative.comp
Test/hlsl.intrinsics.negative.frag
Test/hlsl.intrinsics.negative.vert
Test/hlsl.intrinsics.vert
Test/hlsl.switch.frag [new file with mode: 0644]
Test/hlsl.templatetypes.frag [new file with mode: 0644]
Test/hlsl.templatetypes.negative.frag [new file with mode: 0644]
Test/hlsl.typedef.frag [new file with mode: 0644]
Test/maxClipDistances.vert [new file with mode: 0644]
Test/runtests
Test/spv.430.frag [new file with mode: 0644]
Test/spv.450.tesc [new file with mode: 0644]
Test/spv.atomic.comp
Test/spv.glFragColor.frag [new file with mode: 0644]
Test/spv.specConst.vert [new file with mode: 0644]
Test/test-hlsl-spirv-list [deleted file]
Test/test-preprocessor-list [deleted file]
Test/test-spirv-list [deleted file]
Test/testlist [deleted file]
glslang/Include/Types.h
glslang/Include/intermediate.h
glslang/MachineIndependent/Constant.cpp
glslang/MachineIndependent/Initialize.cpp
glslang/MachineIndependent/ParseHelper.cpp
glslang/MachineIndependent/ParseHelper.h
glslang/MachineIndependent/Scan.h
glslang/MachineIndependent/ShaderLang.cpp
glslang/MachineIndependent/Versions.cpp
glslang/MachineIndependent/Versions.h
glslang/MachineIndependent/glslang.y
glslang/MachineIndependent/glslang_tab.cpp
glslang/MachineIndependent/preprocessor/PpContext.h
glslang/MachineIndependent/propagateNoContraction.cpp
glslang/Public/ShaderLang.h
gtests/AST.FromFile.cpp
gtests/Config.FromFile.cpp
gtests/Hlsl.FromFile.cpp
gtests/Initializer.h
gtests/Link.FromFile.cpp
gtests/Pp.FromFile.cpp
gtests/Spv.FromFile.cpp
gtests/TestFixture.cpp
gtests/TestFixture.h
hlsl/hlslGrammar.cpp
hlsl/hlslGrammar.h
hlsl/hlslParseHelper.cpp
hlsl/hlslParseHelper.h
hlsl/hlslParseables.cpp
hlsl/hlslParseables.h
hlsl/hlslTokenStream.h

index 7a14f56..3bdbae5 100644 (file)
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ There are two components:
 How to add a feature protected by a version/extension/stage/profile:  See the
 comment in `glslang/MachineIndependent/Versions.cpp`.
 
-Things left to do:  See `Todo.txt`
+Tasks waiting to be done are documented as GitHub issues.
 
 Execution of Standalone Wrapper
 -------------------------------
@@ -177,15 +177,11 @@ For more information, please check `gtests/` directory's
 
 For the `runtests` script, it will generate current results in the
 `localResults/` directory and `diff` them against the `baseResults/`.
-The integration tests to run via the `runtests` script is registered
-via various `Test/test-*` text files and `Test/testlist`.
 When you want to update the tracked test results, they need to be
 copied from `localResults/` to `baseResults/`.  This can be done by
 the `bump` shell script.
 
-The list of files tested comes from `testlist`, and lists input shaders
-in this directory, which must all be public for this to work.  However,
-you can add your own private list of tests, not tracked here, by using
+You can add your own private list of tests, not tracked publicly, by using
 `localtestlist` to list non-tracked tests.  This is automatically read
 by `runtests` and included in the `diff` and `bump` process.
 
index f64066e..61c9ae7 100755 (executable)
@@ -117,6 +117,10 @@ protected:
     spv::Id getSampledType(const glslang::TSampler&);
     spv::Id convertGlslangToSpvType(const glslang::TType& type);
     spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&);
+    spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct,
+                                          glslang::TLayoutPacking, const glslang::TQualifier&);
+    void decorateStructType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking,
+                            const glslang::TQualifier&, spv::Id);
     spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim);
     spv::Id accessChainLoad(const glslang::TType& type);
     void    accessChainStore(const glslang::TType& type, spv::Id rvalue);
@@ -414,19 +418,19 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
 {
     switch (builtIn) {
     case glslang::EbvPointSize:
-       // Defer adding the capability until the built-in is actually used.
-        if (!memberDeclaration) {
-           switch (glslangIntermediate->getStage()) {
-           case EShLangGeometry:
-               builder.addCapability(spv::CapabilityGeometryPointSize);
-               break;
-           case EShLangTessControl:
-           case EShLangTessEvaluation:
-               builder.addCapability(spv::CapabilityTessellationPointSize);
-               break;
-           default:
-               break;
-           }
+        // Defer adding the capability until the built-in is actually used.
+        if (! memberDeclaration) {
+            switch (glslangIntermediate->getStage()) {
+            case EShLangGeometry:
+                builder.addCapability(spv::CapabilityGeometryPointSize);
+                break;
+            case EShLangTessControl:
+            case EShLangTessEvaluation:
+                builder.addCapability(spv::CapabilityTessellationPointSize);
+                break;
+            default:
+                break;
+            }
         }
         return spv::BuiltInPointSize;
 
@@ -438,12 +442,12 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
     //
     case glslang::EbvClipDistance:
         if (!memberDeclaration)
-           builder.addCapability(spv::CapabilityClipDistance);
+        builder.addCapability(spv::CapabilityClipDistance);
         return spv::BuiltInClipDistance;
 
     case glslang::EbvCullDistance:
         if (!memberDeclaration)
-           builder.addCapability(spv::CapabilityCullDistance);
+        builder.addCapability(spv::CapabilityCullDistance);
         return spv::BuiltInCullDistance;
 
     case glslang::EbvViewportIndex:
@@ -462,6 +466,10 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
         builder.addCapability(spv::CapabilitySampleRateShading);
         return spv::BuiltInSampleMask;
 
+    case glslang::EbvLayer:
+        builder.addCapability(spv::CapabilityGeometry);
+        return spv::BuiltInLayer;
+
     case glslang::EbvPosition:             return spv::BuiltInPosition;
     case glslang::EbvVertexId:             return spv::BuiltInVertexId;
     case glslang::EbvInstanceId:           return spv::BuiltInInstanceId;
@@ -475,7 +483,6 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
         return (spv::BuiltIn)spv::BadValue;
     case glslang::EbvPrimitiveId:          return spv::BuiltInPrimitiveId;
     case glslang::EbvInvocationId:         return spv::BuiltInInvocationId;
-    case glslang::EbvLayer:                return spv::BuiltInLayer;
     case glslang::EbvTessLevelInner:       return spv::BuiltInTessLevelInner;
     case glslang::EbvTessLevelOuter:       return spv::BuiltInTessLevelOuter;
     case glslang::EbvTessCoord:            return spv::BuiltInTessCoord;
@@ -1791,6 +1798,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
 
 // Do full recursive conversion of an arbitrary glslang type to a SPIR-V Id.
 // explicitLayout can be kept the same throughout the hierarchical recursive walk.
+// Mutually recursive with convertGlslangStructToSpvType().
 spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier)
 {
     spv::Id spvType = spv::NoResult;
@@ -1829,7 +1837,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
         spvType = builder.makeUintType(64);
         break;
     case glslang::EbtAtomicUint:
-        logger->tbdFunctionality("Is atomic_uint an opaque handle in the uniform storage class, or an addresses in the atomic storage class?");
+        builder.addCapability(spv::CapabilityAtomicStorage);
         spvType = builder.makeUintType(32);
         break;
     case glslang::EbtSampler:
@@ -1853,144 +1861,19 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
     case glslang::EbtBlock:
         {
             // If we've seen this struct type, return it
-            const glslang::TTypeList* glslangStruct = type.getStruct();
-            std::vector<spv::Id> structFields;
+            const glslang::TTypeList* glslangMembers = type.getStruct();
 
             // Try to share structs for different layouts, but not yet for other
             // kinds of qualification (primarily not yet including interpolant qualification).
             if (! HasNonLayoutQualifiers(qualifier))
-                spvType = structMap[explicitLayout][qualifier.layoutMatrix][glslangStruct];
+                spvType = structMap[explicitLayout][qualifier.layoutMatrix][glslangMembers];
             if (spvType != spv::NoResult)
                 break;
 
             // else, we haven't seen it...
-
-            // Create a vector of struct types for SPIR-V to consume
-            int memberDelta = 0;  // how much the member's index changes from glslang to SPIR-V, normally 0, except sometimes for blocks
             if (type.getBasicType() == glslang::EbtBlock)
-                memberRemapper[glslangStruct].resize(glslangStruct->size());
-            int locationOffset = 0;  // for use across struct members, when they are called recursively
-            for (int i = 0; i < (int)glslangStruct->size(); i++) {
-                glslang::TType& glslangType = *(*glslangStruct)[i].type;
-                if (glslangType.hiddenMember()) {
-                    ++memberDelta;
-                    if (type.getBasicType() == glslang::EbtBlock)
-                        memberRemapper[glslangStruct][i] = -1;
-                } else {
-                    if (type.getBasicType() == glslang::EbtBlock)
-                        memberRemapper[glslangStruct][i] = i - memberDelta;
-                    // modify just this child's view of the qualifier
-                    glslang::TQualifier subQualifier = glslangType.getQualifier();
-                    InheritQualifiers(subQualifier, qualifier);
-
-                    // manually inherit location; it's more complex
-                    if (! subQualifier.hasLocation() && qualifier.hasLocation())
-                        subQualifier.layoutLocation = qualifier.layoutLocation + locationOffset;
-                    if (qualifier.hasLocation())
-                        locationOffset += glslangIntermediate->computeTypeLocationSize(glslangType);
-
-                    // recurse
-                    structFields.push_back(convertGlslangToSpvType(glslangType, explicitLayout, subQualifier));
-                }
-            }
-
-            // Make the SPIR-V type
-            spvType = builder.makeStructType(structFields, type.getTypeName().c_str());
-            if (! HasNonLayoutQualifiers(qualifier))
-                structMap[explicitLayout][qualifier.layoutMatrix][glslangStruct] = spvType;
-
-            // Name and decorate the non-hidden members
-            int offset = -1;
-            locationOffset = 0;  // for use within the members of this struct, right now
-            for (int i = 0; i < (int)glslangStruct->size(); i++) {
-                glslang::TType& glslangType = *(*glslangStruct)[i].type;
-                int member = i;
-                if (type.getBasicType() == glslang::EbtBlock)
-                    member = memberRemapper[glslangStruct][i];
-
-                // modify just this child's view of the qualifier
-                glslang::TQualifier subQualifier = glslangType.getQualifier();
-                InheritQualifiers(subQualifier, qualifier);
-
-                // using -1 above to indicate a hidden member
-                if (member >= 0) {
-                    builder.addMemberName(spvType, member, glslangType.getFieldName().c_str());
-                    addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangType, subQualifier.layoutMatrix));
-                    addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangType));
-                    // Add interpolation and auxiliary storage decorations only to top-level members of Input and Output storage classes
-                    if (type.getQualifier().storage == glslang::EvqVaryingIn || type.getQualifier().storage == glslang::EvqVaryingOut) {
-                        if (type.getBasicType() == glslang::EbtBlock) {
-                            addMemberDecoration(spvType, member, TranslateInterpolationDecoration(subQualifier));
-                            addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(subQualifier));
-                        }
-                    }
-                    addMemberDecoration(spvType, member, TranslateInvariantDecoration(subQualifier));
-
-                    if (qualifier.storage == glslang::EvqBuffer) {
-                        std::vector<spv::Decoration> memory;
-                        TranslateMemoryDecoration(subQualifier, memory);
-                        for (unsigned int i = 0; i < memory.size(); ++i)
-                            addMemberDecoration(spvType, member, memory[i]);
-                    }
-
-                    // compute location decoration; tricky based on whether inheritance is at play
-                    // TODO: This algorithm (and it's cousin above doing almost the same thing) should
-                    //       probably move to the linker stage of the front end proper, and just have the
-                    //       answer sitting already distributed throughout the individual member locations.
-                    int location = -1;                // will only decorate if present or inherited
-                    if (subQualifier.hasLocation()) { // no inheritance, or override of inheritance
-                        // struct members should not have explicit locations
-                        assert(type.getBasicType() != glslang::EbtStruct);
-                        location = subQualifier.layoutLocation;
-                    } else if (type.getBasicType() != glslang::EbtBlock) {
-                        //  If it is a not a Block, (...) Its members are assigned consecutive locations (...)
-                        //  The members, and their nested types, must not themselves have Location decorations.
-                    }
-                    else if (qualifier.hasLocation()) // inheritance
-                        location = qualifier.layoutLocation + locationOffset;
-                    if (qualifier.hasLocation())      // track for upcoming inheritance
-                        locationOffset += glslangIntermediate->computeTypeLocationSize(glslangType);
-                    if (location >= 0)
-                        builder.addMemberDecoration(spvType, member, spv::DecorationLocation, location);
-
-                    // component, XFB, others
-                    if (glslangType.getQualifier().hasComponent())
-                        builder.addMemberDecoration(spvType, member, spv::DecorationComponent, glslangType.getQualifier().layoutComponent);
-                    if (glslangType.getQualifier().hasXfbOffset())
-                        builder.addMemberDecoration(spvType, member, spv::DecorationOffset, glslangType.getQualifier().layoutXfbOffset);
-                    else if (explicitLayout != glslang::ElpNone) {
-                        // figure out what to do with offset, which is accumulating
-                        int nextOffset;
-                        updateMemberOffset(type, glslangType, offset, nextOffset, explicitLayout, subQualifier.layoutMatrix);
-                        if (offset >= 0)
-                            builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset);
-                        offset = nextOffset;
-                    }
-
-                    if (glslangType.isMatrix() && explicitLayout != glslang::ElpNone)
-                        builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, getMatrixStride(glslangType, explicitLayout, subQualifier.layoutMatrix));
-
-                    // built-in variable decorations
-                    spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangType.getQualifier().builtIn, true);
-                    if (builtIn != spv::BadValue)
-                        addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
-                }
-            }
-
-            // Decorate the structure
-            addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
-            addDecoration(spvType, TranslateBlockDecoration(type));
-            if (type.getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
-                builder.addCapability(spv::CapabilityGeometryStreams);
-                builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream);
-            }
-            if (glslangIntermediate->getXfbMode()) {
-                builder.addCapability(spv::CapabilityTransformFeedback);
-                if (type.getQualifier().hasXfbStride())
-                    builder.addDecoration(spvType, spv::DecorationXfbStride, type.getQualifier().layoutXfbStride);
-                if (type.getQualifier().hasXfbBuffer())
-                    builder.addDecoration(spvType, spv::DecorationXfbBuffer, type.getQualifier().layoutXfbBuffer);
-            }
+                memberRemapper[glslangMembers].resize(glslangMembers->size());
+            spvType = convertGlslangStructToSpvType(type, glslangMembers, explicitLayout, qualifier);
         }
         break;
     default:
@@ -2053,6 +1936,161 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
     return spvType;
 }
 
+
+// Do full recursive conversion of a glslang structure (or block) type to a SPIR-V Id.
+// explicitLayout can be kept the same throughout the hierarchical recursive walk.
+// Mutually recursive with convertGlslangToSpvType().
+spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TType& type,
+                                                              const glslang::TTypeList* glslangMembers,
+                                                              glslang::TLayoutPacking explicitLayout,
+                                                              const glslang::TQualifier& qualifier)
+{
+    // Create a vector of struct types for SPIR-V to consume
+    std::vector<spv::Id> spvMembers;
+    int memberDelta = 0;  // how much the member's index changes from glslang to SPIR-V, normally 0, except sometimes for blocks
+    int locationOffset = 0;  // for use across struct members, when they are called recursively
+    for (int i = 0; i < (int)glslangMembers->size(); i++) {
+        glslang::TType& glslangMember = *(*glslangMembers)[i].type;
+        if (glslangMember.hiddenMember()) {
+            ++memberDelta;
+            if (type.getBasicType() == glslang::EbtBlock)
+                memberRemapper[glslangMembers][i] = -1;
+        } else {
+            if (type.getBasicType() == glslang::EbtBlock)
+                memberRemapper[glslangMembers][i] = i - memberDelta;
+            // modify just this child's view of the qualifier
+            glslang::TQualifier memberQualifier = glslangMember.getQualifier();
+            InheritQualifiers(memberQualifier, qualifier);
+
+            // manually inherit location; it's more complex
+            if (! memberQualifier.hasLocation() && qualifier.hasLocation())
+                memberQualifier.layoutLocation = qualifier.layoutLocation + locationOffset;
+            if (qualifier.hasLocation())
+                locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember);
+
+            // recurse
+            spvMembers.push_back(convertGlslangToSpvType(glslangMember, explicitLayout, memberQualifier));
+        }
+    }
+
+    // Make the SPIR-V type
+    spv::Id spvType = builder.makeStructType(spvMembers, type.getTypeName().c_str());
+    if (! HasNonLayoutQualifiers(qualifier))
+        structMap[explicitLayout][qualifier.layoutMatrix][glslangMembers] = spvType;
+
+    // Decorate it
+    decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType);
+
+    return spvType;
+}
+
+void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
+                                                const glslang::TTypeList* glslangMembers,
+                                                glslang::TLayoutPacking explicitLayout,
+                                                const glslang::TQualifier& qualifier,
+                                                spv::Id spvType)
+{
+    // Name and decorate the non-hidden members
+    int offset = -1;
+    int locationOffset = 0;  // for use within the members of this struct
+    for (int i = 0; i < (int)glslangMembers->size(); i++) {
+        glslang::TType& glslangMember = *(*glslangMembers)[i].type;
+        int member = i;
+        if (type.getBasicType() == glslang::EbtBlock)
+            member = memberRemapper[glslangMembers][i];
+
+        // modify just this child's view of the qualifier
+        glslang::TQualifier memberQualifier = glslangMember.getQualifier();
+        InheritQualifiers(memberQualifier, qualifier);
+
+        // using -1 above to indicate a hidden member
+        if (member >= 0) {
+            builder.addMemberName(spvType, member, glslangMember.getFieldName().c_str());
+            addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix));
+            addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember));
+            // Add interpolation and auxiliary storage decorations only to top-level members of Input and Output storage classes
+            if (type.getQualifier().storage == glslang::EvqVaryingIn || type.getQualifier().storage == glslang::EvqVaryingOut) {
+                if (type.getBasicType() == glslang::EbtBlock) {
+                    addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
+                    addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
+                }
+            }
+            addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
+
+            if (qualifier.storage == glslang::EvqBuffer) {
+                std::vector<spv::Decoration> memory;
+                TranslateMemoryDecoration(memberQualifier, memory);
+                for (unsigned int i = 0; i < memory.size(); ++i)
+                    addMemberDecoration(spvType, member, memory[i]);
+            }
+
+            // Compute location decoration; tricky based on whether inheritance is at play and
+            // what kind of container we have, etc.
+            // TODO: This algorithm (and it's cousin above doing almost the same thing) should
+            //       probably move to the linker stage of the front end proper, and just have the
+            //       answer sitting already distributed throughout the individual member locations.
+            int location = -1;                // will only decorate if present or inherited
+            // Ignore member locations if the container is an array, as that's
+            // ill-specified and decisions have been made to not allow this anyway.
+            // The object itself must have a location, and that comes out from decorating the object,
+            // not the type (this code decorates types).
+            if (! type.isArray()) {
+                if (memberQualifier.hasLocation()) { // no inheritance, or override of inheritance
+                    // struct members should not have explicit locations
+                    assert(type.getBasicType() != glslang::EbtStruct);
+                    location = memberQualifier.layoutLocation;
+                } else if (type.getBasicType() != glslang::EbtBlock) {
+                    // If it is a not a Block, (...) Its members are assigned consecutive locations (...)
+                    // The members, and their nested types, must not themselves have Location decorations.
+                } else if (qualifier.hasLocation()) // inheritance
+                    location = qualifier.layoutLocation + locationOffset;
+            }
+            if (location >= 0)
+                builder.addMemberDecoration(spvType, member, spv::DecorationLocation, location);
+
+            if (qualifier.hasLocation())      // track for upcoming inheritance
+                locationOffset += glslangIntermediate->computeTypeLocationSize(glslangMember);
+
+            // component, XFB, others
+            if (glslangMember.getQualifier().hasComponent())
+                builder.addMemberDecoration(spvType, member, spv::DecorationComponent, glslangMember.getQualifier().layoutComponent);
+            if (glslangMember.getQualifier().hasXfbOffset())
+                builder.addMemberDecoration(spvType, member, spv::DecorationOffset, glslangMember.getQualifier().layoutXfbOffset);
+            else if (explicitLayout != glslang::ElpNone) {
+                // figure out what to do with offset, which is accumulating
+                int nextOffset;
+                updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix);
+                if (offset >= 0)
+                    builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset);
+                offset = nextOffset;
+            }
+
+            if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone)
+                builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix));
+
+            // built-in variable decorations
+            spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true);
+            if (builtIn != spv::BadValue)
+                addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
+        }
+    }
+
+    // Decorate the structure
+    addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
+    addDecoration(spvType, TranslateBlockDecoration(type));
+    if (type.getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
+        builder.addCapability(spv::CapabilityGeometryStreams);
+        builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream);
+    }
+    if (glslangIntermediate->getXfbMode()) {
+        builder.addCapability(spv::CapabilityTransformFeedback);
+        if (type.getQualifier().hasXfbStride())
+            builder.addDecoration(spvType, spv::DecorationXfbStride, type.getQualifier().layoutXfbStride);
+        if (type.getQualifier().hasXfbBuffer())
+            builder.addDecoration(spvType, spv::DecorationXfbBuffer, type.getQualifier().layoutXfbBuffer);
+    }
+}
+
 // Turn the expression forming the array size into an id.
 // This is not quite trivial, because of specialization constants.
 // Sometimes, a raw constant is turned into an Id, and sometimes
@@ -4026,7 +4064,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
     id = createSpvVariable(symbol);
     symbolValues[symbol->getId()] = id;
 
-    if (! symbol->getType().isStruct()) {
+    if (symbol->getBasicType() != glslang::EbtBlock) {
         addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
         addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
         addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
@@ -4045,6 +4083,9 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
             if (symbol->getQualifier().hasXfbOffset())
                 builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutXfbOffset);
         }
+        // atomic counters use this:
+        if (symbol->getQualifier().hasOffset())
+            builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset);
     }
 
     if (symbol->getQualifier().hasLocation())
index ee9642b..f71b935 100644 (file)
@@ -2045,8 +2045,15 @@ Block& Builder::makeNewBlock()
 
 Builder::LoopBlocks& Builder::makeNewLoop()
 {
-    // Older MSVC versions don't allow inlining of blocks below.
-    LoopBlocks blocks = {makeNewBlock(), makeNewBlock(), makeNewBlock(), makeNewBlock()};
+    // This verbosity is needed to simultaneously get the same behavior
+    // everywhere (id's in the same order), have a syntax that works
+    // across lots of versions of C++, have no warnings from pedantic
+    // compilation modes, and leave the rest of the code alone.
+    Block& head            = makeNewBlock();
+    Block& body            = makeNewBlock();
+    Block& merge           = makeNewBlock();
+    Block& continue_target = makeNewBlock();
+    LoopBlocks blocks(head, body, merge, continue_target);
     loops.push(blocks);
     return loops.top();
 }
index 4ae2835..c7e3bcd 100755 (executable)
@@ -397,7 +397,12 @@ public:
     void endSwitch(std::vector<Block*>& segmentBB);
 
     struct LoopBlocks {
+        LoopBlocks(Block& head, Block& body, Block& merge, Block& continue_target) :
+            head(head), body(body), merge(merge), continue_target(continue_target) { }
         Block &head, &body, &merge, &continue_target;
+    private:
+        LoopBlocks();
+        LoopBlocks& operator=(const LoopBlocks&);
     };
 
     // Start a new loop and prepare the builder to generate code for it.  Until
index 8049198..8019863 100644 (file)
@@ -238,7 +238,8 @@ std::string GetDefaultTBuiltInResourceString()
     return ostream.str();
 }
 
-void DecodeResourceLimits(TBuiltInResource* resources, char* config) {
+void DecodeResourceLimits(TBuiltInResource* resources, char* config)
+{
     const char* delims = " \t\n\r";
     const char* token = strtok(config, delims);
     while (token) {
index bff5dcd..63e9878 100644 (file)
@@ -58,25 +58,26 @@ extern "C" {
 
 // Command-line options
 enum TOptions {
-    EOptionNone               = 0x0000,
-    EOptionIntermediate       = 0x0001,
-    EOptionSuppressInfolog    = 0x0002,
-    EOptionMemoryLeakMode     = 0x0004,
-    EOptionRelaxedErrors      = 0x0008,
-    EOptionGiveWarnings       = 0x0010,
-    EOptionLinkProgram        = 0x0020,
-    EOptionMultiThreaded      = 0x0040,
-    EOptionDumpConfig         = 0x0080,
-    EOptionDumpReflection     = 0x0100,
-    EOptionSuppressWarnings   = 0x0200,
-    EOptionDumpVersions       = 0x0400,
-    EOptionSpv                = 0x0800,
-    EOptionHumanReadableSpv   = 0x1000,
-    EOptionVulkanRules        = 0x2000,
-    EOptionDefaultDesktop     = 0x4000,
-    EOptionOutputPreprocessed = 0x8000,
-    EOptionOutputHexadecimal  = 0x10000,
-    EOptionReadHlsl           = 0x20000,
+    EOptionNone               = 0,
+    EOptionIntermediate       = (1 <<  0),
+    EOptionSuppressInfolog    = (1 <<  1),
+    EOptionMemoryLeakMode     = (1 <<  2),
+    EOptionRelaxedErrors      = (1 <<  3),
+    EOptionGiveWarnings       = (1 <<  4),
+    EOptionLinkProgram        = (1 <<  5),
+    EOptionMultiThreaded      = (1 <<  6),
+    EOptionDumpConfig         = (1 <<  7),
+    EOptionDumpReflection     = (1 <<  8),
+    EOptionSuppressWarnings   = (1 <<  9),
+    EOptionDumpVersions       = (1 << 10),
+    EOptionSpv                = (1 << 11),
+    EOptionHumanReadableSpv   = (1 << 12),
+    EOptionVulkanRules        = (1 << 13),
+    EOptionDefaultDesktop     = (1 << 14),
+    EOptionOutputPreprocessed = (1 << 15),
+    EOptionOutputHexadecimal  = (1 << 16),
+    EOptionReadHlsl           = (1 << 17),
+    EOptionCascadingErrors    = (1 << 18),
 };
 
 //
@@ -223,7 +224,13 @@ void ProcessArguments(int argc, char* argv[])
             switch (argv[0][1]) {
             case 'H':
                 Options |= EOptionHumanReadableSpv;
-                // fall through to -V
+                if ((Options & EOptionSpv) == 0) {
+                    // default to Vulkan
+                    Options |= EOptionSpv;
+                    Options |= EOptionVulkanRules;
+                    Options |= EOptionLinkProgram;
+                }
+                break;
             case 'V':
                 Options |= EOptionSpv;
                 Options |= EOptionVulkanRules;
@@ -232,6 +239,8 @@ void ProcessArguments(int argc, char* argv[])
             case 'G':
                 Options |= EOptionSpv;
                 Options |= EOptionLinkProgram;
+                // undo a -H default to Vulkan
+                Options &= ~EOptionVulkanRules;
                 break;
             case 'E':
                 Options |= EOptionOutputPreprocessed;
@@ -239,6 +248,9 @@ void ProcessArguments(int argc, char* argv[])
             case 'c':
                 Options |= EOptionDumpConfig;
                 break;
+            case 'C':
+                Options |= EOptionCascadingErrors;
+                break;
             case 'd':
                 Options |= EOptionDefaultDesktop;
                 break;
@@ -339,6 +351,8 @@ void SetMessageOptions(EShMessages& messages)
         messages = (EShMessages)(messages | EShMsgOnlyPreprocessor);
     if (Options & EOptionReadHlsl)
         messages = (EShMessages)(messages | EShMsgReadHlsl);
+    if (Options & EOptionCascadingErrors)
+        messages = (EShMessages)(messages | EShMsgCascadingErrors);
 }
 
 //
@@ -764,6 +778,7 @@ void usage()
            "              errors will appear on stderr.\n"
            "  -c          configuration dump;\n"
            "              creates the default configuration file (redirect to a .conf file)\n"
+           "  -C          cascading errors; risks crashes from accumulation of error recoveries\n"
            "  -d          default to desktop (#version 110) when there is no shader #version\n"
            "              (default is ES version 100)\n"
            "  -D          input is HLSL\n"
index 6c63744..a6e833a 100644 (file)
@@ -44,7 +44,7 @@ ERROR: 0:107: 'overloadE' : no matching overloaded function found
 ERROR: 0:108: 'overloadE' : no matching overloaded function found 
 ERROR: 0:111: 'overloadE' : no matching overloaded function found 
 ERROR: 0:117: 'overloadF' : no matching overloaded function found 
-ERROR: 0:121: 'gl_TexCoord array size' : must be less than gl_MaxTextureCoords (32)
+ERROR: 0:121: 'gl_TexCoord array size' : must be less than or equal to gl_MaxTextureCoords (32)
 ERROR: 0:165: 'switch' : Reserved word. 
 ERROR: 0:171: 'default' : Reserved word. 
 ERROR: 0:165: 'switch statements' : not supported for this version or the enabled extensions 
index edcae46..c2f12c9 100644 (file)
@@ -161,9 +161,9 @@ ERROR: node is still EOpNull!
 0:62          packSnorm2x16 (global highp uint)
 0:62            'v2a' (global mediump 2-component vector of float)
 0:63      Sequence
-0:63        move second child to first child (temp highp 2-component vector of float)
+0:63        move second child to first child (temp mediump 2-component vector of float)
 0:63          'v20' (temp mediump 2-component vector of float)
-0:63          unpackSnorm2x16 (global highp 2-component vector of float)
+0:63          unpackSnorm2x16 (global mediump 2-component vector of float)
 0:63            'uy' (global mediump uint)
 0:64      Sequence
 0:64        move second child to first child (temp highp uint)
@@ -368,9 +368,9 @@ ERROR: node is still EOpNull!
 0:62          packSnorm2x16 (global highp uint)
 0:62            'v2a' (global mediump 2-component vector of float)
 0:63      Sequence
-0:63        move second child to first child (temp highp 2-component vector of float)
+0:63        move second child to first child (temp mediump 2-component vector of float)
 0:63          'v20' (temp mediump 2-component vector of float)
-0:63          unpackSnorm2x16 (global highp 2-component vector of float)
+0:63          unpackSnorm2x16 (global mediump 2-component vector of float)
 0:63            'uy' (global mediump uint)
 0:64      Sequence
 0:64        move second child to first child (temp highp uint)
index b8b39f5..678c3e1 100644 (file)
@@ -179,27 +179,27 @@ ERROR: node is still EOpNull!
 0:31          'u4' (temp highp 4-component vector of uint)
 0:32      move second child to first child (temp highp int)
 0:32        'i1' (temp highp int)
-0:32        bitCount (global lowp int)
+0:32        bitCount (global highp int)
 0:32          'i1' (temp highp int)
 0:33      move second child to first child (temp highp 3-component vector of int)
 0:33        'i3' (temp highp 3-component vector of int)
-0:33        bitCount (global lowp 3-component vector of int)
+0:33        bitCount (global highp 3-component vector of int)
 0:33          'u3' (temp highp 3-component vector of uint)
 0:34      move second child to first child (temp highp 2-component vector of int)
 0:34        'i2' (temp highp 2-component vector of int)
-0:34        findLSB (global lowp 2-component vector of int)
+0:34        findLSB (global highp 2-component vector of int)
 0:34          'i2' (temp highp 2-component vector of int)
 0:35      move second child to first child (temp highp 4-component vector of int)
 0:35        'i4' (temp highp 4-component vector of int)
-0:35        findLSB (global lowp 4-component vector of int)
+0:35        findLSB (global highp 4-component vector of int)
 0:35          'u4' (temp highp 4-component vector of uint)
 0:36      move second child to first child (temp highp int)
 0:36        'i1' (temp highp int)
-0:36        findMSB (global lowp int)
+0:36        findMSB (global highp int)
 0:36          'i1' (temp highp int)
 0:37      move second child to first child (temp highp 2-component vector of int)
 0:37        'i2' (temp highp 2-component vector of int)
-0:37        findMSB (global lowp 2-component vector of int)
+0:37        findMSB (global highp 2-component vector of int)
 0:37          'u2' (temp highp 2-component vector of uint)
 0:40      move second child to first child (temp highp 3-component vector of float)
 0:40        'v3' (temp highp 3-component vector of float)
@@ -219,13 +219,13 @@ ERROR: node is still EOpNull!
 0:46        'u1' (temp highp uint)
 0:46        PackSnorm4x8 (global highp uint)
 0:46          'v4' (temp mediump 4-component vector of float)
-0:47      move second child to first child (temp mediump 4-component vector of float)
+0:47      move second child to first child (temp highp 4-component vector of float)
 0:47        'v4' (temp mediump 4-component vector of float)
-0:47        UnpackUnorm4x8 (global mediump 4-component vector of float)
+0:47        UnpackUnorm4x8 (global highp 4-component vector of float)
 0:47          'u1' (temp highp uint)
-0:48      move second child to first child (temp mediump 4-component vector of float)
+0:48      move second child to first child (temp highp 4-component vector of float)
 0:48        'v4' (temp mediump 4-component vector of float)
-0:48        UnpackSnorm4x8 (global mediump 4-component vector of float)
+0:48        UnpackSnorm4x8 (global highp 4-component vector of float)
 0:48          'u1' (temp highp uint)
 0:60  Function Definition: foo( (global void)
 0:60    Function Parameters: 
@@ -1110,27 +1110,27 @@ ERROR: node is still EOpNull!
 0:31          'u4' (temp highp 4-component vector of uint)
 0:32      move second child to first child (temp highp int)
 0:32        'i1' (temp highp int)
-0:32        bitCount (global lowp int)
+0:32        bitCount (global highp int)
 0:32          'i1' (temp highp int)
 0:33      move second child to first child (temp highp 3-component vector of int)
 0:33        'i3' (temp highp 3-component vector of int)
-0:33        bitCount (global lowp 3-component vector of int)
+0:33        bitCount (global highp 3-component vector of int)
 0:33          'u3' (temp highp 3-component vector of uint)
 0:34      move second child to first child (temp highp 2-component vector of int)
 0:34        'i2' (temp highp 2-component vector of int)
-0:34        findLSB (global lowp 2-component vector of int)
+0:34        findLSB (global highp 2-component vector of int)
 0:34          'i2' (temp highp 2-component vector of int)
 0:35      move second child to first child (temp highp 4-component vector of int)
 0:35        'i4' (temp highp 4-component vector of int)
-0:35        findLSB (global lowp 4-component vector of int)
+0:35        findLSB (global highp 4-component vector of int)
 0:35          'u4' (temp highp 4-component vector of uint)
 0:36      move second child to first child (temp highp int)
 0:36        'i1' (temp highp int)
-0:36        findMSB (global lowp int)
+0:36        findMSB (global highp int)
 0:36          'i1' (temp highp int)
 0:37      move second child to first child (temp highp 2-component vector of int)
 0:37        'i2' (temp highp 2-component vector of int)
-0:37        findMSB (global lowp 2-component vector of int)
+0:37        findMSB (global highp 2-component vector of int)
 0:37          'u2' (temp highp 2-component vector of uint)
 0:40      move second child to first child (temp highp 3-component vector of float)
 0:40        'v3' (temp highp 3-component vector of float)
@@ -1150,13 +1150,13 @@ ERROR: node is still EOpNull!
 0:46        'u1' (temp highp uint)
 0:46        PackSnorm4x8 (global highp uint)
 0:46          'v4' (temp mediump 4-component vector of float)
-0:47      move second child to first child (temp mediump 4-component vector of float)
+0:47      move second child to first child (temp highp 4-component vector of float)
 0:47        'v4' (temp mediump 4-component vector of float)
-0:47        UnpackUnorm4x8 (global mediump 4-component vector of float)
+0:47        UnpackUnorm4x8 (global highp 4-component vector of float)
 0:47          'u1' (temp highp uint)
-0:48      move second child to first child (temp mediump 4-component vector of float)
+0:48      move second child to first child (temp highp 4-component vector of float)
 0:48        'v4' (temp mediump 4-component vector of float)
-0:48        UnpackSnorm4x8 (global mediump 4-component vector of float)
+0:48        UnpackSnorm4x8 (global highp 4-component vector of float)
 0:48          'u1' (temp highp uint)
 0:60  Function Definition: foo( (global void)
 0:60    Function Parameters: 
index 8cfd20c..4b7825b 100644 (file)
@@ -14,7 +14,7 @@ ERROR: 0:28: '' : cannot use invariant qualifier on a function parameter
 ERROR: 0:30: '' : cannot use layout qualifiers on a function parameter 
 ERROR: 0:31: '' : cannot use auxiliary or interpolation qualifiers on a function parameter 
 ERROR: 0:42: 'location' : overlapping use of location 53
-ERROR: 0:47: 'gl_ClipDistance array size' : must be less than gl_MaxClipDistances (8)
+ERROR: 0:47: 'gl_ClipDistance array size' : must be less than or equal to gl_MaxClipDistances (8)
 ERROR: 0:51: 'start' : undeclared identifier 
 ERROR: 0:51: '' : constant expression required 
 ERROR: 0:51: 'layout-id value' : scalar integer expression required 
index 7460139..0a097a2 100644 (file)
@@ -64,7 +64,7 @@ ERROR: node is still EOpNull!
 0:47          3.000000
 0:49      move second child to first child (temp 4-component vector of float)
 0:49        gl_Position: direct index for structure (invariant gl_Position 4-component vector of float Position)
-0:49          'anon@0' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
+0:49          'anon@0' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, ...})
 0:49          Constant:
 0:49            0 (const uint)
 0:49        Construct vec4 (temp 4-component vector of float)
index f5c3e9c..2e78468 100644 (file)
@@ -374,6 +374,18 @@ ERROR: node is still EOpNull!
 0:?       1 (const int)
 0:?       9.000000
 0:?       false (const bool)
+0:?     'cval1' (const bool)
+0:?       true (const bool)
+0:?     'cval2' (const bool)
+0:?       false (const bool)
+0:?     'cval3' (const bool)
+0:?       false (const bool)
+0:?     'cval4' (const bool)
+0:?       true (const bool)
+0:?     'cval5' (const bool)
+0:?       false (const bool)
+0:?     'cval6' (const bool)
+0:?       true (const bool)
 
 
 Linked fragment stage:
@@ -744,4 +756,16 @@ ERROR: node is still EOpNull!
 0:?       1 (const int)
 0:?       9.000000
 0:?       false (const bool)
+0:?     'cval1' (const bool)
+0:?       true (const bool)
+0:?     'cval2' (const bool)
+0:?       false (const bool)
+0:?     'cval3' (const bool)
+0:?       false (const bool)
+0:?     'cval4' (const bool)
+0:?       true (const bool)
+0:?     'cval5' (const bool)
+0:?       false (const bool)
+0:?     'cval6' (const bool)
+0:?       true (const bool)
 
index a9dfb91..1ea7dbd 100644 (file)
@@ -1,8 +1,12 @@
 functionSemantics.frag
 Warning, version 400 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 0:74: 'return' : cannot convert return value to function return type 
+WARNING: 0:74: 'return' : type conversion on return values was not explicitly allowed until version 420 
+ERROR: 1 compilation errors.  No code generated.
+
 
 Shader version: 400
-0:? Sequence
+ERROR: node is still EOpNull!
 0:5  Function Definition: foo(i1;i1;i1;i1;i1;i1; (global int)
 0:5    Function Parameters: 
 0:5      'a' (in int)
@@ -195,6 +199,11 @@ Shader version: 400
 0:69          Construct ivec2 (temp 2-component vector of int)
 0:69            Convert float to int (temp int)
 0:69              'F' (temp float)
+0:72  Function Definition: badConv( (global 4-component vector of float)
+0:72    Function Parameters: 
+0:74    Sequence
+0:74      Branch: Return with expression
+0:74        'u' (uniform float)
 0:?   Linker Objects
 0:?     'u' (uniform float)
 
@@ -203,7 +212,7 @@ Linked fragment stage:
 
 
 Shader version: 400
-0:? Sequence
+ERROR: node is still EOpNull!
 0:5  Function Definition: foo(i1;i1;i1;i1;i1;i1; (global int)
 0:5    Function Parameters: 
 0:5      'a' (in int)
@@ -396,6 +405,11 @@ Shader version: 400
 0:69          Construct ivec2 (temp 2-component vector of int)
 0:69            Convert float to int (temp int)
 0:69              'F' (temp float)
+0:72  Function Definition: badConv( (global 4-component vector of float)
+0:72    Function Parameters: 
+0:74    Sequence
+0:74      Branch: Return with expression
+0:74        'u' (uniform float)
 0:?   Linker Objects
 0:?     'u' (uniform float)
 
diff --git a/Test/baseResults/glspv.esversion.vert.out b/Test/baseResults/glspv.esversion.vert.out
new file mode 100755 (executable)
index 0000000..ef406a1
--- /dev/null
@@ -0,0 +1,11 @@
+glspv.esversion.vert
+ERROR: #version: ES shaders for OpenGL SPIR-V are not supported
+Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 1 compilation errors.  No code generated.
+
+
+
+Linked vertex stage:
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.frag.out b/Test/baseResults/glspv.frag.out
new file mode 100755 (executable)
index 0000000..5df46c5
--- /dev/null
@@ -0,0 +1,13 @@
+glspv.frag
+ERROR: 0:4: '#error' : GL_SPIRV is set ( correct , not an error )  
+ERROR: 0:6: '#error' : GL_SPIR is 100  
+ERROR: 0:14: 'input_attachment_index' : only allowed when using GLSL for Vulkan 
+ERROR: 0:14: '' :  syntax error
+ERROR: 4 compilation errors.  No code generated.
+
+
+
+Linked fragment stage:
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.version.frag.out b/Test/baseResults/glspv.version.frag.out
new file mode 100755 (executable)
index 0000000..7f44889
--- /dev/null
@@ -0,0 +1,24 @@
+glspv.version.frag
+ERROR: #version: compilation for SPIR-V does not support the compatibility profile
+
+
+Linked fragment stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 6
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginLowerLeft
+                              Source GLSL 330
+                              Name 4  "main"
+               2:             TypeVoid
+               3:             TypeFunction 2
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/glspv.version.vert.out b/Test/baseResults/glspv.version.vert.out
new file mode 100755 (executable)
index 0000000..eb003df
--- /dev/null
@@ -0,0 +1,10 @@
+glspv.version.vert
+ERROR: #version: Desktop shaders for OpenGL SPIR-V require version 330 or higher
+ERROR: 1 compilation errors.  No code generated.
+
+
+
+Linked vertex stage:
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/glspv.vert.out b/Test/baseResults/glspv.vert.out
new file mode 100755 (executable)
index 0000000..b91ab50
--- /dev/null
@@ -0,0 +1,18 @@
+glspv.vert
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+ERROR: 0:3: 'push_constant' : only allowed when using GLSL for Vulkan 
+ERROR: 0:6: 'descriptor set' : only allowed when using GLSL for Vulkan 
+ERROR: 0:8: 'shared' : not allowed when generating SPIR-V 
+ERROR: 0:9: 'packed' : not allowed when generating SPIR-V 
+ERROR: 0:13: 'gl_VertexIndex' : undeclared identifier 
+ERROR: 0:14: 'gl_InstanceIndex' : undeclared identifier 
+ERROR: 0:17: 'gl_DepthRangeParameters' : undeclared identifier 
+ERROR: 0:20: '' :  syntax error
+ERROR: 8 compilation errors.  No code generated.
+
+
+
+Linked vertex stage:
+
+
+SPIR-V is not generated for failed compile or link
index 113f152..6f29aa2 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.array.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:11  Function Definition: PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float)
+0:11  Function Definition: PixelShaderFunction(i1;vf4[3]; (global 4-component vector of float)
 0:8    Function Parameters: 
 0:8      'i' (in int)
 0:8      'input' (in 3-element array of 4-component vector of float)
@@ -12,11 +12,11 @@ gl_FragCoord origin is upper left
 0:10          add (temp 4-component vector of float)
 0:10            add (temp 4-component vector of float)
 0:10              direct index (temp 4-component vector of float)
-0:10                'a' (temp 4-element array of 4-component vector of float)
+0:10                'a' (global 4-element array of 4-component vector of float)
 0:10                Constant:
 0:10                  1 (const int)
 0:10              indirect index (temp 4-component vector of float)
-0:10                'a' (temp 4-element array of 4-component vector of float)
+0:10                'a' (global 4-element array of 4-component vector of float)
 0:10                'i' (in int)
 0:10            add (temp 4-component vector of float)
 0:10              direct index (temp 4-component vector of float)
@@ -38,14 +38,14 @@ gl_FragCoord origin is upper left
 0:10            indirect index (temp 4-component vector of float)
 0:10              m: direct index for structure (temp 7-element array of 4-component vector of float)
 0:10                indirect index (temp structure{temp 7-element array of 4-component vector of float m})
-0:10                  's' (temp 11-element array of structure{temp 7-element array of 4-component vector of float m})
+0:10                  's' (global 11-element array of structure{temp 7-element array of 4-component vector of float m})
 0:10                  'i' (in int)
 0:10                Constant:
 0:10                  0 (const int)
 0:10              'i' (in int)
 0:?   Linker Objects
-0:?     'a' (temp 4-element array of 4-component vector of float)
-0:?     's' (temp 11-element array of structure{temp 7-element array of 4-component vector of float m})
+0:?     'a' (global 4-element array of 4-component vector of float)
+0:?     's' (global 11-element array of structure{temp 7-element array of 4-component vector of float m})
 
 
 Linked fragment stage:
@@ -54,7 +54,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:11  Function Definition: PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float)
+0:11  Function Definition: PixelShaderFunction(i1;vf4[3]; (global 4-component vector of float)
 0:8    Function Parameters: 
 0:8      'i' (in int)
 0:8      'input' (in 3-element array of 4-component vector of float)
@@ -64,11 +64,11 @@ gl_FragCoord origin is upper left
 0:10          add (temp 4-component vector of float)
 0:10            add (temp 4-component vector of float)
 0:10              direct index (temp 4-component vector of float)
-0:10                'a' (temp 4-element array of 4-component vector of float)
+0:10                'a' (global 4-element array of 4-component vector of float)
 0:10                Constant:
 0:10                  1 (const int)
 0:10              indirect index (temp 4-component vector of float)
-0:10                'a' (temp 4-element array of 4-component vector of float)
+0:10                'a' (global 4-element array of 4-component vector of float)
 0:10                'i' (in int)
 0:10            add (temp 4-component vector of float)
 0:10              direct index (temp 4-component vector of float)
@@ -90,18 +90,18 @@ gl_FragCoord origin is upper left
 0:10            indirect index (temp 4-component vector of float)
 0:10              m: direct index for structure (temp 7-element array of 4-component vector of float)
 0:10                indirect index (temp structure{temp 7-element array of 4-component vector of float m})
-0:10                  's' (temp 11-element array of structure{temp 7-element array of 4-component vector of float m})
+0:10                  's' (global 11-element array of structure{temp 7-element array of 4-component vector of float m})
 0:10                  'i' (in int)
 0:10                Constant:
 0:10                  0 (const int)
 0:10              'i' (in int)
 0:?   Linker Objects
-0:?     'a' (temp 4-element array of 4-component vector of float)
-0:?     's' (temp 11-element array of structure{temp 7-element array of 4-component vector of float m})
+0:?     'a' (global 4-element array of 4-component vector of float)
+0:?     's' (global 11-element array of structure{temp 7-element array of 4-component vector of float m})
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 63
+// Id's are bound by 64
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -114,9 +114,9 @@ gl_FragCoord origin is upper left
                               Name 19  "i"
                               Name 27  "input"
                               Name 40  "b"
-                              Name 50  ""
-                              MemberName 50 0  "m"
-                              Name 54  "s"
+                              Name 51  ""
+                              MemberName 51 0  "m"
+                              Name 55  "s"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -124,10 +124,11 @@ gl_FragCoord origin is upper left
                8:             TypeInt 32 0
                9:      8(int) Constant 4
               10:             TypeArray 7(fvec4) 9
-              11:             TypePointer Function 10
+              11:             TypePointer Private 10
+           12(a):     11(ptr) Variable Private
               13:             TypeInt 32 1
               14:     13(int) Constant 1
-              15:             TypePointer Function 7(fvec4)
+              15:             TypePointer Private 7(fvec4)
               18:             TypePointer Input 13(int)
            19(i):     18(ptr) Variable Input
               24:      8(int) Constant 3
@@ -140,18 +141,18 @@ gl_FragCoord origin is upper left
               38:             TypeArray 7(fvec4) 37
               39:             TypePointer Function 38
               41:     13(int) Constant 5
-              48:      8(int) Constant 7
-              49:             TypeArray 7(fvec4) 48
-              50:             TypeStruct 49
-              51:      8(int) Constant 11
-              52:             TypeArray 50(struct) 51
-              53:             TypePointer Function 52
-              56:     13(int) Constant 0
+              42:             TypePointer Function 7(fvec4)
+              49:      8(int) Constant 7
+              50:             TypeArray 7(fvec4) 49
+              51:             TypeStruct 50
+              52:      8(int) Constant 11
+              53:             TypeArray 51(struct) 52
+              54:             TypePointer Private 53
+           55(s):     54(ptr) Variable Private
+              57:     13(int) Constant 0
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-           12(a):     11(ptr) Variable Function
            40(b):     39(ptr) Variable Function
-           54(s):     53(ptr) Variable Function
               16:     15(ptr) AccessChain 12(a) 14
               17:    7(fvec4) Load 16
               20:     13(int) Load 19(i)
@@ -165,17 +166,17 @@ gl_FragCoord origin is upper left
               34:    7(fvec4) Load 33
               35:    7(fvec4) FAdd 31 34
               36:    7(fvec4) FAdd 23 35
-              42:     15(ptr) AccessChain 40(b) 41
-              43:    7(fvec4) Load 42
-              44:     13(int) Load 19(i)
-              45:     15(ptr) AccessChain 40(b) 44
-              46:    7(fvec4) Load 45
-              47:    7(fvec4) FAdd 43 46
-              55:     13(int) Load 19(i)
-              57:     13(int) Load 19(i)
-              58:     15(ptr) AccessChain 54(s) 55 56 57
-              59:    7(fvec4) Load 58
-              60:    7(fvec4) FAdd 47 59
-              61:    7(fvec4) FAdd 36 60
-                              ReturnValue 61
+              43:     42(ptr) AccessChain 40(b) 41
+              44:    7(fvec4) Load 43
+              45:     13(int) Load 19(i)
+              46:     42(ptr) AccessChain 40(b) 45
+              47:    7(fvec4) Load 46
+              48:    7(fvec4) FAdd 44 47
+              56:     13(int) Load 19(i)
+              58:     13(int) Load 19(i)
+              59:     15(ptr) AccessChain 55(s) 56 57 58
+              60:    7(fvec4) Load 59
+              61:    7(fvec4) FAdd 48 60
+              62:    7(fvec4) FAdd 36 61
+                              ReturnValue 62
                               FunctionEnd
index bc06bd0..251c7be 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.assoc.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:12  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:12  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (global 4-component vector of float)
 0:8    Function Parameters: 
 0:8      'a1' (in 4-component vector of float)
 0:8      'a2' (in 4-component vector of float)
@@ -38,7 +38,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:12  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:12  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (global 4-component vector of float)
 0:8    Function Parameters: 
 0:8      'a1' (in 4-component vector of float)
 0:8      'a2' (in 4-component vector of float)
index 3bfbea7..77e34fe 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.attribute.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:14  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:14  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -20,7 +20,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:14  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:14  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
index 61ca29f..24b18cd 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.cast.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:5  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -28,7 +28,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:5  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
diff --git a/Test/baseResults/hlsl.discard.frag.out b/Test/baseResults/hlsl.discard.frag.out
new file mode 100755 (executable)
index 0000000..324029a
--- /dev/null
@@ -0,0 +1,151 @@
+hlsl.discard.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7  Function Definition: foo(f1; (global void)
+0:2    Function Parameters: 
+0:2      'f' (in float)
+0:?     Sequence
+0:3      Test condition and select (temp void)
+0:3        Condition
+0:3        Compare Less Than (temp bool)
+0:3          'f' (in float)
+0:3          Constant:
+0:3            1.000000
+0:3        true case
+0:4        Branch: Kill
+0:15  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'input' (in 4-component vector of float)
+0:?     Sequence
+0:9      Function Call: foo(f1; (global void)
+0:9        direct index (temp float)
+0:9          'input' (in 4-component vector of float)
+0:9          Constant:
+0:9            2 (const int)
+0:10      Test condition and select (temp void)
+0:10        Condition
+0:10        direct index (temp float)
+0:10          'input' (in 4-component vector of float)
+0:10          Constant:
+0:10            0 (const int)
+0:10        true case
+0:11        Branch: Kill
+0:12      Sequence
+0:12        move second child to first child (temp float)
+0:12          'f' (temp float)
+0:12          direct index (temp float)
+0:12            'input' (in 4-component vector of float)
+0:12            Constant:
+0:12              0 (const int)
+0:13      Branch: Kill
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:7  Function Definition: foo(f1; (global void)
+0:2    Function Parameters: 
+0:2      'f' (in float)
+0:?     Sequence
+0:3      Test condition and select (temp void)
+0:3        Condition
+0:3        Compare Less Than (temp bool)
+0:3          'f' (in float)
+0:3          Constant:
+0:3            1.000000
+0:3        true case
+0:4        Branch: Kill
+0:15  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
+0:8    Function Parameters: 
+0:8      'input' (in 4-component vector of float)
+0:?     Sequence
+0:9      Function Call: foo(f1; (global void)
+0:9        direct index (temp float)
+0:9          'input' (in 4-component vector of float)
+0:9          Constant:
+0:9            2 (const int)
+0:10      Test condition and select (temp void)
+0:10        Condition
+0:10        direct index (temp float)
+0:10          'input' (in 4-component vector of float)
+0:10          Constant:
+0:10            0 (const int)
+0:10        true case
+0:11        Branch: Kill
+0:12      Sequence
+0:12        move second child to first child (temp float)
+0:12          'f' (temp float)
+0:12          direct index (temp float)
+0:12            'input' (in 4-component vector of float)
+0:12            Constant:
+0:12              0 (const int)
+0:13      Branch: Kill
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 39
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 21
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "PixelShaderFunction"
+                              Name 10  "foo(f1;"
+                              Name 9  "f"
+                              Name 21  "input"
+                              Name 22  "param"
+                              Name 35  "f"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypePointer Function 6(float)
+               8:             TypeFunction 2 7(ptr)
+              13:    6(float) Constant 1065353216
+              14:             TypeBool
+              19:             TypeVector 6(float) 4
+              20:             TypePointer Input 19(fvec4)
+       21(input):     20(ptr) Variable Input
+              23:             TypeInt 32 0
+              24:     23(int) Constant 2
+              25:             TypePointer Input 6(float)
+              29:     23(int) Constant 0
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+       22(param):      7(ptr) Variable Function
+           35(f):      7(ptr) Variable Function
+              26:     25(ptr) AccessChain 21(input) 24
+              27:    6(float) Load 26
+                              Store 22(param) 27
+              28:           2 FunctionCall 10(foo(f1;) 22(param)
+              30:     25(ptr) AccessChain 21(input) 29
+              31:    6(float) Load 30
+                              SelectionMerge 33 None
+                              BranchConditional 31 32 33
+              32:               Label
+                                Kill
+              33:             Label
+              36:     25(ptr) AccessChain 21(input) 29
+              37:    6(float) Load 36
+                              Store 35(f) 37
+                              Kill
+                              FunctionEnd
+     10(foo(f1;):           2 Function None 8
+            9(f):      7(ptr) FunctionParameter
+              11:             Label
+              12:    6(float) Load 9(f)
+              15:    14(bool) FOrdLessThan 12 13
+                              SelectionMerge 17 None
+                              BranchConditional 15 16 17
+              16:               Label
+                                Kill
+              17:             Label
+                              Return
+                              FunctionEnd
index 1ac86d8..c14a3a5 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.doLoop.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:7  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -33,7 +33,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:7  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:7  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
index c21931d..07de03e 100755 (executable)
@@ -2,15 +2,17 @@ hlsl.float1.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  move second child to first child (temp 1-component vector of float)
-0:1    'f1' (temp 1-component vector of float)
-0:1    Constant:
-0:1      1.000000
-0:2  move second child to first child (temp float)
-0:2    'scalar' (temp float)
-0:2    Constant:
-0:2      2.000000
-0:8  Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float)
+0:1  Sequence
+0:1    move second child to first child (temp 1-component vector of float)
+0:1      'f1' (global 1-component vector of float)
+0:1      Constant:
+0:1        1.000000
+0:2  Sequence
+0:2    move second child to first child (temp float)
+0:2      'scalar' (global float)
+0:2      Constant:
+0:2        2.000000
+0:8  Function Definition: ShaderFunction(vf1;f1; (global 1-component vector of float)
 0:5    Function Parameters: 
 0:5      'inFloat1' (in 1-component vector of float)
 0:5      'inScalar' (in float)
@@ -18,14 +20,14 @@ gl_FragCoord origin is upper left
 0:6      Branch: Return with expression
 0:6        add (temp 1-component vector of float)
 0:6          vector-scale (temp 1-component vector of float)
-0:6            'f1' (temp 1-component vector of float)
-0:6            'scalar' (temp float)
+0:6            'f1' (global 1-component vector of float)
+0:6            'scalar' (global float)
 0:6          vector-scale (temp 1-component vector of float)
 0:6            'inFloat1' (in 1-component vector of float)
 0:6            'inScalar' (in float)
 0:?   Linker Objects
-0:?     'f1' (temp 1-component vector of float)
-0:?     'scalar' (temp float)
+0:?     'f1' (global 1-component vector of float)
+0:?     'scalar' (global float)
 
 
 Linked fragment stage:
@@ -34,15 +36,17 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  move second child to first child (temp 1-component vector of float)
-0:1    'f1' (temp 1-component vector of float)
-0:1    Constant:
-0:1      1.000000
-0:2  move second child to first child (temp float)
-0:2    'scalar' (temp float)
-0:2    Constant:
-0:2      2.000000
-0:8  Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float)
+0:1  Sequence
+0:1    move second child to first child (temp 1-component vector of float)
+0:1      'f1' (global 1-component vector of float)
+0:1      Constant:
+0:1        1.000000
+0:2  Sequence
+0:2    move second child to first child (temp float)
+0:2      'scalar' (global float)
+0:2      Constant:
+0:2        2.000000
+0:8  Function Definition: ShaderFunction(vf1;f1; (global 1-component vector of float)
 0:5    Function Parameters: 
 0:5      'inFloat1' (in 1-component vector of float)
 0:5      'inScalar' (in float)
@@ -50,18 +54,18 @@ gl_FragCoord origin is upper left
 0:6      Branch: Return with expression
 0:6        add (temp 1-component vector of float)
 0:6          vector-scale (temp 1-component vector of float)
-0:6            'f1' (temp 1-component vector of float)
-0:6            'scalar' (temp float)
+0:6            'f1' (global 1-component vector of float)
+0:6            'scalar' (global float)
 0:6          vector-scale (temp 1-component vector of float)
 0:6            'inFloat1' (in 1-component vector of float)
 0:6            'inScalar' (in float)
 0:?   Linker Objects
-0:?     'f1' (temp 1-component vector of float)
-0:?     'scalar' (temp float)
+0:?     'f1' (global 1-component vector of float)
+0:?     'scalar' (global float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 24
+// Id's are bound by 27
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -73,28 +77,33 @@ gl_FragCoord origin is upper left
                               Name 11  "ShaderFunction(vf1;f1;"
                               Name 9  "inFloat1"
                               Name 10  "inScalar"
-                              Name 13  "f1"
-                              Name 15  "scalar"
+                              Name 14  "f1"
+                              Name 16  "scalar"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypePointer Function 6(float)
                8:             TypeFunction 6(float) 7(ptr) 7(ptr)
+              13:             TypePointer Private 6(float)
+          14(f1):     13(ptr) Variable Private
+              15:    6(float) Constant 1065353216
+      16(scalar):     13(ptr) Variable Private
+              17:    6(float) Constant 1073741824
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+                              Store 14(f1) 15
+                              Store 16(scalar) 17
                               FunctionEnd
 11(ShaderFunction(vf1;f1;):    6(float) Function None 8
      9(inFloat1):      7(ptr) FunctionParameter
     10(inScalar):      7(ptr) FunctionParameter
               12:             Label
-          13(f1):      7(ptr) Variable Function
-      15(scalar):      7(ptr) Variable Function
-              14:    6(float) Load 13(f1)
-              16:    6(float) Load 15(scalar)
-              17:    6(float) IMul 14 16
-              18:    6(float) Load 9(inFloat1)
-              19:    6(float) Load 10(inScalar)
+              18:    6(float) Load 14(f1)
+              19:    6(float) Load 16(scalar)
               20:    6(float) IMul 18 19
-              21:    6(float) FAdd 17 20
-                              ReturnValue 21
+              21:    6(float) Load 9(inFloat1)
+              22:    6(float) Load 10(inScalar)
+              23:    6(float) IMul 21 22
+              24:    6(float) FAdd 20 23
+                              ReturnValue 24
                               FunctionEnd
index 7ad1721..a086d95 100755 (executable)
@@ -2,27 +2,28 @@ hlsl.float4.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  move second child to first child (temp 4-component vector of float)
-0:1    'AmbientColor' (temp 4-component vector of float)
-0:?     Constant:
-0:?       1.000000
-0:?       0.500000
-0:?       0.000000
-0:?       1.000000
-0:12  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
+0:1  Sequence
+0:1    move second child to first child (temp 4-component vector of float)
+0:1      'AmbientColor' (global 4-component vector of float)
+0:?       Constant:
+0:?         1.000000
+0:?         0.500000
+0:?         0.000000
+0:?         1.000000
+0:12  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
 0:9    Function Parameters: 
 0:9      'input' (in 4-component vector of float)
 0:?     Sequence
 0:10      Branch: Return with expression
 0:10        component-wise multiply (temp 4-component vector of float)
 0:10          'input' (in 4-component vector of float)
-0:10          'AmbientColor' (temp 4-component vector of float)
+0:10          'AmbientColor' (global 4-component vector of float)
 0:?   Linker Objects
-0:?     'AmbientColor' (temp 4-component vector of float)
-0:?     'ff1' (temp bool Face)
-0:?     'ff2' (temp 4-component vector of float)
-0:?     'ff3' (temp 4-component vector of float)
-0:?     'ff4' (temp 4-component vector of float FragCoord)
+0:?     'AmbientColor' (global 4-component vector of float)
+0:?     'ff1' (global bool Face)
+0:?     'ff2' (global 4-component vector of float)
+0:?     'ff3' (global 4-component vector of float)
+0:?     'ff4' (global 4-component vector of float FragCoord)
 
 
 Linked fragment stage:
@@ -31,31 +32,32 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  move second child to first child (temp 4-component vector of float)
-0:1    'AmbientColor' (temp 4-component vector of float)
-0:?     Constant:
-0:?       1.000000
-0:?       0.500000
-0:?       0.000000
-0:?       1.000000
-0:12  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
+0:1  Sequence
+0:1    move second child to first child (temp 4-component vector of float)
+0:1      'AmbientColor' (global 4-component vector of float)
+0:?       Constant:
+0:?         1.000000
+0:?         0.500000
+0:?         0.000000
+0:?         1.000000
+0:12  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
 0:9    Function Parameters: 
 0:9      'input' (in 4-component vector of float)
 0:?     Sequence
 0:10      Branch: Return with expression
 0:10        component-wise multiply (temp 4-component vector of float)
 0:10          'input' (in 4-component vector of float)
-0:10          'AmbientColor' (temp 4-component vector of float)
+0:10          'AmbientColor' (global 4-component vector of float)
 0:?   Linker Objects
-0:?     'AmbientColor' (temp 4-component vector of float)
-0:?     'ff1' (temp bool Face)
-0:?     'ff2' (temp 4-component vector of float)
-0:?     'ff3' (temp 4-component vector of float)
-0:?     'ff4' (temp 4-component vector of float FragCoord)
+0:?     'AmbientColor' (global 4-component vector of float)
+0:?     'ff1' (global bool Face)
+0:?     'ff2' (global 4-component vector of float)
+0:?     'ff3' (global 4-component vector of float)
+0:?     'ff4' (global 4-component vector of float FragCoord)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 25
+// Id's are bound by 30
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -67,33 +69,39 @@ gl_FragCoord origin is upper left
                               Name 11  "ShaderFunction(vf4;"
                               Name 10  "input"
                               Name 14  "AmbientColor"
-                              Name 21  "ff1"
-                              Name 22  "ff2"
-                              Name 23  "ff3"
-                              Name 24  "ff4"
-                              Decorate 21(ff1) BuiltIn FrontFacing
-                              Decorate 24(ff4) BuiltIn FragCoord
+                              Name 26  "ff1"
+                              Name 27  "ff2"
+                              Name 28  "ff3"
+                              Name 29  "ff4"
+                              Decorate 26(ff1) BuiltIn FrontFacing
+                              Decorate 29(ff4) BuiltIn FragCoord
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypePointer Function 7(fvec4)
                9:             TypeFunction 7(fvec4) 8(ptr)
-              19:             TypeBool
-              20:             TypePointer Function 19(bool)
+              13:             TypePointer Private 7(fvec4)
+14(AmbientColor):     13(ptr) Variable Private
+              15:    6(float) Constant 1065353216
+              16:    6(float) Constant 1056964608
+              17:    6(float) Constant 0
+              18:    7(fvec4) ConstantComposite 15 16 17 15
+              24:             TypeBool
+              25:             TypePointer Private 24(bool)
+         26(ff1):     25(ptr) Variable Private
+         27(ff2):     13(ptr) Variable Private
+         28(ff3):     13(ptr) Variable Private
+         29(ff4):     13(ptr) Variable Private
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+                              Store 14(AmbientColor) 18
                               FunctionEnd
 11(ShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
               12:             Label
-14(AmbientColor):      8(ptr) Variable Function
-         21(ff1):     20(ptr) Variable Function
-         22(ff2):      8(ptr) Variable Function
-         23(ff3):      8(ptr) Variable Function
-         24(ff4):      8(ptr) Variable Function
-              13:    7(fvec4) Load 10(input)
-              15:    7(fvec4) Load 14(AmbientColor)
-              16:    7(fvec4) FMul 13 15
-                              ReturnValue 16
+              19:    7(fvec4) Load 10(input)
+              20:    7(fvec4) Load 14(AmbientColor)
+              21:    7(fvec4) FMul 19 20
+                              ReturnValue 21
                               FunctionEnd
index 8e2b792..9764e26 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.forLoop.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:9  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:14  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -52,6 +52,61 @@ gl_FragCoord origin is upper left
 0:7            'input' (in 4-component vector of float)
 0:7            Constant:
 0:7              2.000000
+0:?       Sequence
+0:8        Loop with condition tested first
+0:8          No loop condition
+0:8          Loop Body
+0:8          Test condition and select (temp void)
+0:8            Condition
+0:8            Compare Greater Than (temp bool)
+0:8              direct index (temp float)
+0:8                'input' (in 4-component vector of float)
+0:8                Constant:
+0:8                  0 (const int)
+0:8              Constant:
+0:8                2.000000
+0:8            true case
+0:8            Branch: Break
+0:?       Sequence
+0:9        Loop with condition tested first
+0:9          No loop condition
+0:9          Loop Body
+0:9          Test condition and select (temp void)
+0:9            Condition
+0:9            Compare Greater Than (temp bool)
+0:9              direct index (temp float)
+0:9                'input' (in 4-component vector of float)
+0:9                Constant:
+0:9                  0 (const int)
+0:9              Constant:
+0:9                2.000000
+0:9            true case
+0:9            Branch: Continue
+0:11      Sequence
+0:11        move second child to first child (temp int)
+0:11          'ii' (temp int)
+0:11          Constant:
+0:11            -1 (const int)
+0:11        Loop with condition tested first
+0:11          Loop Condition
+0:11          Compare Less Than (temp bool)
+0:11            'ii' (temp int)
+0:11            Constant:
+0:11              3 (const int)
+0:11          Loop Body
+0:11          Test condition and select (temp void)
+0:11            Condition
+0:11            Compare Equal (temp bool)
+0:11              'ii' (temp int)
+0:11              Constant:
+0:11                2 (const int)
+0:11            true case
+0:11            Branch: Continue
+0:11          Loop Terminal Expression
+0:11          Pre-Increment (temp int)
+0:11            'ii' (temp int)
+0:12      Pre-Decrement (temp float)
+0:12        'ii' (temp float)
 0:?   Linker Objects
 
 
@@ -61,7 +116,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:9  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:14  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -111,11 +166,66 @@ gl_FragCoord origin is upper left
 0:7            'input' (in 4-component vector of float)
 0:7            Constant:
 0:7              2.000000
+0:?       Sequence
+0:8        Loop with condition tested first
+0:8          No loop condition
+0:8          Loop Body
+0:8          Test condition and select (temp void)
+0:8            Condition
+0:8            Compare Greater Than (temp bool)
+0:8              direct index (temp float)
+0:8                'input' (in 4-component vector of float)
+0:8                Constant:
+0:8                  0 (const int)
+0:8              Constant:
+0:8                2.000000
+0:8            true case
+0:8            Branch: Break
+0:?       Sequence
+0:9        Loop with condition tested first
+0:9          No loop condition
+0:9          Loop Body
+0:9          Test condition and select (temp void)
+0:9            Condition
+0:9            Compare Greater Than (temp bool)
+0:9              direct index (temp float)
+0:9                'input' (in 4-component vector of float)
+0:9                Constant:
+0:9                  0 (const int)
+0:9              Constant:
+0:9                2.000000
+0:9            true case
+0:9            Branch: Continue
+0:11      Sequence
+0:11        move second child to first child (temp int)
+0:11          'ii' (temp int)
+0:11          Constant:
+0:11            -1 (const int)
+0:11        Loop with condition tested first
+0:11          Loop Condition
+0:11          Compare Less Than (temp bool)
+0:11            'ii' (temp int)
+0:11            Constant:
+0:11              3 (const int)
+0:11          Loop Body
+0:11          Test condition and select (temp void)
+0:11            Condition
+0:11            Compare Equal (temp bool)
+0:11              'ii' (temp int)
+0:11              Constant:
+0:11                2 (const int)
+0:11            true case
+0:11            Branch: Continue
+0:11          Loop Terminal Expression
+0:11          Pre-Increment (temp int)
+0:11            'ii' (temp int)
+0:12      Pre-Decrement (temp float)
+0:12        'ii' (temp float)
 0:?   Linker Objects
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 64
+// Id's are bound by 112
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -125,6 +235,8 @@ gl_FragCoord origin is upper left
                               Source HLSL 450
                               Name 4  "PixelShaderFunction"
                               Name 13  "input"
+                              Name 89  "ii"
+                              Name 109  "ii"
                2:             TypeVoid
                3:             TypeFunction 2
               10:             TypeFloat 32
@@ -135,8 +247,20 @@ gl_FragCoord origin is upper left
               29:             TypeBool
               30:             TypeVector 29(bool) 4
               60:   10(float) Constant 1073741824
+              68:             TypeInt 32 0
+              69:     68(int) Constant 0
+              70:             TypePointer Input 10(float)
+              87:             TypeInt 32 1
+              88:             TypePointer Function 87(int)
+              90:     87(int) Constant 4294967295
+              97:     87(int) Constant 3
+             100:     87(int) Constant 2
+             106:     87(int) Constant 1
+             108:             TypePointer Function 10(float)
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+          89(ii):     88(ptr) Variable Function
+         109(ii):    108(ptr) Variable Function
                               Branch 6
                6:             Label
                               LoopMerge 8 9 None
@@ -216,5 +340,66 @@ gl_FragCoord origin is upper left
                                 Store 13(input) 63
                                 Branch 48
               50:             Label
+                              Branch 64
+              64:             Label
+                              LoopMerge 66 67 None
+                              Branch 65
+              65:             Label
+              71:     70(ptr) AccessChain 13(input) 69
+              72:   10(float) Load 71
+              73:    29(bool) FOrdGreaterThan 72 60
+                              SelectionMerge 75 None
+                              BranchConditional 73 74 75
+              74:               Label
+                                Branch 66
+              75:             Label
+                              Branch 67
+              67:             Label
+                              Branch 64
+              66:             Label
+                              Branch 77
+              77:             Label
+                              LoopMerge 79 80 None
+                              Branch 78
+              78:             Label
+              81:     70(ptr) AccessChain 13(input) 69
+              82:   10(float) Load 81
+              83:    29(bool) FOrdGreaterThan 82 60
+                              SelectionMerge 85 None
+                              BranchConditional 83 84 85
+              84:               Label
+                                Branch 80
+              85:             Label
+                              Branch 80
+              80:             Label
+                              Branch 77
+              79:             Label
+                              Store 89(ii) 90
+                              Branch 91
+              91:             Label
+                              LoopMerge 93 94 None
+                              Branch 95
+              95:             Label
+              96:     87(int) Load 89(ii)
+              98:    29(bool) SLessThan 96 97
+                              BranchConditional 98 92 93
+              92:               Label
+              99:     87(int)   Load 89(ii)
+             101:    29(bool)   IEqual 99 100
+                                SelectionMerge 103 None
+                                BranchConditional 101 102 103
+             102:                 Label
+                                  Branch 94
+             103:               Label
+                                Branch 94
+              94:               Label
+             105:     87(int)   Load 89(ii)
+             107:     87(int)   IAdd 105 106
+                                Store 89(ii) 107
+                                Branch 91
+              93:             Label
+             110:   10(float) Load 109(ii)
+             111:   10(float) FSub 110 15
+                              Store 109(ii) 111
                               Return
                               FunctionEnd
index a5a6a67..4554ec6 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.if.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:29  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:34  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -61,6 +61,19 @@ gl_FragCoord origin is upper left
 0:26          Branch: Return with expression
 0:26            Negate value (temp 4-component vector of float)
 0:26              'input' (in 4-component vector of float)
+0:30      Test condition and select (temp void)
+0:30        Condition
+0:30        move second child to first child (temp float)
+0:30          'ii' (temp float)
+0:30          direct index (temp float)
+0:30            'input' (in 4-component vector of float)
+0:30            Constant:
+0:30              2 (const int)
+0:30        true case
+0:31        Pre-Increment (temp float)
+0:31          'ii' (temp float)
+0:32      Pre-Increment (temp int)
+0:32        'ii' (temp int)
 0:?   Linker Objects
 
 
@@ -70,7 +83,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:29  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:34  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -129,11 +142,24 @@ gl_FragCoord origin is upper left
 0:26          Branch: Return with expression
 0:26            Negate value (temp 4-component vector of float)
 0:26              'input' (in 4-component vector of float)
+0:30      Test condition and select (temp void)
+0:30        Condition
+0:30        move second child to first child (temp float)
+0:30          'ii' (temp float)
+0:30          direct index (temp float)
+0:30            'input' (in 4-component vector of float)
+0:30            Constant:
+0:30              2 (const int)
+0:30        true case
+0:31        Pre-Increment (temp float)
+0:31          'ii' (temp float)
+0:32      Pre-Increment (temp int)
+0:32        'ii' (temp int)
 0:?   Linker Objects
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 64
+// Id's are bound by 82
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -143,6 +169,8 @@ gl_FragCoord origin is upper left
                               Source HLSL 450
                               Name 4  "PixelShaderFunction"
                               Name 9  "input"
+                              Name 65  "ii"
+                              Name 78  "ii"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -151,8 +179,18 @@ gl_FragCoord origin is upper left
         9(input):      8(ptr) Variable Input
               12:             TypeBool
               13:             TypeVector 12(bool) 4
+              64:             TypePointer Function 6(float)
+              66:             TypeInt 32 0
+              67:     66(int) Constant 2
+              68:             TypePointer Input 6(float)
+              74:    6(float) Constant 1065353216
+              76:             TypeInt 32 1
+              77:             TypePointer Function 76(int)
+              80:     76(int) Constant 1
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+          65(ii):     64(ptr) Variable Function
+          78(ii):     77(ptr) Variable Function
               10:    7(fvec4) Load 9(input)
               11:    7(fvec4) Load 9(input)
               14:   13(bvec4) FOrdEqual 10 11
@@ -219,5 +257,19 @@ gl_FragCoord origin is upper left
               62:    7(fvec4)   FNegate 61
                                 ReturnValue 62
               57:             Label
+              69:     68(ptr) AccessChain 9(input) 67
+              70:    6(float) Load 69
+                              Store 65(ii) 70
+                              SelectionMerge 72 None
+                              BranchConditional 70 71 72
+              71:               Label
+              73:    6(float)   Load 65(ii)
+              75:    6(float)   FAdd 73 74
+                                Store 65(ii) 75
+                                Branch 72
+              72:             Label
+              79:     76(int) Load 78(ii)
+              81:     76(int) IAdd 79 80
+                              Store 78(ii) 81
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
new file mode 100755 (executable)
index 0000000..1a4c802
--- /dev/null
@@ -0,0 +1,369 @@
+hlsl.init.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:1  Sequence
+0:1    move second child to first child (temp 4-component vector of float)
+0:1      'a1' (global 4-component vector of float)
+0:?       Constant:
+0:?         1.000000
+0:?         0.500000
+0:?         0.000000
+0:?         1.000000
+0:1    move second child to first child (temp 4-component vector of float)
+0:1      'b1' (global 4-component vector of float)
+0:?       Constant:
+0:?         2.000000
+0:?         2.500000
+0:?         2.100000
+0:?         2.200000
+0:2  Sequence
+0:2    move second child to first child (temp 4-component vector of float)
+0:2      'a1i' (global 4-component vector of float)
+0:2      Constant:
+0:2        1.000000
+0:2        0.500000
+0:2        0.000000
+0:2        1.000000
+0:2    move second child to first child (temp 4-component vector of float)
+0:2      'b1i' (global 4-component vector of float)
+0:2      Constant:
+0:2        2.000000
+0:2        2.500000
+0:2        2.100000
+0:2        2.200000
+0:3  Sequence
+0:3    move second child to first child (temp float)
+0:3      'a2' (global float)
+0:3      Constant:
+0:3        0.200000
+0:4  Sequence
+0:4    move second child to first child (temp float)
+0:4      'b3' (global float)
+0:4      Constant:
+0:4        0.300000
+0:5  Sequence
+0:5    move second child to first child (temp float)
+0:5      'b4' (global float)
+0:5      Constant:
+0:5        0.400000
+0:6  Sequence
+0:6    move second child to first child (temp float)
+0:6      'a5' (global float)
+0:6      Constant:
+0:6        0.500000
+0:6    move second child to first child (temp float)
+0:6      'c5' (global float)
+0:6      Constant:
+0:6        1.500000
+0:25  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
+0:9    Function Parameters: 
+0:9      'input' (in 4-component vector of float)
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of float)
+0:10          'a2' (temp 4-component vector of float)
+0:?           Constant:
+0:?             0.200000
+0:?             0.300000
+0:?             0.400000
+0:?             0.500000
+0:20      Sequence
+0:20        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20          's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20          Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20            Constant:
+0:20              9 (const int)
+0:20            'a5' (global float)
+0:20            Construct structure (temp structure{temp float f, temp int i})
+0:20              Comma (temp float)
+0:20                'a3' (global float)
+0:20                'a4' (global float)
+0:20              Constant:
+0:20                12 (const int)
+0:20        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20          's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:?           Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20            Constant:
+0:20              9 (const int)
+0:20            'a5' (global float)
+0:?             Construct structure (temp structure{temp float f, temp int i})
+0:20              Comma (temp float)
+0:20                'a3' (global float)
+0:20                'a4' (global float)
+0:20              Constant:
+0:20                12 (const int)
+0:21      Sequence
+0:21        move second child to first child (temp float)
+0:21          'a8' (temp float)
+0:21          Comma (temp float)
+0:21            'a2' (temp 4-component vector of float)
+0:21            'b2' (global float)
+0:21        move second child to first child (temp float)
+0:21          'a9' (temp float)
+0:21          'a5' (global float)
+0:23      Branch: Return with expression
+0:23        component-wise multiply (temp 4-component vector of float)
+0:23          'input' (in 4-component vector of float)
+0:23          'a1' (global 4-component vector of float)
+0:?   Linker Objects
+0:?     'a1' (global 4-component vector of float)
+0:?     'b1' (global 4-component vector of float)
+0:?     'a1i' (global 4-component vector of float)
+0:?     'b1i' (global 4-component vector of float)
+0:?     'a2' (global float)
+0:?     'b2' (global float)
+0:?     'a3' (global float)
+0:?     'b3' (global float)
+0:?     'a4' (global float)
+0:?     'b4' (global float)
+0:?     'c4' (global float)
+0:?     'a5' (global float)
+0:?     'b5' (global float)
+0:?     'c5' (global float)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:1  Sequence
+0:1    move second child to first child (temp 4-component vector of float)
+0:1      'a1' (global 4-component vector of float)
+0:?       Constant:
+0:?         1.000000
+0:?         0.500000
+0:?         0.000000
+0:?         1.000000
+0:1    move second child to first child (temp 4-component vector of float)
+0:1      'b1' (global 4-component vector of float)
+0:?       Constant:
+0:?         2.000000
+0:?         2.500000
+0:?         2.100000
+0:?         2.200000
+0:2  Sequence
+0:2    move second child to first child (temp 4-component vector of float)
+0:2      'a1i' (global 4-component vector of float)
+0:2      Constant:
+0:2        1.000000
+0:2        0.500000
+0:2        0.000000
+0:2        1.000000
+0:2    move second child to first child (temp 4-component vector of float)
+0:2      'b1i' (global 4-component vector of float)
+0:2      Constant:
+0:2        2.000000
+0:2        2.500000
+0:2        2.100000
+0:2        2.200000
+0:3  Sequence
+0:3    move second child to first child (temp float)
+0:3      'a2' (global float)
+0:3      Constant:
+0:3        0.200000
+0:4  Sequence
+0:4    move second child to first child (temp float)
+0:4      'b3' (global float)
+0:4      Constant:
+0:4        0.300000
+0:5  Sequence
+0:5    move second child to first child (temp float)
+0:5      'b4' (global float)
+0:5      Constant:
+0:5        0.400000
+0:6  Sequence
+0:6    move second child to first child (temp float)
+0:6      'a5' (global float)
+0:6      Constant:
+0:6        0.500000
+0:6    move second child to first child (temp float)
+0:6      'c5' (global float)
+0:6      Constant:
+0:6        1.500000
+0:25  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
+0:9    Function Parameters: 
+0:9      'input' (in 4-component vector of float)
+0:?     Sequence
+0:10      Sequence
+0:10        move second child to first child (temp 4-component vector of float)
+0:10          'a2' (temp 4-component vector of float)
+0:?           Constant:
+0:?             0.200000
+0:?             0.300000
+0:?             0.400000
+0:?             0.500000
+0:20      Sequence
+0:20        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20          's2i' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20          Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20            Constant:
+0:20              9 (const int)
+0:20            'a5' (global float)
+0:20            Construct structure (temp structure{temp float f, temp int i})
+0:20              Comma (temp float)
+0:20                'a3' (global float)
+0:20                'a4' (global float)
+0:20              Constant:
+0:20                12 (const int)
+0:20        move second child to first child (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20          's2' (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:?           Construct structure (temp structure{temp int j, temp float g, temp structure{temp float f, temp int i} s1})
+0:20            Constant:
+0:20              9 (const int)
+0:20            'a5' (global float)
+0:?             Construct structure (temp structure{temp float f, temp int i})
+0:20              Comma (temp float)
+0:20                'a3' (global float)
+0:20                'a4' (global float)
+0:20              Constant:
+0:20                12 (const int)
+0:21      Sequence
+0:21        move second child to first child (temp float)
+0:21          'a8' (temp float)
+0:21          Comma (temp float)
+0:21            'a2' (temp 4-component vector of float)
+0:21            'b2' (global float)
+0:21        move second child to first child (temp float)
+0:21          'a9' (temp float)
+0:21          'a5' (global float)
+0:23      Branch: Return with expression
+0:23        component-wise multiply (temp 4-component vector of float)
+0:23          'input' (in 4-component vector of float)
+0:23          'a1' (global 4-component vector of float)
+0:?   Linker Objects
+0:?     'a1' (global 4-component vector of float)
+0:?     'b1' (global 4-component vector of float)
+0:?     'a1i' (global 4-component vector of float)
+0:?     'b1i' (global 4-component vector of float)
+0:?     'a2' (global float)
+0:?     'b2' (global float)
+0:?     'a3' (global float)
+0:?     'b3' (global float)
+0:?     'a4' (global float)
+0:?     'b4' (global float)
+0:?     'c4' (global float)
+0:?     'a5' (global float)
+0:?     'b5' (global float)
+0:?     'c5' (global float)
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 67
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "ShaderFunction" 60
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "ShaderFunction"
+                              Name 9  "a1"
+                              Name 14  "b1"
+                              Name 20  "a1i"
+                              Name 21  "b1i"
+                              Name 23  "a2"
+                              Name 25  "b3"
+                              Name 27  "b4"
+                              Name 29  "a5"
+                              Name 30  "c5"
+                              Name 33  "a2"
+                              Name 36  "S1"
+                              MemberName 36(S1) 0  "f"
+                              MemberName 36(S1) 1  "i"
+                              Name 37  "S2"
+                              MemberName 37(S2) 0  "j"
+                              MemberName 37(S2) 1  "g"
+                              MemberName 37(S2) 2  "s1"
+                              Name 39  "s2i"
+                              Name 42  "a3"
+                              Name 43  "a4"
+                              Name 48  "s2"
+                              Name 54  "a8"
+                              Name 55  "b2"
+                              Name 57  "a9"
+                              Name 60  "input"
+                              Name 65  "c4"
+                              Name 66  "b5"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Private 7(fvec4)
+           9(a1):      8(ptr) Variable Private
+              10:    6(float) Constant 1065353216
+              11:    6(float) Constant 1056964608
+              12:    6(float) Constant 0
+              13:    7(fvec4) ConstantComposite 10 11 12 10
+          14(b1):      8(ptr) Variable Private
+              15:    6(float) Constant 1073741824
+              16:    6(float) Constant 1075838976
+              17:    6(float) Constant 1074161254
+              18:    6(float) Constant 1074580685
+              19:    7(fvec4) ConstantComposite 15 16 17 18
+         20(a1i):      8(ptr) Variable Private
+         21(b1i):      8(ptr) Variable Private
+              22:             TypePointer Private 6(float)
+          23(a2):     22(ptr) Variable Private
+              24:    6(float) Constant 1045220557
+          25(b3):     22(ptr) Variable Private
+              26:    6(float) Constant 1050253722
+          27(b4):     22(ptr) Variable Private
+              28:    6(float) Constant 1053609165
+          29(a5):     22(ptr) Variable Private
+          30(c5):     22(ptr) Variable Private
+              31:    6(float) Constant 1069547520
+              32:             TypePointer Function 7(fvec4)
+              34:    7(fvec4) ConstantComposite 24 26 28 11
+              35:             TypeInt 32 1
+          36(S1):             TypeStruct 6(float) 35(int)
+          37(S2):             TypeStruct 35(int) 6(float) 36(S1)
+              38:             TypePointer Function 37(S2)
+              40:     35(int) Constant 9
+          42(a3):     22(ptr) Variable Private
+          43(a4):     22(ptr) Variable Private
+              45:     35(int) Constant 12
+              53:             TypePointer Function 6(float)
+          55(b2):     22(ptr) Variable Private
+              59:             TypePointer Input 7(fvec4)
+       60(input):     59(ptr) Variable Input
+          65(c4):     22(ptr) Variable Private
+          66(b5):     22(ptr) Variable Private
+4(ShaderFunction):           2 Function None 3
+               5:             Label
+          33(a2):     32(ptr) Variable Function
+         39(s2i):     38(ptr) Variable Function
+          48(s2):     38(ptr) Variable Function
+          54(a8):     53(ptr) Variable Function
+          57(a9):     53(ptr) Variable Function
+                              Store 9(a1) 13
+                              Store 14(b1) 19
+                              Store 20(a1i) 13
+                              Store 21(b1i) 19
+                              Store 23(a2) 24
+                              Store 25(b3) 26
+                              Store 27(b4) 28
+                              Store 29(a5) 11
+                              Store 30(c5) 31
+                              Store 33(a2) 34
+              41:    6(float) Load 29(a5)
+              44:    6(float) Load 43(a4)
+              46:      36(S1) CompositeConstruct 44 45
+              47:      37(S2) CompositeConstruct 40 41 46
+                              Store 39(s2i) 47
+              49:    6(float) Load 29(a5)
+              50:    6(float) Load 43(a4)
+              51:      36(S1) CompositeConstruct 50 45
+              52:      37(S2) CompositeConstruct 40 49 51
+                              Store 48(s2) 52
+              56:    6(float) Load 55(b2)
+                              Store 54(a8) 56
+              58:    6(float) Load 29(a5)
+                              Store 57(a9) 58
+              61:    7(fvec4) Load 60(input)
+              62:    7(fvec4) Load 9(a1)
+              63:    7(fvec4) FMul 61 62
+                              ReturnValue 63
+                              FunctionEnd
index ba8a04b..c400fea 100644 (file)
@@ -2,7 +2,7 @@ hlsl.intrinsics.barriers.comp
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:14  Function Definition: ComputeShaderFunction( (temp float)
+0:14  Function Definition: ComputeShaderFunction( (global float)
 0:3    Function Parameters: 
 0:?     Sequence
 0:4      MemoryBarrier (global void)
@@ -23,7 +23,7 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:14  Function Definition: ComputeShaderFunction( (temp float)
+0:14  Function Definition: ComputeShaderFunction( (global float)
 0:3    Function Parameters: 
 0:?     Sequence
 0:4      MemoryBarrier (global void)
index d6012df..4c7eabb 100644 (file)
@@ -2,7 +2,7 @@ hlsl.intrinsics.comp
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:44  Function Definition: ComputeShaderFunction(f1;f1;f1;u1;u1; (temp float)
+0:44  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; (global float)
 0:17    Function Parameters: 
 0:17      'inF0' (in float)
 0:17      'inF1' (in float)
@@ -13,68 +13,68 @@ local_size = (1, 1, 1)
 0:21      all (global bool)
 0:21        'inF0' (in float)
 0:24      AtomicAdd (global void)
-0:24        'gs_ua' (temp uint)
-0:24        'gs_ub' (temp uint)
+0:24        'gs_ua' (global uint)
+0:24        'gs_ub' (global uint)
 0:25      move second child to first child (temp uint)
 0:25        'out_u1' (temp uint)
 0:25        AtomicAdd (temp uint)
-0:25          'gs_ua' (temp uint)
-0:25          'gs_ub' (temp uint)
+0:25          'gs_ua' (global uint)
+0:25          'gs_ub' (global uint)
 0:26      AtomicAnd (global void)
-0:26        'gs_ua' (temp uint)
-0:26        'gs_ub' (temp uint)
+0:26        'gs_ua' (global uint)
+0:26        'gs_ub' (global uint)
 0:27      move second child to first child (temp uint)
 0:27        'out_u1' (temp uint)
 0:27        AtomicAnd (temp uint)
-0:27          'gs_ua' (temp uint)
-0:27          'gs_ub' (temp uint)
+0:27          'gs_ua' (global uint)
+0:27          'gs_ub' (global uint)
 0:28      move second child to first child (temp uint)
 0:28        'out_u1' (temp uint)
 0:28        AtomicCompSwap (temp uint)
-0:28          'gs_ua' (temp uint)
-0:28          'gs_ub' (temp uint)
-0:28          'gs_uc' (temp uint)
+0:28          'gs_ua' (global uint)
+0:28          'gs_ub' (global uint)
+0:28          'gs_uc' (global uint)
 0:29      move second child to first child (temp uint)
 0:29        'out_u1' (temp uint)
 0:29        AtomicExchange (temp uint)
-0:29          'gs_ua' (temp uint)
-0:29          'gs_ub' (temp uint)
+0:29          'gs_ua' (global uint)
+0:29          'gs_ub' (global uint)
 0:30      AtomicMax (global void)
-0:30        'gs_ua' (temp uint)
-0:30        'gs_ub' (temp uint)
+0:30        'gs_ua' (global uint)
+0:30        'gs_ub' (global uint)
 0:31      move second child to first child (temp uint)
 0:31        'out_u1' (temp uint)
 0:31        AtomicMax (temp uint)
-0:31          'gs_ua' (temp uint)
-0:31          'gs_ub' (temp uint)
+0:31          'gs_ua' (global uint)
+0:31          'gs_ub' (global uint)
 0:32      AtomicMin (global void)
-0:32        'gs_ua' (temp uint)
-0:32        'gs_ub' (temp uint)
+0:32        'gs_ua' (global uint)
+0:32        'gs_ub' (global uint)
 0:33      move second child to first child (temp uint)
 0:33        'out_u1' (temp uint)
 0:33        AtomicMin (temp uint)
-0:33          'gs_ua' (temp uint)
-0:33          'gs_ub' (temp uint)
+0:33          'gs_ua' (global uint)
+0:33          'gs_ub' (global uint)
 0:34      AtomicOr (global void)
-0:34        'gs_ua' (temp uint)
-0:34        'gs_ub' (temp uint)
+0:34        'gs_ua' (global uint)
+0:34        'gs_ub' (global uint)
 0:35      move second child to first child (temp uint)
 0:35        'out_u1' (temp uint)
 0:35        AtomicOr (temp uint)
-0:35          'gs_ua' (temp uint)
-0:35          'gs_ub' (temp uint)
+0:35          'gs_ua' (global uint)
+0:35          'gs_ub' (global uint)
 0:36      AtomicXor (global void)
-0:36        'gs_ua' (temp uint)
-0:36        'gs_ub' (temp uint)
+0:36        'gs_ua' (global uint)
+0:36        'gs_ub' (global uint)
 0:37      move second child to first child (temp uint)
 0:37        'out_u1' (temp uint)
 0:37        AtomicXor (temp uint)
-0:37          'gs_ua' (temp uint)
-0:37          'gs_ub' (temp uint)
+0:37          'gs_ua' (global uint)
+0:37          'gs_ub' (global uint)
 0:41      Branch: Return with expression
 0:41        Constant:
 0:41          0.000000
-0:50  Function Definition: ComputeShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float)
+0:50  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
 0:45    Function Parameters: 
 0:45      'inF0' (in 1-component vector of float)
 0:45      'inF1' (in 1-component vector of float)
@@ -83,7 +83,7 @@ local_size = (1, 1, 1)
 0:47      Branch: Return with expression
 0:47        Constant:
 0:47          0.000000
-0:77  Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
+0:77  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
 0:51    Function Parameters: 
 0:51      'inF0' (in 2-component vector of float)
 0:51      'inF1' (in 2-component vector of float)
@@ -94,69 +94,69 @@ local_size = (1, 1, 1)
 0:55      all (global bool)
 0:55        'inF0' (in 2-component vector of float)
 0:58      AtomicAdd (global void)
-0:58        'gs_ua2' (temp 2-component vector of uint)
-0:58        'gs_ub2' (temp 2-component vector of uint)
+0:58        'gs_ua2' (global 2-component vector of uint)
+0:58        'gs_ub2' (global 2-component vector of uint)
 0:59      move second child to first child (temp 2-component vector of uint)
 0:59        'out_u2' (temp 2-component vector of uint)
 0:59        AtomicAdd (temp 2-component vector of uint)
-0:59          'gs_ua2' (temp 2-component vector of uint)
-0:59          'gs_ub2' (temp 2-component vector of uint)
+0:59          'gs_ua2' (global 2-component vector of uint)
+0:59          'gs_ub2' (global 2-component vector of uint)
 0:60      AtomicAnd (global void)
-0:60        'gs_ua2' (temp 2-component vector of uint)
-0:60        'gs_ub2' (temp 2-component vector of uint)
+0:60        'gs_ua2' (global 2-component vector of uint)
+0:60        'gs_ub2' (global 2-component vector of uint)
 0:61      move second child to first child (temp 2-component vector of uint)
 0:61        'out_u2' (temp 2-component vector of uint)
 0:61        AtomicAnd (temp 2-component vector of uint)
-0:61          'gs_ua2' (temp 2-component vector of uint)
-0:61          'gs_ub2' (temp 2-component vector of uint)
+0:61          'gs_ua2' (global 2-component vector of uint)
+0:61          'gs_ub2' (global 2-component vector of uint)
 0:62      move second child to first child (temp 2-component vector of uint)
 0:62        'out_u2' (temp 2-component vector of uint)
 0:62        AtomicCompSwap (temp 2-component vector of uint)
-0:62          'gs_ua2' (temp 2-component vector of uint)
-0:62          'gs_ub2' (temp 2-component vector of uint)
-0:62          'gs_uc2' (temp 2-component vector of uint)
+0:62          'gs_ua2' (global 2-component vector of uint)
+0:62          'gs_ub2' (global 2-component vector of uint)
+0:62          'gs_uc2' (global 2-component vector of uint)
 0:63      move second child to first child (temp 2-component vector of uint)
 0:63        'out_u2' (temp 2-component vector of uint)
 0:63        AtomicExchange (temp 2-component vector of uint)
-0:63          'gs_ua2' (temp 2-component vector of uint)
-0:63          'gs_ub2' (temp 2-component vector of uint)
+0:63          'gs_ua2' (global 2-component vector of uint)
+0:63          'gs_ub2' (global 2-component vector of uint)
 0:64      AtomicMax (global void)
-0:64        'gs_ua2' (temp 2-component vector of uint)
-0:64        'gs_ub2' (temp 2-component vector of uint)
+0:64        'gs_ua2' (global 2-component vector of uint)
+0:64        'gs_ub2' (global 2-component vector of uint)
 0:65      move second child to first child (temp 2-component vector of uint)
 0:65        'out_u2' (temp 2-component vector of uint)
 0:65        AtomicMax (temp 2-component vector of uint)
-0:65          'gs_ua2' (temp 2-component vector of uint)
-0:65          'gs_ub2' (temp 2-component vector of uint)
+0:65          'gs_ua2' (global 2-component vector of uint)
+0:65          'gs_ub2' (global 2-component vector of uint)
 0:66      AtomicMin (global void)
-0:66        'gs_ua2' (temp 2-component vector of uint)
-0:66        'gs_ub2' (temp 2-component vector of uint)
+0:66        'gs_ua2' (global 2-component vector of uint)
+0:66        'gs_ub2' (global 2-component vector of uint)
 0:67      move second child to first child (temp 2-component vector of uint)
 0:67        'out_u2' (temp 2-component vector of uint)
 0:67        AtomicMin (temp 2-component vector of uint)
-0:67          'gs_ua2' (temp 2-component vector of uint)
-0:67          'gs_ub2' (temp 2-component vector of uint)
+0:67          'gs_ua2' (global 2-component vector of uint)
+0:67          'gs_ub2' (global 2-component vector of uint)
 0:68      AtomicOr (global void)
-0:68        'gs_ua2' (temp 2-component vector of uint)
-0:68        'gs_ub2' (temp 2-component vector of uint)
+0:68        'gs_ua2' (global 2-component vector of uint)
+0:68        'gs_ub2' (global 2-component vector of uint)
 0:69      move second child to first child (temp 2-component vector of uint)
 0:69        'out_u2' (temp 2-component vector of uint)
 0:69        AtomicOr (temp 2-component vector of uint)
-0:69          'gs_ua2' (temp 2-component vector of uint)
-0:69          'gs_ub2' (temp 2-component vector of uint)
+0:69          'gs_ua2' (global 2-component vector of uint)
+0:69          'gs_ub2' (global 2-component vector of uint)
 0:70      AtomicXor (global void)
-0:70        'gs_ua2' (temp 2-component vector of uint)
-0:70        'gs_ub2' (temp 2-component vector of uint)
+0:70        'gs_ua2' (global 2-component vector of uint)
+0:70        'gs_ub2' (global 2-component vector of uint)
 0:71      move second child to first child (temp 2-component vector of uint)
 0:71        'out_u2' (temp 2-component vector of uint)
 0:71        AtomicXor (temp 2-component vector of uint)
-0:71          'gs_ua2' (temp 2-component vector of uint)
-0:71          'gs_ub2' (temp 2-component vector of uint)
+0:71          'gs_ua2' (global 2-component vector of uint)
+0:71          'gs_ub2' (global 2-component vector of uint)
 0:74      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:104  Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
+0:104  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
 0:78    Function Parameters: 
 0:78      'inF0' (in 3-component vector of float)
 0:78      'inF1' (in 3-component vector of float)
@@ -167,70 +167,70 @@ local_size = (1, 1, 1)
 0:82      all (global bool)
 0:82        'inF0' (in 3-component vector of float)
 0:85      AtomicAdd (global void)
-0:85        'gs_ua3' (temp 3-component vector of uint)
-0:85        'gs_ub3' (temp 3-component vector of uint)
+0:85        'gs_ua3' (global 3-component vector of uint)
+0:85        'gs_ub3' (global 3-component vector of uint)
 0:86      move second child to first child (temp 3-component vector of uint)
 0:86        'out_u3' (temp 3-component vector of uint)
 0:86        AtomicAdd (temp 3-component vector of uint)
-0:86          'gs_ua3' (temp 3-component vector of uint)
-0:86          'gs_ub3' (temp 3-component vector of uint)
+0:86          'gs_ua3' (global 3-component vector of uint)
+0:86          'gs_ub3' (global 3-component vector of uint)
 0:87      AtomicAnd (global void)
-0:87        'gs_ua3' (temp 3-component vector of uint)
-0:87        'gs_ub3' (temp 3-component vector of uint)
+0:87        'gs_ua3' (global 3-component vector of uint)
+0:87        'gs_ub3' (global 3-component vector of uint)
 0:88      move second child to first child (temp 3-component vector of uint)
 0:88        'out_u3' (temp 3-component vector of uint)
 0:88        AtomicAnd (temp 3-component vector of uint)
-0:88          'gs_ua3' (temp 3-component vector of uint)
-0:88          'gs_ub3' (temp 3-component vector of uint)
+0:88          'gs_ua3' (global 3-component vector of uint)
+0:88          'gs_ub3' (global 3-component vector of uint)
 0:89      move second child to first child (temp 3-component vector of uint)
 0:89        'out_u3' (temp 3-component vector of uint)
 0:89        AtomicCompSwap (temp 3-component vector of uint)
-0:89          'gs_ua3' (temp 3-component vector of uint)
-0:89          'gs_ub3' (temp 3-component vector of uint)
-0:89          'gs_uc3' (temp 3-component vector of uint)
+0:89          'gs_ua3' (global 3-component vector of uint)
+0:89          'gs_ub3' (global 3-component vector of uint)
+0:89          'gs_uc3' (global 3-component vector of uint)
 0:90      move second child to first child (temp 3-component vector of uint)
 0:90        'out_u3' (temp 3-component vector of uint)
 0:90        AtomicExchange (temp 3-component vector of uint)
-0:90          'gs_ua3' (temp 3-component vector of uint)
-0:90          'gs_ub3' (temp 3-component vector of uint)
+0:90          'gs_ua3' (global 3-component vector of uint)
+0:90          'gs_ub3' (global 3-component vector of uint)
 0:91      AtomicMax (global void)
-0:91        'gs_ua3' (temp 3-component vector of uint)
-0:91        'gs_ub3' (temp 3-component vector of uint)
+0:91        'gs_ua3' (global 3-component vector of uint)
+0:91        'gs_ub3' (global 3-component vector of uint)
 0:92      move second child to first child (temp 3-component vector of uint)
 0:92        'out_u3' (temp 3-component vector of uint)
 0:92        AtomicMax (temp 3-component vector of uint)
-0:92          'gs_ua3' (temp 3-component vector of uint)
-0:92          'gs_ub3' (temp 3-component vector of uint)
+0:92          'gs_ua3' (global 3-component vector of uint)
+0:92          'gs_ub3' (global 3-component vector of uint)
 0:93      AtomicMin (global void)
-0:93        'gs_ua3' (temp 3-component vector of uint)
-0:93        'gs_ub3' (temp 3-component vector of uint)
+0:93        'gs_ua3' (global 3-component vector of uint)
+0:93        'gs_ub3' (global 3-component vector of uint)
 0:94      move second child to first child (temp 3-component vector of uint)
 0:94        'out_u3' (temp 3-component vector of uint)
 0:94        AtomicMin (temp 3-component vector of uint)
-0:94          'gs_ua3' (temp 3-component vector of uint)
-0:94          'gs_ub3' (temp 3-component vector of uint)
+0:94          'gs_ua3' (global 3-component vector of uint)
+0:94          'gs_ub3' (global 3-component vector of uint)
 0:95      AtomicOr (global void)
-0:95        'gs_ua3' (temp 3-component vector of uint)
-0:95        'gs_ub3' (temp 3-component vector of uint)
+0:95        'gs_ua3' (global 3-component vector of uint)
+0:95        'gs_ub3' (global 3-component vector of uint)
 0:96      move second child to first child (temp 3-component vector of uint)
 0:96        'out_u3' (temp 3-component vector of uint)
 0:96        AtomicOr (temp 3-component vector of uint)
-0:96          'gs_ua3' (temp 3-component vector of uint)
-0:96          'gs_ub3' (temp 3-component vector of uint)
+0:96          'gs_ua3' (global 3-component vector of uint)
+0:96          'gs_ub3' (global 3-component vector of uint)
 0:97      AtomicXor (global void)
-0:97        'gs_ua3' (temp 3-component vector of uint)
-0:97        'gs_ub3' (temp 3-component vector of uint)
+0:97        'gs_ua3' (global 3-component vector of uint)
+0:97        'gs_ub3' (global 3-component vector of uint)
 0:98      move second child to first child (temp 3-component vector of uint)
 0:98        'out_u3' (temp 3-component vector of uint)
 0:98        AtomicXor (temp 3-component vector of uint)
-0:98          'gs_ua3' (temp 3-component vector of uint)
-0:98          'gs_ub3' (temp 3-component vector of uint)
+0:98          'gs_ua3' (global 3-component vector of uint)
+0:98          'gs_ub3' (global 3-component vector of uint)
 0:101      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:130  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
+0:130  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
 0:105    Function Parameters: 
 0:105      'inF0' (in 4-component vector of float)
 0:105      'inF1' (in 4-component vector of float)
@@ -241,64 +241,64 @@ local_size = (1, 1, 1)
 0:109      all (global bool)
 0:109        'inF0' (in 4-component vector of float)
 0:112      AtomicAdd (global void)
-0:112        'gs_ua4' (temp 4-component vector of uint)
-0:112        'gs_ub4' (temp 4-component vector of uint)
+0:112        'gs_ua4' (global 4-component vector of uint)
+0:112        'gs_ub4' (global 4-component vector of uint)
 0:113      move second child to first child (temp 4-component vector of uint)
 0:113        'out_u4' (temp 4-component vector of uint)
 0:113        AtomicAdd (temp 4-component vector of uint)
-0:113          'gs_ua4' (temp 4-component vector of uint)
-0:113          'gs_ub4' (temp 4-component vector of uint)
+0:113          'gs_ua4' (global 4-component vector of uint)
+0:113          'gs_ub4' (global 4-component vector of uint)
 0:114      AtomicAnd (global void)
-0:114        'gs_ua4' (temp 4-component vector of uint)
-0:114        'gs_ub4' (temp 4-component vector of uint)
+0:114        'gs_ua4' (global 4-component vector of uint)
+0:114        'gs_ub4' (global 4-component vector of uint)
 0:115      move second child to first child (temp 4-component vector of uint)
 0:115        'out_u4' (temp 4-component vector of uint)
 0:115        AtomicAnd (temp 4-component vector of uint)
-0:115          'gs_ua4' (temp 4-component vector of uint)
-0:115          'gs_ub4' (temp 4-component vector of uint)
+0:115          'gs_ua4' (global 4-component vector of uint)
+0:115          'gs_ub4' (global 4-component vector of uint)
 0:116      move second child to first child (temp 4-component vector of uint)
 0:116        'out_u4' (temp 4-component vector of uint)
 0:116        AtomicCompSwap (temp 4-component vector of uint)
-0:116          'gs_ua4' (temp 4-component vector of uint)
-0:116          'gs_ub4' (temp 4-component vector of uint)
-0:116          'gs_uc4' (temp 4-component vector of uint)
+0:116          'gs_ua4' (global 4-component vector of uint)
+0:116          'gs_ub4' (global 4-component vector of uint)
+0:116          'gs_uc4' (global 4-component vector of uint)
 0:117      move second child to first child (temp 4-component vector of uint)
 0:117        'out_u4' (temp 4-component vector of uint)
 0:117        AtomicExchange (temp 4-component vector of uint)
-0:117          'gs_ua4' (temp 4-component vector of uint)
-0:117          'gs_ub4' (temp 4-component vector of uint)
+0:117          'gs_ua4' (global 4-component vector of uint)
+0:117          'gs_ub4' (global 4-component vector of uint)
 0:118      AtomicMax (global void)
-0:118        'gs_ua4' (temp 4-component vector of uint)
-0:118        'gs_ub4' (temp 4-component vector of uint)
+0:118        'gs_ua4' (global 4-component vector of uint)
+0:118        'gs_ub4' (global 4-component vector of uint)
 0:119      move second child to first child (temp 4-component vector of uint)
 0:119        'out_u4' (temp 4-component vector of uint)
 0:119        AtomicMax (temp 4-component vector of uint)
-0:119          'gs_ua4' (temp 4-component vector of uint)
-0:119          'gs_ub4' (temp 4-component vector of uint)
+0:119          'gs_ua4' (global 4-component vector of uint)
+0:119          'gs_ub4' (global 4-component vector of uint)
 0:120      AtomicMin (global void)
-0:120        'gs_ua4' (temp 4-component vector of uint)
-0:120        'gs_ub4' (temp 4-component vector of uint)
+0:120        'gs_ua4' (global 4-component vector of uint)
+0:120        'gs_ub4' (global 4-component vector of uint)
 0:121      move second child to first child (temp 4-component vector of uint)
 0:121        'out_u4' (temp 4-component vector of uint)
 0:121        AtomicMin (temp 4-component vector of uint)
-0:121          'gs_ua4' (temp 4-component vector of uint)
-0:121          'gs_ub4' (temp 4-component vector of uint)
+0:121          'gs_ua4' (global 4-component vector of uint)
+0:121          'gs_ub4' (global 4-component vector of uint)
 0:122      AtomicOr (global void)
-0:122        'gs_ua4' (temp 4-component vector of uint)
-0:122        'gs_ub4' (temp 4-component vector of uint)
+0:122        'gs_ua4' (global 4-component vector of uint)
+0:122        'gs_ub4' (global 4-component vector of uint)
 0:123      move second child to first child (temp 4-component vector of uint)
 0:123        'out_u4' (temp 4-component vector of uint)
 0:123        AtomicOr (temp 4-component vector of uint)
-0:123          'gs_ua4' (temp 4-component vector of uint)
-0:123          'gs_ub4' (temp 4-component vector of uint)
+0:123          'gs_ua4' (global 4-component vector of uint)
+0:123          'gs_ub4' (global 4-component vector of uint)
 0:124      AtomicXor (global void)
-0:124        'gs_ua4' (temp 4-component vector of uint)
-0:124        'gs_ub4' (temp 4-component vector of uint)
+0:124        'gs_ua4' (global 4-component vector of uint)
+0:124        'gs_ub4' (global 4-component vector of uint)
 0:125      move second child to first child (temp 4-component vector of uint)
 0:125        'out_u4' (temp 4-component vector of uint)
 0:125        AtomicXor (temp 4-component vector of uint)
-0:125          'gs_ua4' (temp 4-component vector of uint)
-0:125          'gs_ub4' (temp 4-component vector of uint)
+0:125          'gs_ua4' (global 4-component vector of uint)
+0:125          'gs_ub4' (global 4-component vector of uint)
 0:128      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
@@ -306,18 +306,18 @@ local_size = (1, 1, 1)
 0:?           3.000000
 0:?           4.000000
 0:?   Linker Objects
-0:?     'gs_ua' (temp uint)
-0:?     'gs_ub' (temp uint)
-0:?     'gs_uc' (temp uint)
-0:?     'gs_ua2' (temp 2-component vector of uint)
-0:?     'gs_ub2' (temp 2-component vector of uint)
-0:?     'gs_uc2' (temp 2-component vector of uint)
-0:?     'gs_ua3' (temp 3-component vector of uint)
-0:?     'gs_ub3' (temp 3-component vector of uint)
-0:?     'gs_uc3' (temp 3-component vector of uint)
-0:?     'gs_ua4' (temp 4-component vector of uint)
-0:?     'gs_ub4' (temp 4-component vector of uint)
-0:?     'gs_uc4' (temp 4-component vector of uint)
+0:?     'gs_ua' (global uint)
+0:?     'gs_ub' (global uint)
+0:?     'gs_uc' (global uint)
+0:?     'gs_ua2' (global 2-component vector of uint)
+0:?     'gs_ub2' (global 2-component vector of uint)
+0:?     'gs_uc2' (global 2-component vector of uint)
+0:?     'gs_ua3' (global 3-component vector of uint)
+0:?     'gs_ub3' (global 3-component vector of uint)
+0:?     'gs_uc3' (global 3-component vector of uint)
+0:?     'gs_ua4' (global 4-component vector of uint)
+0:?     'gs_ub4' (global 4-component vector of uint)
+0:?     'gs_uc4' (global 4-component vector of uint)
 
 
 Linked compute stage:
@@ -326,7 +326,7 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 0:? Sequence
-0:44  Function Definition: ComputeShaderFunction(f1;f1;f1;u1;u1; (temp float)
+0:44  Function Definition: ComputeShaderFunctionS(f1;f1;f1;u1;u1; (global float)
 0:17    Function Parameters: 
 0:17      'inF0' (in float)
 0:17      'inF1' (in float)
@@ -337,68 +337,68 @@ local_size = (1, 1, 1)
 0:21      all (global bool)
 0:21        'inF0' (in float)
 0:24      AtomicAdd (global void)
-0:24        'gs_ua' (temp uint)
-0:24        'gs_ub' (temp uint)
+0:24        'gs_ua' (global uint)
+0:24        'gs_ub' (global uint)
 0:25      move second child to first child (temp uint)
 0:25        'out_u1' (temp uint)
 0:25        AtomicAdd (temp uint)
-0:25          'gs_ua' (temp uint)
-0:25          'gs_ub' (temp uint)
+0:25          'gs_ua' (global uint)
+0:25          'gs_ub' (global uint)
 0:26      AtomicAnd (global void)
-0:26        'gs_ua' (temp uint)
-0:26        'gs_ub' (temp uint)
+0:26        'gs_ua' (global uint)
+0:26        'gs_ub' (global uint)
 0:27      move second child to first child (temp uint)
 0:27        'out_u1' (temp uint)
 0:27        AtomicAnd (temp uint)
-0:27          'gs_ua' (temp uint)
-0:27          'gs_ub' (temp uint)
+0:27          'gs_ua' (global uint)
+0:27          'gs_ub' (global uint)
 0:28      move second child to first child (temp uint)
 0:28        'out_u1' (temp uint)
 0:28        AtomicCompSwap (temp uint)
-0:28          'gs_ua' (temp uint)
-0:28          'gs_ub' (temp uint)
-0:28          'gs_uc' (temp uint)
+0:28          'gs_ua' (global uint)
+0:28          'gs_ub' (global uint)
+0:28          'gs_uc' (global uint)
 0:29      move second child to first child (temp uint)
 0:29        'out_u1' (temp uint)
 0:29        AtomicExchange (temp uint)
-0:29          'gs_ua' (temp uint)
-0:29          'gs_ub' (temp uint)
+0:29          'gs_ua' (global uint)
+0:29          'gs_ub' (global uint)
 0:30      AtomicMax (global void)
-0:30        'gs_ua' (temp uint)
-0:30        'gs_ub' (temp uint)
+0:30        'gs_ua' (global uint)
+0:30        'gs_ub' (global uint)
 0:31      move second child to first child (temp uint)
 0:31        'out_u1' (temp uint)
 0:31        AtomicMax (temp uint)
-0:31          'gs_ua' (temp uint)
-0:31          'gs_ub' (temp uint)
+0:31          'gs_ua' (global uint)
+0:31          'gs_ub' (global uint)
 0:32      AtomicMin (global void)
-0:32        'gs_ua' (temp uint)
-0:32        'gs_ub' (temp uint)
+0:32        'gs_ua' (global uint)
+0:32        'gs_ub' (global uint)
 0:33      move second child to first child (temp uint)
 0:33        'out_u1' (temp uint)
 0:33        AtomicMin (temp uint)
-0:33          'gs_ua' (temp uint)
-0:33          'gs_ub' (temp uint)
+0:33          'gs_ua' (global uint)
+0:33          'gs_ub' (global uint)
 0:34      AtomicOr (global void)
-0:34        'gs_ua' (temp uint)
-0:34        'gs_ub' (temp uint)
+0:34        'gs_ua' (global uint)
+0:34        'gs_ub' (global uint)
 0:35      move second child to first child (temp uint)
 0:35        'out_u1' (temp uint)
 0:35        AtomicOr (temp uint)
-0:35          'gs_ua' (temp uint)
-0:35          'gs_ub' (temp uint)
+0:35          'gs_ua' (global uint)
+0:35          'gs_ub' (global uint)
 0:36      AtomicXor (global void)
-0:36        'gs_ua' (temp uint)
-0:36        'gs_ub' (temp uint)
+0:36        'gs_ua' (global uint)
+0:36        'gs_ub' (global uint)
 0:37      move second child to first child (temp uint)
 0:37        'out_u1' (temp uint)
 0:37        AtomicXor (temp uint)
-0:37          'gs_ua' (temp uint)
-0:37          'gs_ub' (temp uint)
+0:37          'gs_ua' (global uint)
+0:37          'gs_ub' (global uint)
 0:41      Branch: Return with expression
 0:41        Constant:
 0:41          0.000000
-0:50  Function Definition: ComputeShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float)
+0:50  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
 0:45    Function Parameters: 
 0:45      'inF0' (in 1-component vector of float)
 0:45      'inF1' (in 1-component vector of float)
@@ -407,7 +407,7 @@ local_size = (1, 1, 1)
 0:47      Branch: Return with expression
 0:47        Constant:
 0:47          0.000000
-0:77  Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
+0:77  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
 0:51    Function Parameters: 
 0:51      'inF0' (in 2-component vector of float)
 0:51      'inF1' (in 2-component vector of float)
@@ -418,69 +418,69 @@ local_size = (1, 1, 1)
 0:55      all (global bool)
 0:55        'inF0' (in 2-component vector of float)
 0:58      AtomicAdd (global void)
-0:58        'gs_ua2' (temp 2-component vector of uint)
-0:58        'gs_ub2' (temp 2-component vector of uint)
+0:58        'gs_ua2' (global 2-component vector of uint)
+0:58        'gs_ub2' (global 2-component vector of uint)
 0:59      move second child to first child (temp 2-component vector of uint)
 0:59        'out_u2' (temp 2-component vector of uint)
 0:59        AtomicAdd (temp 2-component vector of uint)
-0:59          'gs_ua2' (temp 2-component vector of uint)
-0:59          'gs_ub2' (temp 2-component vector of uint)
+0:59          'gs_ua2' (global 2-component vector of uint)
+0:59          'gs_ub2' (global 2-component vector of uint)
 0:60      AtomicAnd (global void)
-0:60        'gs_ua2' (temp 2-component vector of uint)
-0:60        'gs_ub2' (temp 2-component vector of uint)
+0:60        'gs_ua2' (global 2-component vector of uint)
+0:60        'gs_ub2' (global 2-component vector of uint)
 0:61      move second child to first child (temp 2-component vector of uint)
 0:61        'out_u2' (temp 2-component vector of uint)
 0:61        AtomicAnd (temp 2-component vector of uint)
-0:61          'gs_ua2' (temp 2-component vector of uint)
-0:61          'gs_ub2' (temp 2-component vector of uint)
+0:61          'gs_ua2' (global 2-component vector of uint)
+0:61          'gs_ub2' (global 2-component vector of uint)
 0:62      move second child to first child (temp 2-component vector of uint)
 0:62        'out_u2' (temp 2-component vector of uint)
 0:62        AtomicCompSwap (temp 2-component vector of uint)
-0:62          'gs_ua2' (temp 2-component vector of uint)
-0:62          'gs_ub2' (temp 2-component vector of uint)
-0:62          'gs_uc2' (temp 2-component vector of uint)
+0:62          'gs_ua2' (global 2-component vector of uint)
+0:62          'gs_ub2' (global 2-component vector of uint)
+0:62          'gs_uc2' (global 2-component vector of uint)
 0:63      move second child to first child (temp 2-component vector of uint)
 0:63        'out_u2' (temp 2-component vector of uint)
 0:63        AtomicExchange (temp 2-component vector of uint)
-0:63          'gs_ua2' (temp 2-component vector of uint)
-0:63          'gs_ub2' (temp 2-component vector of uint)
+0:63          'gs_ua2' (global 2-component vector of uint)
+0:63          'gs_ub2' (global 2-component vector of uint)
 0:64      AtomicMax (global void)
-0:64        'gs_ua2' (temp 2-component vector of uint)
-0:64        'gs_ub2' (temp 2-component vector of uint)
+0:64        'gs_ua2' (global 2-component vector of uint)
+0:64        'gs_ub2' (global 2-component vector of uint)
 0:65      move second child to first child (temp 2-component vector of uint)
 0:65        'out_u2' (temp 2-component vector of uint)
 0:65        AtomicMax (temp 2-component vector of uint)
-0:65          'gs_ua2' (temp 2-component vector of uint)
-0:65          'gs_ub2' (temp 2-component vector of uint)
+0:65          'gs_ua2' (global 2-component vector of uint)
+0:65          'gs_ub2' (global 2-component vector of uint)
 0:66      AtomicMin (global void)
-0:66        'gs_ua2' (temp 2-component vector of uint)
-0:66        'gs_ub2' (temp 2-component vector of uint)
+0:66        'gs_ua2' (global 2-component vector of uint)
+0:66        'gs_ub2' (global 2-component vector of uint)
 0:67      move second child to first child (temp 2-component vector of uint)
 0:67        'out_u2' (temp 2-component vector of uint)
 0:67        AtomicMin (temp 2-component vector of uint)
-0:67          'gs_ua2' (temp 2-component vector of uint)
-0:67          'gs_ub2' (temp 2-component vector of uint)
+0:67          'gs_ua2' (global 2-component vector of uint)
+0:67          'gs_ub2' (global 2-component vector of uint)
 0:68      AtomicOr (global void)
-0:68        'gs_ua2' (temp 2-component vector of uint)
-0:68        'gs_ub2' (temp 2-component vector of uint)
+0:68        'gs_ua2' (global 2-component vector of uint)
+0:68        'gs_ub2' (global 2-component vector of uint)
 0:69      move second child to first child (temp 2-component vector of uint)
 0:69        'out_u2' (temp 2-component vector of uint)
 0:69        AtomicOr (temp 2-component vector of uint)
-0:69          'gs_ua2' (temp 2-component vector of uint)
-0:69          'gs_ub2' (temp 2-component vector of uint)
+0:69          'gs_ua2' (global 2-component vector of uint)
+0:69          'gs_ub2' (global 2-component vector of uint)
 0:70      AtomicXor (global void)
-0:70        'gs_ua2' (temp 2-component vector of uint)
-0:70        'gs_ub2' (temp 2-component vector of uint)
+0:70        'gs_ua2' (global 2-component vector of uint)
+0:70        'gs_ub2' (global 2-component vector of uint)
 0:71      move second child to first child (temp 2-component vector of uint)
 0:71        'out_u2' (temp 2-component vector of uint)
 0:71        AtomicXor (temp 2-component vector of uint)
-0:71          'gs_ua2' (temp 2-component vector of uint)
-0:71          'gs_ub2' (temp 2-component vector of uint)
+0:71          'gs_ua2' (global 2-component vector of uint)
+0:71          'gs_ub2' (global 2-component vector of uint)
 0:74      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:104  Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
+0:104  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
 0:78    Function Parameters: 
 0:78      'inF0' (in 3-component vector of float)
 0:78      'inF1' (in 3-component vector of float)
@@ -491,70 +491,70 @@ local_size = (1, 1, 1)
 0:82      all (global bool)
 0:82        'inF0' (in 3-component vector of float)
 0:85      AtomicAdd (global void)
-0:85        'gs_ua3' (temp 3-component vector of uint)
-0:85        'gs_ub3' (temp 3-component vector of uint)
+0:85        'gs_ua3' (global 3-component vector of uint)
+0:85        'gs_ub3' (global 3-component vector of uint)
 0:86      move second child to first child (temp 3-component vector of uint)
 0:86        'out_u3' (temp 3-component vector of uint)
 0:86        AtomicAdd (temp 3-component vector of uint)
-0:86          'gs_ua3' (temp 3-component vector of uint)
-0:86          'gs_ub3' (temp 3-component vector of uint)
+0:86          'gs_ua3' (global 3-component vector of uint)
+0:86          'gs_ub3' (global 3-component vector of uint)
 0:87      AtomicAnd (global void)
-0:87        'gs_ua3' (temp 3-component vector of uint)
-0:87        'gs_ub3' (temp 3-component vector of uint)
+0:87        'gs_ua3' (global 3-component vector of uint)
+0:87        'gs_ub3' (global 3-component vector of uint)
 0:88      move second child to first child (temp 3-component vector of uint)
 0:88        'out_u3' (temp 3-component vector of uint)
 0:88        AtomicAnd (temp 3-component vector of uint)
-0:88          'gs_ua3' (temp 3-component vector of uint)
-0:88          'gs_ub3' (temp 3-component vector of uint)
+0:88          'gs_ua3' (global 3-component vector of uint)
+0:88          'gs_ub3' (global 3-component vector of uint)
 0:89      move second child to first child (temp 3-component vector of uint)
 0:89        'out_u3' (temp 3-component vector of uint)
 0:89        AtomicCompSwap (temp 3-component vector of uint)
-0:89          'gs_ua3' (temp 3-component vector of uint)
-0:89          'gs_ub3' (temp 3-component vector of uint)
-0:89          'gs_uc3' (temp 3-component vector of uint)
+0:89          'gs_ua3' (global 3-component vector of uint)
+0:89          'gs_ub3' (global 3-component vector of uint)
+0:89          'gs_uc3' (global 3-component vector of uint)
 0:90      move second child to first child (temp 3-component vector of uint)
 0:90        'out_u3' (temp 3-component vector of uint)
 0:90        AtomicExchange (temp 3-component vector of uint)
-0:90          'gs_ua3' (temp 3-component vector of uint)
-0:90          'gs_ub3' (temp 3-component vector of uint)
+0:90          'gs_ua3' (global 3-component vector of uint)
+0:90          'gs_ub3' (global 3-component vector of uint)
 0:91      AtomicMax (global void)
-0:91        'gs_ua3' (temp 3-component vector of uint)
-0:91        'gs_ub3' (temp 3-component vector of uint)
+0:91        'gs_ua3' (global 3-component vector of uint)
+0:91        'gs_ub3' (global 3-component vector of uint)
 0:92      move second child to first child (temp 3-component vector of uint)
 0:92        'out_u3' (temp 3-component vector of uint)
 0:92        AtomicMax (temp 3-component vector of uint)
-0:92          'gs_ua3' (temp 3-component vector of uint)
-0:92          'gs_ub3' (temp 3-component vector of uint)
+0:92          'gs_ua3' (global 3-component vector of uint)
+0:92          'gs_ub3' (global 3-component vector of uint)
 0:93      AtomicMin (global void)
-0:93        'gs_ua3' (temp 3-component vector of uint)
-0:93        'gs_ub3' (temp 3-component vector of uint)
+0:93        'gs_ua3' (global 3-component vector of uint)
+0:93        'gs_ub3' (global 3-component vector of uint)
 0:94      move second child to first child (temp 3-component vector of uint)
 0:94        'out_u3' (temp 3-component vector of uint)
 0:94        AtomicMin (temp 3-component vector of uint)
-0:94          'gs_ua3' (temp 3-component vector of uint)
-0:94          'gs_ub3' (temp 3-component vector of uint)
+0:94          'gs_ua3' (global 3-component vector of uint)
+0:94          'gs_ub3' (global 3-component vector of uint)
 0:95      AtomicOr (global void)
-0:95        'gs_ua3' (temp 3-component vector of uint)
-0:95        'gs_ub3' (temp 3-component vector of uint)
+0:95        'gs_ua3' (global 3-component vector of uint)
+0:95        'gs_ub3' (global 3-component vector of uint)
 0:96      move second child to first child (temp 3-component vector of uint)
 0:96        'out_u3' (temp 3-component vector of uint)
 0:96        AtomicOr (temp 3-component vector of uint)
-0:96          'gs_ua3' (temp 3-component vector of uint)
-0:96          'gs_ub3' (temp 3-component vector of uint)
+0:96          'gs_ua3' (global 3-component vector of uint)
+0:96          'gs_ub3' (global 3-component vector of uint)
 0:97      AtomicXor (global void)
-0:97        'gs_ua3' (temp 3-component vector of uint)
-0:97        'gs_ub3' (temp 3-component vector of uint)
+0:97        'gs_ua3' (global 3-component vector of uint)
+0:97        'gs_ub3' (global 3-component vector of uint)
 0:98      move second child to first child (temp 3-component vector of uint)
 0:98        'out_u3' (temp 3-component vector of uint)
 0:98        AtomicXor (temp 3-component vector of uint)
-0:98          'gs_ua3' (temp 3-component vector of uint)
-0:98          'gs_ub3' (temp 3-component vector of uint)
+0:98          'gs_ua3' (global 3-component vector of uint)
+0:98          'gs_ub3' (global 3-component vector of uint)
 0:101      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:130  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
+0:130  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
 0:105    Function Parameters: 
 0:105      'inF0' (in 4-component vector of float)
 0:105      'inF1' (in 4-component vector of float)
@@ -565,64 +565,64 @@ local_size = (1, 1, 1)
 0:109      all (global bool)
 0:109        'inF0' (in 4-component vector of float)
 0:112      AtomicAdd (global void)
-0:112        'gs_ua4' (temp 4-component vector of uint)
-0:112        'gs_ub4' (temp 4-component vector of uint)
+0:112        'gs_ua4' (global 4-component vector of uint)
+0:112        'gs_ub4' (global 4-component vector of uint)
 0:113      move second child to first child (temp 4-component vector of uint)
 0:113        'out_u4' (temp 4-component vector of uint)
 0:113        AtomicAdd (temp 4-component vector of uint)
-0:113          'gs_ua4' (temp 4-component vector of uint)
-0:113          'gs_ub4' (temp 4-component vector of uint)
+0:113          'gs_ua4' (global 4-component vector of uint)
+0:113          'gs_ub4' (global 4-component vector of uint)
 0:114      AtomicAnd (global void)
-0:114        'gs_ua4' (temp 4-component vector of uint)
-0:114        'gs_ub4' (temp 4-component vector of uint)
+0:114        'gs_ua4' (global 4-component vector of uint)
+0:114        'gs_ub4' (global 4-component vector of uint)
 0:115      move second child to first child (temp 4-component vector of uint)
 0:115        'out_u4' (temp 4-component vector of uint)
 0:115        AtomicAnd (temp 4-component vector of uint)
-0:115          'gs_ua4' (temp 4-component vector of uint)
-0:115          'gs_ub4' (temp 4-component vector of uint)
+0:115          'gs_ua4' (global 4-component vector of uint)
+0:115          'gs_ub4' (global 4-component vector of uint)
 0:116      move second child to first child (temp 4-component vector of uint)
 0:116        'out_u4' (temp 4-component vector of uint)
 0:116        AtomicCompSwap (temp 4-component vector of uint)
-0:116          'gs_ua4' (temp 4-component vector of uint)
-0:116          'gs_ub4' (temp 4-component vector of uint)
-0:116          'gs_uc4' (temp 4-component vector of uint)
+0:116          'gs_ua4' (global 4-component vector of uint)
+0:116          'gs_ub4' (global 4-component vector of uint)
+0:116          'gs_uc4' (global 4-component vector of uint)
 0:117      move second child to first child (temp 4-component vector of uint)
 0:117        'out_u4' (temp 4-component vector of uint)
 0:117        AtomicExchange (temp 4-component vector of uint)
-0:117          'gs_ua4' (temp 4-component vector of uint)
-0:117          'gs_ub4' (temp 4-component vector of uint)
+0:117          'gs_ua4' (global 4-component vector of uint)
+0:117          'gs_ub4' (global 4-component vector of uint)
 0:118      AtomicMax (global void)
-0:118        'gs_ua4' (temp 4-component vector of uint)
-0:118        'gs_ub4' (temp 4-component vector of uint)
+0:118        'gs_ua4' (global 4-component vector of uint)
+0:118        'gs_ub4' (global 4-component vector of uint)
 0:119      move second child to first child (temp 4-component vector of uint)
 0:119        'out_u4' (temp 4-component vector of uint)
 0:119        AtomicMax (temp 4-component vector of uint)
-0:119          'gs_ua4' (temp 4-component vector of uint)
-0:119          'gs_ub4' (temp 4-component vector of uint)
+0:119          'gs_ua4' (global 4-component vector of uint)
+0:119          'gs_ub4' (global 4-component vector of uint)
 0:120      AtomicMin (global void)
-0:120        'gs_ua4' (temp 4-component vector of uint)
-0:120        'gs_ub4' (temp 4-component vector of uint)
+0:120        'gs_ua4' (global 4-component vector of uint)
+0:120        'gs_ub4' (global 4-component vector of uint)
 0:121      move second child to first child (temp 4-component vector of uint)
 0:121        'out_u4' (temp 4-component vector of uint)
 0:121        AtomicMin (temp 4-component vector of uint)
-0:121          'gs_ua4' (temp 4-component vector of uint)
-0:121          'gs_ub4' (temp 4-component vector of uint)
+0:121          'gs_ua4' (global 4-component vector of uint)
+0:121          'gs_ub4' (global 4-component vector of uint)
 0:122      AtomicOr (global void)
-0:122        'gs_ua4' (temp 4-component vector of uint)
-0:122        'gs_ub4' (temp 4-component vector of uint)
+0:122        'gs_ua4' (global 4-component vector of uint)
+0:122        'gs_ub4' (global 4-component vector of uint)
 0:123      move second child to first child (temp 4-component vector of uint)
 0:123        'out_u4' (temp 4-component vector of uint)
 0:123        AtomicOr (temp 4-component vector of uint)
-0:123          'gs_ua4' (temp 4-component vector of uint)
-0:123          'gs_ub4' (temp 4-component vector of uint)
+0:123          'gs_ua4' (global 4-component vector of uint)
+0:123          'gs_ub4' (global 4-component vector of uint)
 0:124      AtomicXor (global void)
-0:124        'gs_ua4' (temp 4-component vector of uint)
-0:124        'gs_ub4' (temp 4-component vector of uint)
+0:124        'gs_ua4' (global 4-component vector of uint)
+0:124        'gs_ub4' (global 4-component vector of uint)
 0:125      move second child to first child (temp 4-component vector of uint)
 0:125        'out_u4' (temp 4-component vector of uint)
 0:125        AtomicXor (temp 4-component vector of uint)
-0:125          'gs_ua4' (temp 4-component vector of uint)
-0:125          'gs_ub4' (temp 4-component vector of uint)
+0:125          'gs_ua4' (global 4-component vector of uint)
+0:125          'gs_ub4' (global 4-component vector of uint)
 0:128      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
@@ -630,139 +630,314 @@ local_size = (1, 1, 1)
 0:?           3.000000
 0:?           4.000000
 0:?   Linker Objects
-0:?     'gs_ua' (temp uint)
-0:?     'gs_ub' (temp uint)
-0:?     'gs_uc' (temp uint)
-0:?     'gs_ua2' (temp 2-component vector of uint)
-0:?     'gs_ub2' (temp 2-component vector of uint)
-0:?     'gs_uc2' (temp 2-component vector of uint)
-0:?     'gs_ua3' (temp 3-component vector of uint)
-0:?     'gs_ub3' (temp 3-component vector of uint)
-0:?     'gs_uc3' (temp 3-component vector of uint)
-0:?     'gs_ua4' (temp 4-component vector of uint)
-0:?     'gs_ub4' (temp 4-component vector of uint)
-0:?     'gs_uc4' (temp 4-component vector of uint)
+0:?     'gs_ua' (global uint)
+0:?     'gs_ub' (global uint)
+0:?     'gs_uc' (global uint)
+0:?     'gs_ua2' (global 2-component vector of uint)
+0:?     'gs_ub2' (global 2-component vector of uint)
+0:?     'gs_uc2' (global 2-component vector of uint)
+0:?     'gs_ua3' (global 3-component vector of uint)
+0:?     'gs_ub3' (global 3-component vector of uint)
+0:?     'gs_uc3' (global 3-component vector of uint)
+0:?     'gs_ua4' (global 4-component vector of uint)
+0:?     'gs_ub4' (global 4-component vector of uint)
+0:?     'gs_uc4' (global 4-component vector of uint)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 182
+// Id's are bound by 217
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 4  "ComputeShaderFunction" 8 54 98 141
+                              EntryPoint GLCompute 4  "ComputeShaderFunction" 175
                               ExecutionMode 4 LocalSize 1 1 1
                               Source HLSL 450
                               Name 4  "ComputeShaderFunction"
-                              Name 8  "inF0"
-                              Name 14  "gs_ua"
-                              Name 15  "gs_ub"
-                              Name 20  "out_u1"
-                              Name 28  "gs_uc"
-                              Name 54  "inF0"
-                              Name 59  "gs_ua2"
-                              Name 60  "gs_ub2"
-                              Name 63  "out_u2"
-                              Name 71  "gs_uc2"
-                              Name 98  "inF0"
-                              Name 103  "gs_ua3"
-                              Name 104  "gs_ub3"
-                              Name 107  "out_u3"
-                              Name 115  "gs_uc3"
-                              Name 141  "inF0"
-                              Name 146  "gs_ua4"
-                              Name 147  "gs_ub4"
-                              Name 150  "out_u4"
-                              Name 158  "gs_uc4"
+                              Name 16  "ComputeShaderFunctionS(f1;f1;f1;u1;u1;"
+                              Name 11  "inF0"
+                              Name 12  "inF1"
+                              Name 13  "inF2"
+                              Name 14  "inU0"
+                              Name 15  "inU1"
+                              Name 22  "ComputeShaderFunction1(vf1;vf1;vf1;"
+                              Name 19  "inF0"
+                              Name 20  "inF1"
+                              Name 21  "inF2"
+                              Name 34  "ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2;"
+                              Name 29  "inF0"
+                              Name 30  "inF1"
+                              Name 31  "inF2"
+                              Name 32  "inU0"
+                              Name 33  "inU1"
+                              Name 46  "ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3;"
+                              Name 41  "inF0"
+                              Name 42  "inF1"
+                              Name 43  "inF2"
+                              Name 44  "inU0"
+                              Name 45  "inU1"
+                              Name 52  "gs_ua"
+                              Name 53  "gs_ub"
+                              Name 58  "out_u1"
+                              Name 66  "gs_uc"
+                              Name 95  "gs_ua2"
+                              Name 96  "gs_ub2"
+                              Name 99  "out_u2"
+                              Name 107  "gs_uc2"
+                              Name 136  "gs_ua3"
+                              Name 137  "gs_ub3"
+                              Name 140  "out_u3"
+                              Name 148  "gs_uc3"
+                              Name 175  "inF0"
+                              Name 180  "gs_ua4"
+                              Name 181  "gs_ub4"
+                              Name 185  "out_u4"
+                              Name 193  "gs_uc4"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
-               7:             TypePointer Input 6(float)
-         8(inF0):      7(ptr) Variable Input
-              10:             TypeBool
-              12:             TypeInt 32 0
-              13:             TypePointer Function 12(int)
-              17:     12(int) Constant 1
-              18:     12(int) Constant 0
-              49:    6(float) Constant 0
-              52:             TypeVector 6(float) 2
-              53:             TypePointer Input 52(fvec2)
-        54(inF0):     53(ptr) Variable Input
-              57:             TypeVector 12(int) 2
-              58:             TypePointer Function 57(ivec2)
-              92:    6(float) Constant 1065353216
-              93:    6(float) Constant 1073741824
-              94:   52(fvec2) ConstantComposite 92 93
-              96:             TypeVector 6(float) 3
-              97:             TypePointer Input 96(fvec3)
-        98(inF0):     97(ptr) Variable Input
-             101:             TypeVector 12(int) 3
-             102:             TypePointer Function 101(ivec3)
-             136:    6(float) Constant 1077936128
-             137:   96(fvec3) ConstantComposite 92 93 136
-             139:             TypeVector 6(float) 4
-             140:             TypePointer Input 139(fvec4)
-       141(inF0):    140(ptr) Variable Input
-             144:             TypeVector 12(int) 4
-             145:             TypePointer Function 144(ivec4)
-             179:    6(float) Constant 1082130432
-             180:  139(fvec4) ConstantComposite 92 93 136 179
+               7:             TypePointer Function 6(float)
+               8:             TypeInt 32 0
+               9:             TypePointer Function 8(int)
+              10:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 9(ptr)
+              18:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr)
+              24:             TypeVector 6(float) 2
+              25:             TypePointer Function 24(fvec2)
+              26:             TypeVector 8(int) 2
+              27:             TypePointer Function 26(ivec2)
+              28:             TypeFunction 24(fvec2) 25(ptr) 25(ptr) 25(ptr) 27(ptr) 27(ptr)
+              36:             TypeVector 6(float) 3
+              37:             TypePointer Function 36(fvec3)
+              38:             TypeVector 8(int) 3
+              39:             TypePointer Function 38(ivec3)
+              40:             TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr)
+              49:             TypeBool
+              51:             TypePointer Private 8(int)
+       52(gs_ua):     51(ptr) Variable Private
+       53(gs_ub):     51(ptr) Variable Private
+              55:      8(int) Constant 1
+              56:      8(int) Constant 0
+       66(gs_uc):     51(ptr) Variable Private
+              87:    6(float) Constant 0
+              94:             TypePointer Private 26(ivec2)
+      95(gs_ua2):     94(ptr) Variable Private
+      96(gs_ub2):     94(ptr) Variable Private
+     107(gs_uc2):     94(ptr) Variable Private
+             128:    6(float) Constant 1065353216
+             129:    6(float) Constant 1073741824
+             130:   24(fvec2) ConstantComposite 128 129
+             135:             TypePointer Private 38(ivec3)
+     136(gs_ua3):    135(ptr) Variable Private
+     137(gs_ub3):    135(ptr) Variable Private
+     148(gs_uc3):    135(ptr) Variable Private
+             169:    6(float) Constant 1077936128
+             170:   36(fvec3) ConstantComposite 128 129 169
+             173:             TypeVector 6(float) 4
+             174:             TypePointer Input 173(fvec4)
+       175(inF0):    174(ptr) Variable Input
+             178:             TypeVector 8(int) 4
+             179:             TypePointer Private 178(ivec4)
+     180(gs_ua4):    179(ptr) Variable Private
+     181(gs_ub4):    179(ptr) Variable Private
+             184:             TypePointer Function 178(ivec4)
+     193(gs_uc4):    179(ptr) Variable Private
+             214:    6(float) Constant 1082130432
+             215:  173(fvec4) ConstantComposite 128 129 169 214
 4(ComputeShaderFunction):           2 Function None 3
                5:             Label
-       14(gs_ua):     13(ptr) Variable Function
-       15(gs_ub):     13(ptr) Variable Function
-      20(out_u1):     13(ptr) Variable Function
-       28(gs_uc):     13(ptr) Variable Function
-      59(gs_ua2):     58(ptr) Variable Function
-      60(gs_ub2):     58(ptr) Variable Function
-      63(out_u2):     58(ptr) Variable Function
-      71(gs_uc2):     58(ptr) Variable Function
-     103(gs_ua3):    102(ptr) Variable Function
-     104(gs_ub3):    102(ptr) Variable Function
-     107(out_u3):    102(ptr) Variable Function
-     115(gs_uc3):    102(ptr) Variable Function
-     146(gs_ua4):    145(ptr) Variable Function
-     147(gs_ub4):    145(ptr) Variable Function
-     150(out_u4):    145(ptr) Variable Function
-     158(gs_uc4):    145(ptr) Variable Function
-               9:    6(float) Load 8(inF0)
-              11:    10(bool) All 9
-              16:     12(int) Load 15(gs_ub)
-              19:           2 AtomicIAdd 14(gs_ua) 17 18 16
-              21:     12(int) Load 15(gs_ub)
-              22:     12(int) AtomicIAdd 14(gs_ua) 17 18 21
-                              Store 20(out_u1) 22
-              23:     12(int) Load 15(gs_ub)
-              24:           2 AtomicAnd 14(gs_ua) 17 18 23
-              25:     12(int) Load 15(gs_ub)
-              26:     12(int) AtomicAnd 14(gs_ua) 17 18 25
-                              Store 20(out_u1) 26
-              27:     12(int) Load 15(gs_ub)
-              29:     12(int) Load 28(gs_uc)
-              30:     12(int) AtomicCompareExchange 14(gs_ua) 17 18 18 29 27
-                              Store 20(out_u1) 30
-              31:     12(int) Load 15(gs_ub)
-              32:     12(int) AtomicExchange 14(gs_ua) 17 18 31
-                              Store 20(out_u1) 32
-              33:     12(int) Load 15(gs_ub)
-              34:           2 AtomicSMax 14(gs_ua) 17 18 33
-              35:     12(int) Load 15(gs_ub)
-              36:     12(int) AtomicUMax 14(gs_ua) 17 18 35
-                              Store 20(out_u1) 36
-              37:     12(int) Load 15(gs_ub)
-              38:           2 AtomicSMin 14(gs_ua) 17 18 37
-              39:     12(int) Load 15(gs_ub)
-              40:     12(int) AtomicUMin 14(gs_ua) 17 18 39
-                              Store 20(out_u1) 40
-              41:     12(int) Load 15(gs_ub)
-              42:           2 AtomicOr 14(gs_ua) 17 18 41
-              43:     12(int) Load 15(gs_ub)
-              44:     12(int) AtomicOr 14(gs_ua) 17 18 43
-                              Store 20(out_u1) 44
-              45:     12(int) Load 15(gs_ub)
-              46:           2 AtomicXor 14(gs_ua) 17 18 45
-              47:     12(int) Load 15(gs_ub)
-              48:     12(int) AtomicXor 14(gs_ua) 17 18 47
-                              Store 20(out_u1) 48
-                              ReturnValue 49
+     185(out_u4):    184(ptr) Variable Function
+             176:  173(fvec4) Load 175(inF0)
+             177:    49(bool) All 176
+             182:  178(ivec4) Load 181(gs_ub4)
+             183:           2 AtomicIAdd 180(gs_ua4) 55 56 182
+             186:  178(ivec4) Load 181(gs_ub4)
+             187:  178(ivec4) AtomicIAdd 180(gs_ua4) 55 56 186
+                              Store 185(out_u4) 187
+             188:  178(ivec4) Load 181(gs_ub4)
+             189:           2 AtomicAnd 180(gs_ua4) 55 56 188
+             190:  178(ivec4) Load 181(gs_ub4)
+             191:  178(ivec4) AtomicAnd 180(gs_ua4) 55 56 190
+                              Store 185(out_u4) 191
+             192:  178(ivec4) Load 181(gs_ub4)
+             194:  178(ivec4) Load 193(gs_uc4)
+             195:  178(ivec4) AtomicCompareExchange 180(gs_ua4) 55 56 56 194 192
+                              Store 185(out_u4) 195
+             196:  178(ivec4) Load 181(gs_ub4)
+             197:  178(ivec4) AtomicExchange 180(gs_ua4) 55 56 196
+                              Store 185(out_u4) 197
+             198:  178(ivec4) Load 181(gs_ub4)
+             199:           2 AtomicSMax 180(gs_ua4) 55 56 198
+             200:  178(ivec4) Load 181(gs_ub4)
+             201:  178(ivec4) AtomicUMax 180(gs_ua4) 55 56 200
+                              Store 185(out_u4) 201
+             202:  178(ivec4) Load 181(gs_ub4)
+             203:           2 AtomicSMin 180(gs_ua4) 55 56 202
+             204:  178(ivec4) Load 181(gs_ub4)
+             205:  178(ivec4) AtomicUMin 180(gs_ua4) 55 56 204
+                              Store 185(out_u4) 205
+             206:  178(ivec4) Load 181(gs_ub4)
+             207:           2 AtomicOr 180(gs_ua4) 55 56 206
+             208:  178(ivec4) Load 181(gs_ub4)
+             209:  178(ivec4) AtomicOr 180(gs_ua4) 55 56 208
+                              Store 185(out_u4) 209
+             210:  178(ivec4) Load 181(gs_ub4)
+             211:           2 AtomicXor 180(gs_ua4) 55 56 210
+             212:  178(ivec4) Load 181(gs_ub4)
+             213:  178(ivec4) AtomicXor 180(gs_ua4) 55 56 212
+                              Store 185(out_u4) 213
+                              ReturnValue 215
+                              FunctionEnd
+16(ComputeShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
+        11(inF0):      7(ptr) FunctionParameter
+        12(inF1):      7(ptr) FunctionParameter
+        13(inF2):      7(ptr) FunctionParameter
+        14(inU0):      9(ptr) FunctionParameter
+        15(inU1):      9(ptr) FunctionParameter
+              17:             Label
+      58(out_u1):      9(ptr) Variable Function
+              48:    6(float) Load 11(inF0)
+              50:    49(bool) All 48
+              54:      8(int) Load 53(gs_ub)
+              57:           2 AtomicIAdd 52(gs_ua) 55 56 54
+              59:      8(int) Load 53(gs_ub)
+              60:      8(int) AtomicIAdd 52(gs_ua) 55 56 59
+                              Store 58(out_u1) 60
+              61:      8(int) Load 53(gs_ub)
+              62:           2 AtomicAnd 52(gs_ua) 55 56 61
+              63:      8(int) Load 53(gs_ub)
+              64:      8(int) AtomicAnd 52(gs_ua) 55 56 63
+                              Store 58(out_u1) 64
+              65:      8(int) Load 53(gs_ub)
+              67:      8(int) Load 66(gs_uc)
+              68:      8(int) AtomicCompareExchange 52(gs_ua) 55 56 56 67 65
+                              Store 58(out_u1) 68
+              69:      8(int) Load 53(gs_ub)
+              70:      8(int) AtomicExchange 52(gs_ua) 55 56 69
+                              Store 58(out_u1) 70
+              71:      8(int) Load 53(gs_ub)
+              72:           2 AtomicSMax 52(gs_ua) 55 56 71
+              73:      8(int) Load 53(gs_ub)
+              74:      8(int) AtomicUMax 52(gs_ua) 55 56 73
+                              Store 58(out_u1) 74
+              75:      8(int) Load 53(gs_ub)
+              76:           2 AtomicSMin 52(gs_ua) 55 56 75
+              77:      8(int) Load 53(gs_ub)
+              78:      8(int) AtomicUMin 52(gs_ua) 55 56 77
+                              Store 58(out_u1) 78
+              79:      8(int) Load 53(gs_ub)
+              80:           2 AtomicOr 52(gs_ua) 55 56 79
+              81:      8(int) Load 53(gs_ub)
+              82:      8(int) AtomicOr 52(gs_ua) 55 56 81
+                              Store 58(out_u1) 82
+              83:      8(int) Load 53(gs_ub)
+              84:           2 AtomicXor 52(gs_ua) 55 56 83
+              85:      8(int) Load 53(gs_ub)
+              86:      8(int) AtomicXor 52(gs_ua) 55 56 85
+                              Store 58(out_u1) 86
+                              ReturnValue 87
+                              FunctionEnd
+22(ComputeShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 18
+        19(inF0):      7(ptr) FunctionParameter
+        20(inF1):      7(ptr) FunctionParameter
+        21(inF2):      7(ptr) FunctionParameter
+              23:             Label
+                              ReturnValue 87
+                              FunctionEnd
+34(ComputeShaderFunction2(vf2;vf2;vf2;vu2;vu2;):   24(fvec2) Function None 28
+        29(inF0):     25(ptr) FunctionParameter
+        30(inF1):     25(ptr) FunctionParameter
+        31(inF2):     25(ptr) FunctionParameter
+        32(inU0):     27(ptr) FunctionParameter
+        33(inU1):     27(ptr) FunctionParameter
+              35:             Label
+      99(out_u2):     27(ptr) Variable Function
+              92:   24(fvec2) Load 29(inF0)
+              93:    49(bool) All 92
+              97:   26(ivec2) Load 96(gs_ub2)
+              98:           2 AtomicIAdd 95(gs_ua2) 55 56 97
+             100:   26(ivec2) Load 96(gs_ub2)
+             101:   26(ivec2) AtomicIAdd 95(gs_ua2) 55 56 100
+                              Store 99(out_u2) 101
+             102:   26(ivec2) Load 96(gs_ub2)
+             103:           2 AtomicAnd 95(gs_ua2) 55 56 102
+             104:   26(ivec2) Load 96(gs_ub2)
+             105:   26(ivec2) AtomicAnd 95(gs_ua2) 55 56 104
+                              Store 99(out_u2) 105
+             106:   26(ivec2) Load 96(gs_ub2)
+             108:   26(ivec2) Load 107(gs_uc2)
+             109:   26(ivec2) AtomicCompareExchange 95(gs_ua2) 55 56 56 108 106
+                              Store 99(out_u2) 109
+             110:   26(ivec2) Load 96(gs_ub2)
+             111:   26(ivec2) AtomicExchange 95(gs_ua2) 55 56 110
+                              Store 99(out_u2) 111
+             112:   26(ivec2) Load 96(gs_ub2)
+             113:           2 AtomicSMax 95(gs_ua2) 55 56 112
+             114:   26(ivec2) Load 96(gs_ub2)
+             115:   26(ivec2) AtomicUMax 95(gs_ua2) 55 56 114
+                              Store 99(out_u2) 115
+             116:   26(ivec2) Load 96(gs_ub2)
+             117:           2 AtomicSMin 95(gs_ua2) 55 56 116
+             118:   26(ivec2) Load 96(gs_ub2)
+             119:   26(ivec2) AtomicUMin 95(gs_ua2) 55 56 118
+                              Store 99(out_u2) 119
+             120:   26(ivec2) Load 96(gs_ub2)
+             121:           2 AtomicOr 95(gs_ua2) 55 56 120
+             122:   26(ivec2) Load 96(gs_ub2)
+             123:   26(ivec2) AtomicOr 95(gs_ua2) 55 56 122
+                              Store 99(out_u2) 123
+             124:   26(ivec2) Load 96(gs_ub2)
+             125:           2 AtomicXor 95(gs_ua2) 55 56 124
+             126:   26(ivec2) Load 96(gs_ub2)
+             127:   26(ivec2) AtomicXor 95(gs_ua2) 55 56 126
+                              Store 99(out_u2) 127
+                              ReturnValue 130
+                              FunctionEnd
+46(ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
+        41(inF0):     37(ptr) FunctionParameter
+        42(inF1):     37(ptr) FunctionParameter
+        43(inF2):     37(ptr) FunctionParameter
+        44(inU0):     39(ptr) FunctionParameter
+        45(inU1):     39(ptr) FunctionParameter
+              47:             Label
+     140(out_u3):     39(ptr) Variable Function
+             133:   36(fvec3) Load 41(inF0)
+             134:    49(bool) All 133
+             138:   38(ivec3) Load 137(gs_ub3)
+             139:           2 AtomicIAdd 136(gs_ua3) 55 56 138
+             141:   38(ivec3) Load 137(gs_ub3)
+             142:   38(ivec3) AtomicIAdd 136(gs_ua3) 55 56 141
+                              Store 140(out_u3) 142
+             143:   38(ivec3) Load 137(gs_ub3)
+             144:           2 AtomicAnd 136(gs_ua3) 55 56 143
+             145:   38(ivec3) Load 137(gs_ub3)
+             146:   38(ivec3) AtomicAnd 136(gs_ua3) 55 56 145
+                              Store 140(out_u3) 146
+             147:   38(ivec3) Load 137(gs_ub3)
+             149:   38(ivec3) Load 148(gs_uc3)
+             150:   38(ivec3) AtomicCompareExchange 136(gs_ua3) 55 56 56 149 147
+                              Store 140(out_u3) 150
+             151:   38(ivec3) Load 137(gs_ub3)
+             152:   38(ivec3) AtomicExchange 136(gs_ua3) 55 56 151
+                              Store 140(out_u3) 152
+             153:   38(ivec3) Load 137(gs_ub3)
+             154:           2 AtomicSMax 136(gs_ua3) 55 56 153
+             155:   38(ivec3) Load 137(gs_ub3)
+             156:   38(ivec3) AtomicUMax 136(gs_ua3) 55 56 155
+                              Store 140(out_u3) 156
+             157:   38(ivec3) Load 137(gs_ub3)
+             158:           2 AtomicSMin 136(gs_ua3) 55 56 157
+             159:   38(ivec3) Load 137(gs_ub3)
+             160:   38(ivec3) AtomicUMin 136(gs_ua3) 55 56 159
+                              Store 140(out_u3) 160
+             161:   38(ivec3) Load 137(gs_ub3)
+             162:           2 AtomicOr 136(gs_ua3) 55 56 161
+             163:   38(ivec3) Load 137(gs_ub3)
+             164:   38(ivec3) AtomicOr 136(gs_ua3) 55 56 163
+                              Store 140(out_u3) 164
+             165:   38(ivec3) Load 137(gs_ub3)
+             166:           2 AtomicXor 136(gs_ua3) 55 56 165
+             167:   38(ivec3) Load 137(gs_ub3)
+             168:   38(ivec3) AtomicXor 136(gs_ua3) 55 56 167
+                              Store 140(out_u3) 168
+                              ReturnValue 170
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.intrinsics.double.frag.out b/Test/baseResults/hlsl.intrinsics.double.frag.out
new file mode 100644 (file)
index 0000000..8bfc072
--- /dev/null
@@ -0,0 +1,121 @@
+hlsl.intrinsics.double.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; (global float)
+0:5    Function Parameters: 
+0:5      'inDV1a' (in double)
+0:5      'inDV1b' (in double)
+0:5      'inDV1c' (in double)
+0:5      'inDV2' (in 2-component vector of double)
+0:5      'inDV3' (in 3-component vector of double)
+0:5      'inDV4' (in 4-component vector of double)
+0:5      'inU1a' (in uint)
+0:5      'inU1b' (in uint)
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child (temp double)
+0:6          'r00' (temp double)
+0:6          fma (global double)
+0:6            'inDV1a' (in double)
+0:6            'inDV1b' (in double)
+0:6            'inDV1c' (in double)
+0:7      Sequence
+0:7        move second child to first child (temp double)
+0:7          'r01' (temp double)
+0:7          uint64BitsToDouble (temp double)
+0:7            Construct uvec2 (temp 2-component vector of uint)
+0:7              'inU1a' (in uint)
+0:7              'inU1b' (in uint)
+0:9      Branch: Return with expression
+0:9        Constant:
+0:9          0.000000
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: PixelShaderFunction(d1;d1;d1;vd2;vd3;vd4;u1;u1; (global float)
+0:5    Function Parameters: 
+0:5      'inDV1a' (in double)
+0:5      'inDV1b' (in double)
+0:5      'inDV1c' (in double)
+0:5      'inDV2' (in 2-component vector of double)
+0:5      'inDV3' (in 3-component vector of double)
+0:5      'inDV4' (in 4-component vector of double)
+0:5      'inU1a' (in uint)
+0:5      'inU1b' (in uint)
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child (temp double)
+0:6          'r00' (temp double)
+0:6          fma (global double)
+0:6            'inDV1a' (in double)
+0:6            'inDV1b' (in double)
+0:6            'inDV1c' (in double)
+0:7      Sequence
+0:7        move second child to first child (temp double)
+0:7          'r01' (temp double)
+0:7          uint64BitsToDouble (temp double)
+0:7            Construct uvec2 (temp 2-component vector of uint)
+0:7              'inU1a' (in uint)
+0:7              'inU1b' (in uint)
+0:9      Branch: Return with expression
+0:9        Constant:
+0:9          0.000000
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 30
+
+                              Capability Shader
+                              Capability Float64
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 10 12 14 20 22
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "PixelShaderFunction"
+                              Name 8  "r00"
+                              Name 10  "inDV1a"
+                              Name 12  "inDV1b"
+                              Name 14  "inDV1c"
+                              Name 17  "r01"
+                              Name 20  "inU1a"
+                              Name 22  "inU1b"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 64
+               7:             TypePointer Function 6(float)
+               9:             TypePointer Input 6(float)
+      10(inDV1a):      9(ptr) Variable Input
+      12(inDV1b):      9(ptr) Variable Input
+      14(inDV1c):      9(ptr) Variable Input
+              18:             TypeInt 32 0
+              19:             TypePointer Input 18(int)
+       20(inU1a):     19(ptr) Variable Input
+       22(inU1b):     19(ptr) Variable Input
+              24:             TypeVector 18(int) 2
+              27:             TypeFloat 32
+              28:   27(float) Constant 0
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+          8(r00):      7(ptr) Variable Function
+         17(r01):      7(ptr) Variable Function
+              11:    6(float) Load 10(inDV1a)
+              13:    6(float) Load 12(inDV1b)
+              15:    6(float) Load 14(inDV1c)
+              16:    6(float) ExtInst 1(GLSL.std.450) 50(Fma) 11 13 15
+                              Store 8(r00) 16
+              21:     18(int) Load 20(inU1a)
+              23:     18(int) Load 22(inU1b)
+              25:   24(ivec2) CompositeConstruct 21 23
+              26:    6(float) Bitcast 25
+                              Store 17(r01) 26
+                              ReturnValue 28
+                              FunctionEnd
index 1c22b25..f1b6411 100644 (file)
@@ -2,7 +2,7 @@ hlsl.intrinsics.evalfns.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:11  Function Definition: main(f1;vf2;vf3;vf4;vi2; (temp void)
+0:11  Function Definition: main(f1;vf2;vf3;vf4;vi2; (global void)
 0:3    Function Parameters: 
 0:3      'inF1' (in float)
 0:3      'inF2' (in 2-component vector of float)
@@ -52,7 +52,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:11  Function Definition: main(f1;vf2;vf3;vf4;vi2; (temp void)
+0:11  Function Definition: main(f1;vf2;vf3;vf4;vi2; (global void)
 0:3    Function Parameters: 
 0:3      'inF1' (in float)
 0:3      'inF2' (in 2-component vector of float)
index a4930ec..7340531 100644 (file)
@@ -9,7 +9,7 @@ ERROR: 4 compilation errors.  No code generated.
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:8  Function Definition: PixelShaderFunction(f1; (temp float)
+0:8  Function Definition: PixelShaderFunctionS(f1; (global float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:?     Sequence
@@ -19,14 +19,14 @@ ERROR: node is still EOpNull!
 0:5      Branch: Return with expression
 0:5        Constant:
 0:5          0.000000
-0:14  Function Definition: PixelShaderFunction(vf1; (temp 1-component vector of float)
+0:14  Function Definition: PixelShaderFunction1(vf1; (global 1-component vector of float)
 0:9    Function Parameters: 
 0:9      'inF0' (in 1-component vector of float)
 0:?     Sequence
 0:11      Branch: Return with expression
 0:11        Constant:
 0:11          0.000000
-0:21  Function Definition: PixelShaderFunction(vf2; (temp 2-component vector of float)
+0:21  Function Definition: PixelShaderFunction2(vf2; (global 2-component vector of float)
 0:15    Function Parameters: 
 0:15      'inF0' (in 2-component vector of float)
 0:?     Sequence
@@ -37,7 +37,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:28  Function Definition: PixelShaderFunction(vf3; (temp 3-component vector of float)
+0:28  Function Definition: PixelShaderFunction3(vf3; (global 3-component vector of float)
 0:22    Function Parameters: 
 0:22      'inF0' (in 3-component vector of float)
 0:?     Sequence
@@ -49,7 +49,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:35  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:35  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:29    Function Parameters: 
 0:29      'inF0' (in 4-component vector of float)
 0:?     Sequence
@@ -71,7 +71,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:8  Function Definition: PixelShaderFunction(f1; (temp float)
+0:8  Function Definition: PixelShaderFunctionS(f1; (global float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:?     Sequence
@@ -81,14 +81,14 @@ ERROR: node is still EOpNull!
 0:5      Branch: Return with expression
 0:5        Constant:
 0:5          0.000000
-0:14  Function Definition: PixelShaderFunction(vf1; (temp 1-component vector of float)
+0:14  Function Definition: PixelShaderFunction1(vf1; (global 1-component vector of float)
 0:9    Function Parameters: 
 0:9      'inF0' (in 1-component vector of float)
 0:?     Sequence
 0:11      Branch: Return with expression
 0:11        Constant:
 0:11          0.000000
-0:21  Function Definition: PixelShaderFunction(vf2; (temp 2-component vector of float)
+0:21  Function Definition: PixelShaderFunction2(vf2; (global 2-component vector of float)
 0:15    Function Parameters: 
 0:15      'inF0' (in 2-component vector of float)
 0:?     Sequence
@@ -99,7 +99,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:28  Function Definition: PixelShaderFunction(vf3; (temp 3-component vector of float)
+0:28  Function Definition: PixelShaderFunction3(vf3; (global 3-component vector of float)
 0:22    Function Parameters: 
 0:22      'inF0' (in 3-component vector of float)
 0:?     Sequence
@@ -111,7 +111,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:35  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:35  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:29    Function Parameters: 
 0:29      'inF0' (in 4-component vector of float)
 0:?     Sequence
index c280bbd..f6c4147 100644 (file)
@@ -2,7 +2,7 @@ hlsl.intrinsics.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:87  Function Definition: PixelShaderFunction(f1;f1;f1;u1;u1; (temp float)
+0:88  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; (global float)
 0:17    Function Parameters: 
 0:17      'inF0' (in float)
 0:17      'inF1' (in float)
@@ -10,33 +10,69 @@ gl_FragCoord origin is upper left
 0:17      'inU0' (in uint)
 0:17      'inU1' (in uint)
 0:?     Sequence
-0:20      all (global bool)
-0:20        'inF0' (in float)
-0:21      Absolute value (global float)
-0:21        'inF0' (in float)
-0:22      arc cosine (global float)
-0:22        'inF0' (in float)
-0:23      any (global bool)
-0:23        'inF0' (in float)
-0:24      arc sine (global float)
-0:24        'inF0' (in float)
-0:25      floatBitsToInt (global int)
-0:25        'inF0' (in float)
-0:26      floatBitsToUint (global uint)
-0:26        'inF0' (in float)
-0:27      intBitsToFloat (global float)
-0:27        'inU0' (in uint)
-0:29      arc tangent (global float)
-0:29        'inF0' (in float)
-0:30      arc tangent (global float)
-0:30        'inF0' (in float)
-0:30        'inF1' (in float)
-0:31      Ceiling (global float)
-0:31        'inF0' (in float)
-0:32      clamp (global float)
-0:32        'inF0' (in float)
-0:32        'inF1' (in float)
-0:32        'inF2' (in float)
+0:20      Sequence
+0:20        move second child to first child (temp bool)
+0:20          'r000' (temp bool)
+0:20          all (global bool)
+0:20            'inF0' (in float)
+0:21      Sequence
+0:21        move second child to first child (temp float)
+0:21          'r001' (temp float)
+0:21          Absolute value (global float)
+0:21            'inF0' (in float)
+0:22      Sequence
+0:22        move second child to first child (temp float)
+0:22          'r002' (temp float)
+0:22          arc cosine (global float)
+0:22            'inF0' (in float)
+0:23      Sequence
+0:23        move second child to first child (temp bool)
+0:23          'r003' (temp bool)
+0:23          any (global bool)
+0:23            'inF0' (in float)
+0:24      Sequence
+0:24        move second child to first child (temp float)
+0:24          'r004' (temp float)
+0:24          arc sine (global float)
+0:24            'inF0' (in float)
+0:25      Sequence
+0:25        move second child to first child (temp int)
+0:25          'r005' (temp int)
+0:25          floatBitsToInt (global int)
+0:25            'inF0' (in float)
+0:26      Sequence
+0:26        move second child to first child (temp uint)
+0:26          'r006' (temp uint)
+0:26          floatBitsToUint (global uint)
+0:26            'inF0' (in float)
+0:27      Sequence
+0:27        move second child to first child (temp float)
+0:27          'r007' (temp float)
+0:27          intBitsToFloat (global float)
+0:27            'inU0' (in uint)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'r009' (temp float)
+0:29          arc tangent (global float)
+0:29            'inF0' (in float)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'r010' (temp float)
+0:30          arc tangent (global float)
+0:30            'inF0' (in float)
+0:30            'inF1' (in float)
+0:31      Sequence
+0:31        move second child to first child (temp float)
+0:31          'r011' (temp float)
+0:31          Ceiling (global float)
+0:31            'inF0' (in float)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'r012' (temp float)
+0:32          clamp (global float)
+0:32            'inF0' (in float)
+0:32            'inF1' (in float)
+0:32            'inF2' (in float)
 0:33      Test condition and select (temp void)
 0:33        Condition
 0:33        Compare Less Than (temp bool)
@@ -45,1044 +81,2051 @@ gl_FragCoord origin is upper left
 0:33            0.000000
 0:33        true case
 0:33        Branch: Kill
-0:34      cosine (global float)
-0:34        'inF0' (in float)
-0:35      hyp. cosine (global float)
-0:35        'inF0' (in float)
-0:36      bitCount (global uint)
-0:36        Constant:
-0:36          7 (const uint)
-0:37      dPdx (global float)
-0:37        'inF0' (in float)
-0:38      dPdxCoarse (global float)
-0:38        'inF0' (in float)
-0:39      dPdxFine (global float)
-0:39        'inF0' (in float)
-0:40      dPdy (global float)
-0:40        'inF0' (in float)
-0:41      dPdyCoarse (global float)
-0:41        'inF0' (in float)
-0:42      dPdyFine (global float)
-0:42        'inF0' (in float)
-0:43      degrees (global float)
-0:43        'inF0' (in float)
-0:47      exp (global float)
-0:47        'inF0' (in float)
-0:48      exp2 (global float)
-0:48        'inF0' (in float)
-0:49      findMSB (global int)
-0:49        Constant:
-0:49          7 (const int)
-0:50      findLSB (global int)
-0:50        Constant:
-0:50          7 (const int)
-0:51      Floor (global float)
-0:51        'inF0' (in float)
-0:53      mod (global float)
-0:53        'inF0' (in float)
-0:53        'inF1' (in float)
-0:54      Fraction (global float)
-0:54        'inF0' (in float)
-0:55      frexp (global float)
-0:55        'inF0' (in float)
-0:55        'inF1' (in float)
-0:56      fwidth (global float)
-0:56        'inF0' (in float)
-0:57      isinf (global bool)
-0:57        'inF0' (in float)
-0:58      isnan (global bool)
-0:58        'inF0' (in float)
-0:59      ldexp (global float)
-0:59        'inF0' (in float)
-0:59        'inF1' (in float)
-0:60      log (global float)
-0:60        'inF0' (in float)
-0:61      component-wise multiply (temp float)
-0:61        log2 (temp float)
-0:61          'inF0' (in float)
-0:61        Constant:
-0:61          0.301030
-0:62      log2 (global float)
-0:62        'inF0' (in float)
-0:63      max (global float)
-0:63        'inF0' (in float)
-0:63        'inF1' (in float)
-0:64      min (global float)
-0:64        'inF0' (in float)
-0:64        'inF1' (in float)
-0:65      pow (global float)
-0:65        'inF0' (in float)
-0:65        'inF1' (in float)
-0:66      radians (global float)
-0:66        'inF0' (in float)
-0:67      divide (temp float)
-0:67        Constant:
-0:67          1.000000
-0:67        'inF0' (in float)
-0:68      bitFieldReverse (global uint)
-0:68        Constant:
-0:68          2 (const uint)
-0:69      roundEven (global float)
-0:69        'inF0' (in float)
-0:70      inverse sqrt (global float)
-0:70        'inF0' (in float)
-0:71      clamp (temp float)
-0:71        'inF0' (in float)
-0:71        Constant:
-0:71          0.000000
-0:71        Constant:
-0:71          1.000000
-0:72      Sign (global float)
-0:72        'inF0' (in float)
-0:73      sine (global float)
-0:73        'inF0' (in float)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'r014' (temp float)
+0:34          cosine (global float)
+0:34            'inF0' (in float)
+0:35      Sequence
+0:35        move second child to first child (temp float)
+0:35          'r015' (temp float)
+0:35          hyp. cosine (global float)
+0:35            'inF0' (in float)
+0:36      Sequence
+0:36        move second child to first child (temp uint)
+0:36          'r016' (temp uint)
+0:36          bitCount (global uint)
+0:36            Constant:
+0:36              7 (const uint)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'r017' (temp float)
+0:37          dPdx (global float)
+0:37            'inF0' (in float)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'r018' (temp float)
+0:38          dPdxCoarse (global float)
+0:38            'inF0' (in float)
+0:39      Sequence
+0:39        move second child to first child (temp float)
+0:39          'r019' (temp float)
+0:39          dPdxFine (global float)
+0:39            'inF0' (in float)
+0:40      Sequence
+0:40        move second child to first child (temp float)
+0:40          'r020' (temp float)
+0:40          dPdy (global float)
+0:40            'inF0' (in float)
+0:41      Sequence
+0:41        move second child to first child (temp float)
+0:41          'r021' (temp float)
+0:41          dPdyCoarse (global float)
+0:41            'inF0' (in float)
+0:42      Sequence
+0:42        move second child to first child (temp float)
+0:42          'r022' (temp float)
+0:42          dPdyFine (global float)
+0:42            'inF0' (in float)
+0:43      Sequence
+0:43        move second child to first child (temp float)
+0:43          'r023' (temp float)
+0:43          degrees (global float)
+0:43            'inF0' (in float)
+0:47      Sequence
+0:47        move second child to first child (temp float)
+0:47          'r027' (temp float)
+0:47          exp (global float)
+0:47            'inF0' (in float)
+0:48      Sequence
+0:48        move second child to first child (temp float)
+0:48          'r028' (temp float)
+0:48          exp2 (global float)
+0:48            'inF0' (in float)
+0:49      Sequence
+0:49        move second child to first child (temp uint)
+0:49          'r029' (temp uint)
+0:49          Convert int to uint (temp uint)
+0:49            findMSB (global int)
+0:49              Constant:
+0:49                7 (const int)
+0:50      Sequence
+0:50        move second child to first child (temp uint)
+0:50          'r030' (temp uint)
+0:50          Convert int to uint (temp uint)
+0:50            findLSB (global int)
+0:50              Constant:
+0:50                7 (const int)
+0:51      Sequence
+0:51        move second child to first child (temp float)
+0:51          'r031' (temp float)
+0:51          Floor (global float)
+0:51            'inF0' (in float)
+0:53      Sequence
+0:53        move second child to first child (temp float)
+0:53          'r033' (temp float)
+0:53          mod (global float)
+0:53            'inF0' (in float)
+0:53            'inF1' (in float)
+0:54      Sequence
+0:54        move second child to first child (temp float)
+0:54          'r034' (temp float)
+0:54          Fraction (global float)
+0:54            'inF0' (in float)
+0:55      Sequence
+0:55        move second child to first child (temp float)
+0:55          'r035' (temp float)
+0:55          frexp (global 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 (global 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 (global bool)
+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 (global 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 (global float)
+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 (global 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 (global float)
+0:61            'inF0' (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:63      Sequence
+0:63        move second child to first child (temp float)
+0:63          'r042' (temp float)
+0:63          log2 (global float)
+0:63            'inF0' (in float)
+0:64      Sequence
+0:64        move second child to first child (temp float)
+0:64          'r043' (temp float)
+0:64          max (global 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 (global 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 (global 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 (global float)
+0:67            'inF0' (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            'inF0' (in float)
+0:69      Sequence
+0:69        move second child to first child (temp uint)
+0:69          'r048' (temp uint)
+0:69          bitFieldReverse (global uint)
+0:69            Constant:
+0:69              2 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp float)
+0:70          'r049' (temp float)
+0:70          roundEven (global float)
+0:70            'inF0' (in float)
+0:71      Sequence
+0:71        move second child to first child (temp float)
+0:71          'r050' (temp float)
+0:71          inverse sqrt (global 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            '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 (global float)
+0:73            'inF0' (in float)
 0:74      Sequence
 0:74        move second child to first child (temp float)
-0:74          'inF1' (in float)
-0:74          sine (temp float)
+0:74          'r053' (temp float)
+0:74          sine (global float)
 0:74            'inF0' (in float)
-0:74        move second child to first child (temp float)
-0:74          'inF2' (in float)
-0:74          cosine (temp float)
-0:74            'inF0' (in float)
-0:75      hyp. sine (global float)
-0:75        'inF0' (in float)
-0:76      smoothstep (global float)
-0:76        'inF0' (in float)
-0:76        'inF1' (in float)
-0:76        'inF2' (in float)
-0:77      sqrt (global float)
-0:77        'inF0' (in float)
-0:78      step (global float)
-0:78        'inF0' (in float)
-0:78        'inF1' (in float)
-0:79      tangent (global float)
-0:79        'inF0' (in float)
-0:80      hyp. tangent (global float)
-0:80        'inF0' (in float)
-0:82      trunc (global float)
-0:82        'inF0' (in float)
-0:84      Branch: Return with expression
-0:84        Constant:
-0:84          0.000000
-0:93  Function Definition: PixelShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float)
-0:88    Function Parameters: 
-0:88      'inF0' (in 1-component vector of float)
-0:88      'inF1' (in 1-component vector of float)
-0:88      'inF2' (in 1-component vector of float)
+0:75      Sequence
+0:75        move second child to first child (temp float)
+0:75          'inF1' (in 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 (global 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 (global 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 (global float)
+0:78            'inF0' (in float)
+0:79      Sequence
+0:79        move second child to first child (temp float)
+0:79          'r058' (temp float)
+0:79          step (global 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 (global float)
+0:80            'inF0' (in float)
+0:81      Sequence
+0:81        move second child to first child (temp float)
+0:81          'r060' (temp float)
+0:81          hyp. tangent (global 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 (global float)
+0:83            'inF0' (in float)
+0:85      Branch: Return with expression
+0:85        Constant:
+0:85          0.000000
+0:94  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; (global 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:?     Sequence
-0:90      Branch: Return with expression
-0:90        Constant:
-0:90          0.000000
-0:172  Function Definition: PixelShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
-0:94    Function Parameters: 
-0:94      'inF0' (in 2-component vector of float)
-0:94      'inF1' (in 2-component vector of float)
-0:94      'inF2' (in 2-component vector of float)
-0:94      'inU0' (in 2-component vector of uint)
-0:94      'inU1' (in 2-component vector of uint)
+0:91      Branch: Return with expression
+0:91        Constant:
+0:91          0.000000
+0:177  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 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:?     Sequence
-0:97      all (global bool)
-0:97        'inF0' (in 2-component vector of float)
-0:98      Absolute value (global 2-component vector of float)
-0:98        'inF0' (in 2-component vector of float)
-0:99      arc cosine (global 2-component vector of float)
-0:99        'inF0' (in 2-component vector of float)
-0:100      any (global bool)
-0:100        'inF0' (in 2-component vector of float)
-0:101      arc sine (global 2-component vector of float)
-0:101        'inF0' (in 2-component vector of float)
-0:102      floatBitsToInt (global 2-component vector of int)
-0:102        'inF0' (in 2-component vector of float)
-0:103      floatBitsToUint (global 2-component vector of uint)
-0:103        'inF0' (in 2-component vector of float)
-0:104      intBitsToFloat (global 2-component vector of float)
-0:104        'inU0' (in 2-component vector of uint)
-0:106      arc tangent (global 2-component vector of float)
-0:106        'inF0' (in 2-component vector of float)
-0:107      arc tangent (global 2-component vector of float)
-0:107        'inF0' (in 2-component vector of float)
-0:107        'inF1' (in 2-component vector of float)
-0:108      Ceiling (global 2-component vector of float)
-0:108        'inF0' (in 2-component vector of float)
-0:109      clamp (global 2-component vector of float)
-0:109        'inF0' (in 2-component vector of float)
-0:109        'inF1' (in 2-component vector of float)
-0:109        'inF2' (in 2-component vector of float)
-0:110      Test condition and select (temp void)
-0:110        Condition
-0:110        any (temp bool)
-0:110          Compare Less Than (temp 2-component vector of bool)
+0:98      Sequence
+0:98        move second child to first child (temp bool)
+0:98          'r000' (temp bool)
+0:98          all (global 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 (global 2-component vector of float)
+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 (global 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 (global bool)
+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 (global 2-component vector of float)
+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 (global 2-component vector of int)
+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 (global 2-component vector of uint)
+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 (global 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 (global 2-component vector of float)
+0:107            'inF0' (in 2-component vector of float)
+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          arc tangent (global 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 (global 2-component vector of float)
+0:109            'inF0' (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 (global 2-component vector of float)
 0:110            'inF0' (in 2-component vector of float)
-0:110            Constant:
-0:110              0.000000
-0:110              0.000000
-0:110        true case
-0:110        Branch: Kill
-0:111      cosine (global 2-component vector of float)
-0:111        'inF0' (in 2-component vector of float)
-0:112      hyp. cosine (global 2-component vector of float)
-0:112        'inF0' (in 2-component vector of float)
-0:?       bitCount (global 2-component vector of uint)
-0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:114      dPdx (global 2-component vector of float)
-0:114        'inF0' (in 2-component vector of float)
-0:115      dPdxCoarse (global 2-component vector of float)
-0:115        'inF0' (in 2-component vector of float)
-0:116      dPdxFine (global 2-component vector of float)
-0:116        'inF0' (in 2-component vector of float)
-0:117      dPdy (global 2-component vector of float)
-0:117        'inF0' (in 2-component vector of float)
-0:118      dPdyCoarse (global 2-component vector of float)
-0:118        'inF0' (in 2-component vector of float)
-0:119      dPdyFine (global 2-component vector of float)
-0:119        'inF0' (in 2-component vector of float)
-0:120      degrees (global 2-component vector of float)
-0:120        'inF0' (in 2-component vector of float)
-0:121      distance (global float)
-0:121        'inF0' (in 2-component vector of float)
-0:121        'inF1' (in 2-component vector of float)
-0:122      dot-product (global float)
-0:122        'inF0' (in 2-component vector of float)
-0:122        'inF1' (in 2-component vector of float)
-0:126      exp (global 2-component vector of float)
-0:126        'inF0' (in 2-component vector of float)
-0:127      exp2 (global 2-component vector of float)
-0:127        'inF0' (in 2-component vector of float)
-0:128      face-forward (global 2-component vector of float)
-0:128        'inF0' (in 2-component vector of float)
-0:128        'inF1' (in 2-component vector of float)
-0:128        'inF2' (in 2-component vector of float)
-0:129      findMSB (global int)
-0:129        Constant:
-0:129          7 (const int)
-0:130      findLSB (global int)
-0:130        Constant:
-0:130          7 (const int)
-0:131      Floor (global 2-component vector of float)
-0:131        'inF0' (in 2-component vector of float)
-0:133      mod (global 2-component vector of float)
-0:133        'inF0' (in 2-component vector of float)
-0:133        'inF1' (in 2-component vector of float)
-0:134      Fraction (global 2-component vector of float)
-0:134        'inF0' (in 2-component vector of float)
-0:135      frexp (global 2-component vector of float)
-0:135        'inF0' (in 2-component vector of float)
-0:135        'inF1' (in 2-component vector of float)
-0:136      fwidth (global 2-component vector of float)
-0:136        'inF0' (in 2-component vector of float)
-0:137      isinf (global 2-component vector of bool)
-0:137        'inF0' (in 2-component vector of float)
-0:138      isnan (global 2-component vector of bool)
-0:138        'inF0' (in 2-component vector of float)
-0:139      ldexp (global 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      length (global float)
-0:140        'inF0' (in 2-component vector of float)
-0:141      log (global 2-component vector of float)
-0:141        'inF0' (in 2-component vector of float)
-0:142      vector-scale (temp 2-component vector of float)
-0:142        log2 (temp 2-component vector of float)
-0:142          'inF0' (in 2-component vector of float)
-0:142        Constant:
-0:142          0.301030
-0:143      log2 (global 2-component vector of float)
-0:143        'inF0' (in 2-component vector of float)
-0:144      max (global 2-component vector of float)
-0:144        'inF0' (in 2-component vector of float)
-0:144        'inF1' (in 2-component vector of float)
-0:145      min (global 2-component vector of float)
-0:145        'inF0' (in 2-component vector of float)
-0:145        'inF1' (in 2-component vector of float)
-0:146      normalize (global 2-component vector of float)
-0:146        'inF0' (in 2-component vector of float)
-0:147      pow (global 2-component vector of float)
-0:147        'inF0' (in 2-component vector of float)
-0:147        'inF1' (in 2-component vector of float)
-0:148      radians (global 2-component vector of float)
-0:148        'inF0' (in 2-component vector of float)
-0:149      divide (temp 2-component vector of float)
-0:149        Constant:
-0:149          1.000000
-0:149        'inF0' (in 2-component vector of float)
-0:150      reflect (global 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      refract (global 2-component vector of float)
-0:151        'inF0' (in 2-component vector of float)
-0:151        'inF1' (in 2-component vector of float)
-0:151        Constant:
-0:151          2.000000
-0:?       bitFieldReverse (global 2-component vector of uint)
-0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:153      roundEven (global 2-component vector of float)
-0:153        'inF0' (in 2-component vector of float)
-0:154      inverse sqrt (global 2-component vector of float)
-0:154        'inF0' (in 2-component vector of float)
-0:155      clamp (temp 2-component vector of float)
-0:155        'inF0' (in 2-component vector of float)
-0:155        Constant:
-0:155          0.000000
-0:155        Constant:
-0:155          1.000000
-0:156      Sign (global 2-component vector of float)
-0:156        'inF0' (in 2-component vector of float)
-0:157      sine (global 2-component vector of float)
-0:157        '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            '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:112      Sequence
+0:112        move second child to first child (temp 2-component vector of float)
+0:112          'r013' (temp 2-component vector of float)
+0:112          cosine (global 2-component vector of float)
+0:112            'inF0' (in 2-component vector of float)
+0:113      Sequence
+0:113        move second child to first child (temp 2-component vector of float)
+0:113          'r015' (temp 2-component vector of float)
+0:113          hyp. cosine (global 2-component vector of float)
+0:113            'inF0' (in 2-component vector of float)
+0:114      Sequence
+0:114        move second child to first child (temp 2-component vector of uint)
+0:114          'r016' (temp 2-component vector of uint)
+0:?           bitCount (global 2-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               3 (const uint)
+0:115      Sequence
+0:115        move second child to first child (temp 2-component vector of float)
+0:115          'r017' (temp 2-component vector of float)
+0:115          dPdx (global 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 float)
+0:116          'r018' (temp 2-component vector of float)
+0:116          dPdxCoarse (global 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          'r019' (temp 2-component vector of float)
+0:117          dPdxFine (global 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          'r020' (temp 2-component vector of float)
+0:118          dPdy (global 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          'r021' (temp 2-component vector of float)
+0:119          dPdyCoarse (global 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          'r022' (temp 2-component vector of float)
+0:120          dPdyFine (global 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          'r023' (temp 2-component vector of float)
+0:121          degrees (global 2-component vector of float)
+0:121            'inF0' (in 2-component vector of float)
+0:125      Sequence
+0:125        move second child to first child (temp float)
+0:125          'r026' (temp float)
+0:125          distance (global float)
+0:125            'inF0' (in 2-component vector of float)
+0:125            'inF1' (in 2-component vector of float)
+0:126      Sequence
+0:126        move second child to first child (temp float)
+0:126          'r027' (temp float)
+0:126          dot-product (global float)
+0:126            'inF0' (in 2-component vector of float)
+0:126            'inF1' (in 2-component vector of float)
+0:130      Sequence
+0:130        move second child to first child (temp 2-component vector of float)
+0:130          'r028' (temp 2-component vector of float)
+0:130          exp (global 2-component vector of float)
+0:130            'inF0' (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          'r029' (temp 2-component vector of float)
+0:131          exp2 (global 2-component vector of float)
+0:131            'inF0' (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          'r030' (temp 2-component vector of float)
+0:132          face-forward (global 2-component vector of float)
+0:132            'inF0' (in 2-component vector of float)
+0:132            'inF1' (in 2-component vector of float)
+0:132            'inF2' (in 2-component vector of float)
+0:133      Sequence
+0:133        move second child to first child (temp 2-component vector of uint)
+0:133          'r031' (temp 2-component vector of uint)
+0:?           findMSB (global 2-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               8 (const uint)
+0:134      Sequence
+0:134        move second child to first child (temp 2-component vector of uint)
+0:134          'r032' (temp 2-component vector of uint)
+0:?           findLSB (global 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 float)
+0:135          'r033' (temp 2-component vector of float)
+0:135          Floor (global 2-component vector of float)
+0:135            'inF0' (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          'r035' (temp 2-component vector of float)
+0:137          mod (global 2-component vector of float)
+0:137            'inF0' (in 2-component vector of float)
+0:137            'inF1' (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          'r036' (temp 2-component vector of float)
+0:138          Fraction (global 2-component vector of float)
+0:138            '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          'r037' (temp 2-component vector of float)
+0:139          frexp (global 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 (global 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 (global 2-component vector of bool)
+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 (global 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 (global 2-component vector of float)
+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 (global 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 (global float)
+0:145            'inF0' (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 (global 2-component vector of 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: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 (global 2-component vector of float)
+0:148            'inF0' (in 2-component vector of float)
+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 (global 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 (global 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 (global 2-component vector of float)
+0:151            'inF0' (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 (global 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 (global 2-component vector of float)
+0:153            'inF0' (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            '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 (global 2-component vector of float)
+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 (global 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:?           bitFieldReverse (global 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          'inF1' (in 2-component vector of float)
-0:158          sine (temp 2-component vector of float)
-0:158            'inF0' (in 2-component vector of float)
-0:158        move second child to first child (temp 2-component vector of float)
-0:158          'inF2' (in 2-component vector of float)
-0:158          cosine (temp 2-component vector of float)
+0:158          'r055' (temp 2-component vector of float)
+0:158          roundEven (global 2-component vector of float)
 0:158            'inF0' (in 2-component vector of float)
-0:159      hyp. sine (global 2-component vector of float)
-0:159        'inF0' (in 2-component vector of float)
-0:160      smoothstep (global 2-component vector of float)
-0:160        'inF0' (in 2-component vector of float)
-0:160        'inF1' (in 2-component vector of float)
-0:160        'inF2' (in 2-component vector of float)
-0:161      sqrt (global 2-component vector of float)
-0:161        'inF0' (in 2-component vector of float)
-0:162      step (global 2-component vector of float)
-0:162        'inF0' (in 2-component vector of float)
-0:162        'inF1' (in 2-component vector of float)
-0:163      tangent (global 2-component vector of float)
-0:163        'inF0' (in 2-component vector of float)
-0:164      hyp. tangent (global 2-component vector of float)
-0:164        'inF0' (in 2-component vector of float)
-0:166      trunc (global 2-component vector of float)
-0:166        'inF0' (in 2-component vector of float)
-0:169      Branch: Return with expression
+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 (global 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            '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 (global 2-component vector of float)
+0:161            'inF0' (in 2-component vector of float)
+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 (global 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          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 (global 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 (global 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 (global 2-component vector of float)
+0:166            'inF0' (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 (global 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 (global 2-component vector of float)
+0:168            'inF0' (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 (global 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 (global 2-component vector of float)
+0:171            'inF0' (in 2-component vector of float)
+0:174      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:252  Function Definition: PixelShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
-0:173    Function Parameters: 
-0:173      'inF0' (in 3-component vector of float)
-0:173      'inF1' (in 3-component vector of float)
-0:173      'inF2' (in 3-component vector of float)
-0:173      'inU0' (in 3-component vector of uint)
-0:173      'inU1' (in 3-component vector of uint)
+0:258  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 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:?     Sequence
-0:176      all (global bool)
-0:176        'inF0' (in 3-component vector of float)
-0:177      Absolute value (global 3-component vector of float)
-0:177        'inF0' (in 3-component vector of float)
-0:178      arc cosine (global 3-component vector of float)
-0:178        'inF0' (in 3-component vector of float)
-0:179      any (global bool)
-0:179        'inF0' (in 3-component vector of float)
-0:180      arc sine (global 3-component vector of float)
-0:180        'inF0' (in 3-component vector of float)
-0:181      floatBitsToInt (global 3-component vector of int)
-0:181        'inF0' (in 3-component vector of float)
-0:182      floatBitsToUint (global 3-component vector of uint)
-0:182        'inF0' (in 3-component vector of float)
-0:183      intBitsToFloat (global 3-component vector of float)
-0:183        'inU0' (in 3-component vector of uint)
-0:185      arc tangent (global 3-component vector of float)
-0:185        'inF0' (in 3-component vector of float)
-0:186      arc tangent (global 3-component vector of float)
-0:186        'inF0' (in 3-component vector of float)
-0:186        'inF1' (in 3-component vector of float)
-0:187      Ceiling (global 3-component vector of float)
-0:187        'inF0' (in 3-component vector of float)
-0:188      clamp (global 3-component vector of float)
-0:188        'inF0' (in 3-component vector of float)
-0:188        'inF1' (in 3-component vector of float)
-0:188        'inF2' (in 3-component vector of float)
-0:189      Test condition and select (temp void)
-0:189        Condition
-0:189        any (temp bool)
-0:189          Compare Less Than (temp 3-component vector of bool)
-0:189            'inF0' (in 3-component vector of float)
-0:189            Constant:
-0:189              0.000000
-0:189              0.000000
-0:189              0.000000
-0:189        true case
-0:189        Branch: Kill
-0:190      cosine (global 3-component vector of float)
-0:190        'inF0' (in 3-component vector of float)
-0:191      hyp. cosine (global 3-component vector of float)
-0:191        'inF0' (in 3-component vector of float)
-0:?       bitCount (global 3-component vector of uint)
-0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:193      cross-product (global 3-component vector of float)
-0:193        'inF0' (in 3-component vector of float)
-0:193        'inF1' (in 3-component vector of float)
-0:194      dPdx (global 3-component vector of float)
-0:194        'inF0' (in 3-component vector of float)
-0:195      dPdxCoarse (global 3-component vector of float)
-0:195        'inF0' (in 3-component vector of float)
-0:196      dPdxFine (global 3-component vector of float)
-0:196        'inF0' (in 3-component vector of float)
-0:197      dPdy (global 3-component vector of float)
-0:197        'inF0' (in 3-component vector of float)
-0:198      dPdyCoarse (global 3-component vector of float)
-0:198        'inF0' (in 3-component vector of float)
-0:199      dPdyFine (global 3-component vector of float)
-0:199        'inF0' (in 3-component vector of float)
-0:200      degrees (global 3-component vector of float)
-0:200        'inF0' (in 3-component vector of float)
-0:201      distance (global float)
-0:201        'inF0' (in 3-component vector of float)
-0:201        'inF1' (in 3-component vector of float)
-0:202      dot-product (global float)
-0:202        'inF0' (in 3-component vector of float)
-0:202        'inF1' (in 3-component vector of float)
-0:206      exp (global 3-component vector of float)
-0:206        'inF0' (in 3-component vector of float)
-0:207      exp2 (global 3-component vector of float)
-0:207        'inF0' (in 3-component vector of float)
-0:208      face-forward (global 3-component vector of float)
-0:208        'inF0' (in 3-component vector of float)
-0:208        'inF1' (in 3-component vector of float)
-0:208        'inF2' (in 3-component vector of float)
-0:209      findMSB (global int)
-0:209        Constant:
-0:209          7 (const int)
-0:210      findLSB (global int)
-0:210        Constant:
-0:210          7 (const int)
-0:211      Floor (global 3-component vector of float)
-0:211        'inF0' (in 3-component vector of float)
-0:213      mod (global 3-component vector of float)
-0:213        'inF0' (in 3-component vector of float)
-0:213        'inF1' (in 3-component vector of float)
-0:214      Fraction (global 3-component vector of float)
-0:214        'inF0' (in 3-component vector of float)
-0:215      frexp (global 3-component vector of float)
-0:215        'inF0' (in 3-component vector of float)
-0:215        'inF1' (in 3-component vector of float)
-0:216      fwidth (global 3-component vector of float)
-0:216        'inF0' (in 3-component vector of float)
-0:217      isinf (global 3-component vector of bool)
-0:217        'inF0' (in 3-component vector of float)
-0:218      isnan (global 3-component vector of bool)
-0:218        'inF0' (in 3-component vector of float)
-0:219      ldexp (global 3-component vector of float)
-0:219        'inF0' (in 3-component vector of float)
-0:219        'inF1' (in 3-component vector of float)
-0:220      length (global float)
-0:220        'inF0' (in 3-component vector of float)
-0:221      log (global 3-component vector of float)
-0:221        'inF0' (in 3-component vector of float)
-0:222      vector-scale (temp 3-component vector of float)
-0:222        log2 (temp 3-component vector of float)
-0:222          'inF0' (in 3-component vector of float)
-0:222        Constant:
-0:222          0.301030
-0:223      log2 (global 3-component vector of float)
-0:223        'inF0' (in 3-component vector of float)
-0:224      max (global 3-component vector of float)
-0:224        'inF0' (in 3-component vector of float)
-0:224        'inF1' (in 3-component vector of float)
-0:225      min (global 3-component vector of float)
-0:225        'inF0' (in 3-component vector of float)
-0:225        'inF1' (in 3-component vector of float)
-0:226      normalize (global 3-component vector of float)
-0:226        'inF0' (in 3-component vector of float)
-0:227      pow (global 3-component vector of float)
-0:227        'inF0' (in 3-component vector of float)
-0:227        'inF1' (in 3-component vector of float)
-0:228      radians (global 3-component vector of float)
-0:228        'inF0' (in 3-component vector of float)
-0:229      divide (temp 3-component vector of float)
-0:229        Constant:
-0:229          1.000000
-0:229        'inF0' (in 3-component vector of float)
-0:230      reflect (global 3-component vector of float)
-0:230        'inF0' (in 3-component vector of float)
-0:230        'inF1' (in 3-component vector of float)
-0:231      refract (global 3-component vector of float)
-0:231        'inF0' (in 3-component vector of float)
-0:231        'inF1' (in 3-component vector of float)
-0:231        Constant:
-0:231          2.000000
-0:?       bitFieldReverse (global 3-component vector of uint)
-0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:233      roundEven (global 3-component vector of float)
-0:233        'inF0' (in 3-component vector of float)
-0:234      inverse sqrt (global 3-component vector of float)
-0:234        'inF0' (in 3-component vector of float)
-0:235      clamp (temp 3-component vector of float)
-0:235        'inF0' (in 3-component vector of float)
-0:235        Constant:
-0:235          0.000000
-0:235        Constant:
-0:235          1.000000
-0:236      Sign (global 3-component vector of float)
-0:236        'inF0' (in 3-component vector of float)
-0:237      sine (global 3-component vector of float)
-0:237        'inF0' (in 3-component vector of float)
+0:181      Sequence
+0:181        move second child to first child (temp bool)
+0:181          'r000' (temp bool)
+0:181          all (global 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 (global 3-component vector of float)
+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 (global 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 (global bool)
+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 (global 3-component vector of float)
+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 (global 3-component vector of int)
+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 (global 3-component vector of uint)
+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 (global 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 (global 3-component vector of float)
+0:190            'inF0' (in 3-component vector of float)
+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          arc tangent (global 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 (global 3-component vector of float)
+0:192            'inF0' (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 (global 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            '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:195      Sequence
+0:195        move second child to first child (temp 3-component vector of float)
+0:195          'r013' (temp 3-component vector of float)
+0:195          cosine (global 3-component vector of float)
+0:195            'inF0' (in 3-component vector of float)
+0:196      Sequence
+0:196        move second child to first child (temp 3-component vector of float)
+0:196          'r014' (temp 3-component vector of float)
+0:196          hyp. cosine (global 3-component vector of float)
+0:196            'inF0' (in 3-component vector of float)
+0:197      Sequence
+0:197        move second child to first child (temp 3-component vector of uint)
+0:197          'r015' (temp 3-component vector of uint)
+0:?           bitCount (global 3-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               3 (const uint)
+0:?               5 (const uint)
+0:198      Sequence
+0:198        move second child to first child (temp 3-component vector of float)
+0:198          'r016' (temp 3-component vector of float)
+0:198          cross-product (global 3-component vector of float)
+0:198            'inF0' (in 3-component vector of float)
+0:198            'inF1' (in 3-component vector of float)
+0:199      Sequence
+0:199        move second child to first child (temp 3-component vector of float)
+0:199          'r017' (temp 3-component vector of float)
+0:199          dPdx (global 3-component vector of float)
+0:199            'inF0' (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          'r018' (temp 3-component vector of float)
+0:200          dPdxCoarse (global 3-component vector of float)
+0:200            'inF0' (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          'r019' (temp 3-component vector of float)
+0:201          dPdxFine (global 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          'r020' (temp 3-component vector of float)
+0:202          dPdy (global 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          'r021' (temp 3-component vector of float)
+0:203          dPdyCoarse (global 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          'r022' (temp 3-component vector of float)
+0:204          dPdyFine (global 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          'r023' (temp 3-component vector of float)
+0:205          degrees (global 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 float)
+0:206          'r024' (temp float)
+0:206          distance (global float)
+0:206            'inF0' (in 3-component vector of float)
+0:206            'inF1' (in 3-component vector of float)
+0:207      Sequence
+0:207        move second child to first child (temp float)
+0:207          'r025' (temp float)
+0:207          dot-product (global float)
+0:207            'inF0' (in 3-component vector of float)
+0:207            'inF1' (in 3-component vector of float)
+0:211      Sequence
+0:211        move second child to first child (temp 3-component vector of float)
+0:211          'r029' (temp 3-component vector of float)
+0:211          exp (global 3-component vector of float)
+0:211            'inF0' (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          'r030' (temp 3-component vector of float)
+0:212          exp2 (global 3-component vector of float)
+0:212            'inF0' (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          'r031' (temp 3-component vector of float)
+0:213          face-forward (global 3-component vector of float)
+0:213            'inF0' (in 3-component vector of float)
+0:213            'inF1' (in 3-component vector of float)
+0:213            'inF2' (in 3-component vector of float)
+0:214      Sequence
+0:214        move second child to first child (temp 3-component vector of uint)
+0:214          'r032' (temp 3-component vector of uint)
+0:?           findMSB (global 3-component vector of uint)
+0:?             Constant:
+0:?               2 (const uint)
+0:?               3 (const uint)
+0:?               4 (const uint)
+0:215      Sequence
+0:215        move second child to first child (temp 3-component vector of uint)
+0:215          'r033' (temp 3-component vector of uint)
+0:?           findLSB (global 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 float)
+0:216          'r034' (temp 3-component vector of float)
+0:216          Floor (global 3-component vector of float)
+0:216            'inF0' (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          'r036' (temp 3-component vector of float)
+0:218          mod (global 3-component vector of float)
+0:218            'inF0' (in 3-component vector of float)
+0:218            'inF1' (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          'r037' (temp 3-component vector of float)
+0:219          Fraction (global 3-component vector of float)
+0:219            '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          'r038' (temp 3-component vector of float)
+0:220          frexp (global 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 (global 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 (global 3-component vector of bool)
+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 (global 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 (global 3-component vector of float)
+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 (global 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 float)
+0:226          'r043' (temp float)
+0:226          length (global float)
+0:226            'inF0' (in 3-component vector of float)
+0:227      Sequence
+0:227        move second child to first child (temp 3-component vector of float)
+0:227          'r044' (temp 3-component vector of float)
+0:227          log (global 3-component vector of float)
+0:227            'inF0' (in 3-component vector of float)
+0:228      Sequence
+0:228        move second child to first child (temp 3-component vector of float)
+0:228          'r045' (temp 3-component vector of float)
+0:228          vector-scale (temp 3-component vector of float)
+0:228            log2 (temp 3-component vector of float)
+0:228              'inF0' (in 3-component vector of float)
+0:228            Constant:
+0:228              0.301030
+0:229      Sequence
+0:229        move second child to first child (temp 3-component vector of float)
+0:229          'r046' (temp 3-component vector of float)
+0:229          log2 (global 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          'r047' (temp 3-component vector of float)
+0:230          max (global 3-component vector of float)
+0:230            'inF0' (in 3-component vector of float)
+0:230            'inF1' (in 3-component vector of float)
+0:231      Sequence
+0:231        move second child to first child (temp 3-component vector of float)
+0:231          'r048' (temp 3-component vector of float)
+0:231          min (global 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          'r049' (temp 3-component vector of float)
+0:232          normalize (global 3-component vector of float)
+0:232            'inF0' (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          'r050' (temp 3-component vector of float)
+0:233          pow (global 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          'r051' (temp 3-component vector of float)
+0:234          radians (global 3-component vector of float)
+0:234            'inF0' (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          'r052' (temp 3-component vector of float)
+0:235          divide (temp 3-component vector of float)
+0:235            Constant:
+0:235              1.000000
+0:235            'inF0' (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          'r053' (temp 3-component vector of float)
+0:236          reflect (global 3-component vector of float)
+0:236            'inF0' (in 3-component vector of float)
+0:236            'inF1' (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          'r054' (temp 3-component vector of float)
+0:237          refract (global 3-component vector of float)
+0:237            'inF0' (in 3-component vector of float)
+0:237            'inF1' (in 3-component vector of float)
+0:237            Constant:
+0:237              2.000000
 0:238      Sequence
-0:238        move second child to first child (temp 3-component vector of float)
-0:238          'inF1' (in 3-component vector of float)
-0:238          sine (temp 3-component vector of float)
-0:238            'inF0' (in 3-component vector of float)
-0:238        move second child to first child (temp 3-component vector of float)
-0:238          'inF2' (in 3-component vector of float)
-0:238          cosine (temp 3-component vector of float)
-0:238            'inF0' (in 3-component vector of float)
-0:239      hyp. sine (global 3-component vector of float)
-0:239        'inF0' (in 3-component vector of float)
-0:240      smoothstep (global 3-component vector of float)
-0:240        'inF0' (in 3-component vector of float)
-0:240        'inF1' (in 3-component vector of float)
-0:240        'inF2' (in 3-component vector of float)
-0:241      sqrt (global 3-component vector of float)
-0:241        'inF0' (in 3-component vector of float)
-0:242      step (global 3-component vector of float)
-0:242        'inF0' (in 3-component vector of float)
-0:242        'inF1' (in 3-component vector of float)
-0:243      tangent (global 3-component vector of float)
-0:243        'inF0' (in 3-component vector of float)
-0:244      hyp. tangent (global 3-component vector of float)
-0:244        'inF0' (in 3-component vector of float)
-0:246      trunc (global 3-component vector of float)
-0:246        'inF0' (in 3-component vector of float)
-0:249      Branch: Return with expression
+0:238        move second child to first child (temp 3-component vector of uint)
+0:238          'r055' (temp 3-component vector of uint)
+0:?           bitFieldReverse (global 3-component vector of uint)
+0:?             Constant:
+0:?               1 (const uint)
+0:?               2 (const uint)
+0:?               3 (const uint)
+0:239      Sequence
+0:239        move second child to first child (temp 3-component vector of float)
+0:239          'r056' (temp 3-component vector of float)
+0:239          roundEven (global 3-component vector of float)
+0:239            'inF0' (in 3-component vector of float)
+0:240      Sequence
+0:240        move second child to first child (temp 3-component vector of float)
+0:240          'r057' (temp 3-component vector of float)
+0:240          inverse sqrt (global 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          'r058' (temp 3-component vector of float)
+0:241          clamp (temp 3-component vector of float)
+0:241            'inF0' (in 3-component vector of float)
+0:241            Constant:
+0:241              0.000000
+0:241            Constant:
+0:241              1.000000
+0:242      Sequence
+0:242        move second child to first child (temp 3-component vector of float)
+0:242          'r059' (temp 3-component vector of float)
+0:242          Sign (global 3-component vector of float)
+0:242            'inF0' (in 3-component vector of float)
+0:243      Sequence
+0:243        move second child to first child (temp 3-component vector of float)
+0:243          'r060' (temp 3-component vector of float)
+0:243          sine (global 3-component vector of float)
+0:243            'inF0' (in 3-component vector of float)
+0:244      Sequence
+0:244        move second child to first child (temp 3-component vector of float)
+0:244          'inF1' (in 3-component vector of float)
+0:244          sine (temp 3-component vector of float)
+0:244            'inF0' (in 3-component vector of float)
+0:244        move second child to first child (temp 3-component vector of float)
+0:244          'inF2' (in 3-component vector of float)
+0:244          cosine (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          'r061' (temp 3-component vector of float)
+0:245          hyp. sine (global 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          'r062' (temp 3-component vector of float)
+0:246          smoothstep (global 3-component vector of float)
+0:246            'inF0' (in 3-component vector of float)
+0:246            'inF1' (in 3-component vector of float)
+0:246            'inF2' (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          'r063' (temp 3-component vector of float)
+0:247          sqrt (global 3-component vector of float)
+0:247            'inF0' (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          'r064' (temp 3-component vector of float)
+0:248          step (global 3-component vector of float)
+0:248            'inF0' (in 3-component vector of float)
+0:248            'inF1' (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          'r065' (temp 3-component vector of float)
+0:249          tangent (global 3-component vector of float)
+0:249            'inF0' (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          'r066' (temp 3-component vector of float)
+0:250          hyp. tangent (global 3-component vector of float)
+0:250            'inF0' (in 3-component vector of float)
+0:252      Sequence
+0:252        move second child to first child (temp 3-component vector of float)
+0:252          'r067' (temp 3-component vector of float)
+0:252          trunc (global 3-component vector of float)
+0:252            'inF0' (in 3-component vector of float)
+0:255      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:393  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
-0:253    Function Parameters: 
-0:253      'inF0' (in 4-component vector of float)
-0:253      'inF1' (in 4-component vector of float)
-0:253      'inF2' (in 4-component vector of float)
-0:253      'inU0' (in 4-component vector of uint)
-0:253      'inU1' (in 4-component vector of uint)
+0:399  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
+0:259    Function Parameters: 
+0:259      'inF0' (in 4-component vector of float)
+0:259      'inF1' (in 4-component vector of float)
+0:259      'inF2' (in 4-component vector of float)
+0:259      'inU0' (in 4-component vector of uint)
+0:259      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:256      all (global bool)
-0:256        'inF0' (in 4-component vector of float)
-0:257      Absolute value (global 4-component vector of float)
-0:257        'inF0' (in 4-component vector of float)
-0:258      arc cosine (global 4-component vector of float)
-0:258        'inF0' (in 4-component vector of float)
-0:259      any (global bool)
-0:259        'inF0' (in 4-component vector of float)
-0:260      arc sine (global 4-component vector of float)
-0:260        'inF0' (in 4-component vector of float)
-0:261      floatBitsToInt (global 4-component vector of int)
-0:261        'inF0' (in 4-component vector of float)
-0:262      floatBitsToUint (global 4-component vector of uint)
-0:262        'inF0' (in 4-component vector of float)
-0:263      intBitsToFloat (global 4-component vector of float)
-0:263        'inU0' (in 4-component vector of uint)
-0:265      arc tangent (global 4-component vector of float)
-0:265        'inF0' (in 4-component vector of float)
-0:266      arc tangent (global 4-component vector of float)
-0:266        'inF0' (in 4-component vector of float)
-0:266        'inF1' (in 4-component vector of float)
-0:267      Ceiling (global 4-component vector of float)
-0:267        'inF0' (in 4-component vector of float)
-0:268      clamp (global 4-component vector of float)
-0:268        'inF0' (in 4-component vector of float)
-0:268        'inF1' (in 4-component vector of float)
-0:268        'inF2' (in 4-component vector of float)
-0:269      Test condition and select (temp void)
-0:269        Condition
-0:269        any (temp bool)
-0:269          Compare Less Than (temp 4-component vector of bool)
-0:269            'inF0' (in 4-component vector of float)
-0:269            Constant:
-0:269              0.000000
-0:269              0.000000
-0:269              0.000000
-0:269              0.000000
-0:269        true case
-0:269        Branch: Kill
-0:270      cosine (global 4-component vector of float)
-0:270        'inF0' (in 4-component vector of float)
-0:271      hyp. cosine (global 4-component vector of float)
-0:271        'inF0' (in 4-component vector of float)
-0:?       bitCount (global 4-component vector of uint)
-0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:?           2 (const uint)
-0:273      dPdx (global 4-component vector of float)
-0:273        'inF0' (in 4-component vector of float)
-0:274      dPdxCoarse (global 4-component vector of float)
-0:274        'inF0' (in 4-component vector of float)
-0:275      dPdxFine (global 4-component vector of float)
-0:275        'inF0' (in 4-component vector of float)
-0:276      dPdy (global 4-component vector of float)
-0:276        'inF0' (in 4-component vector of float)
-0:277      dPdyCoarse (global 4-component vector of float)
-0:277        'inF0' (in 4-component vector of float)
-0:278      dPdyFine (global 4-component vector of float)
-0:278        'inF0' (in 4-component vector of float)
-0:279      degrees (global 4-component vector of float)
-0:279        'inF0' (in 4-component vector of float)
-0:280      distance (global float)
-0:280        'inF0' (in 4-component vector of float)
-0:280        'inF1' (in 4-component vector of float)
-0:281      dot-product (global float)
-0:281        'inF0' (in 4-component vector of float)
-0:281        'inF1' (in 4-component vector of float)
-0:282      Construct vec4 (temp 4-component vector of float)
-0:282        Constant:
-0:282          1.000000
-0:282        component-wise multiply (temp float)
-0:282          direct index (temp float)
+0:262      Sequence
+0:262        move second child to first child (temp bool)
+0:262          'r000' (temp bool)
+0:262          all (global bool)
+0:262            'inF0' (in 4-component vector of float)
+0:263      Sequence
+0:263        move second child to first child (temp 4-component vector of float)
+0:263          'r001' (temp 4-component vector of float)
+0:263          Absolute value (global 4-component vector of float)
+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          'r002' (temp 4-component vector of float)
+0:264          arc cosine (global 4-component vector of float)
+0:264            'inF0' (in 4-component vector of float)
+0:265      Sequence
+0:265        move second child to first child (temp bool)
+0:265          'r003' (temp bool)
+0:265          any (global bool)
+0:265            'inF0' (in 4-component vector of float)
+0:266      Sequence
+0:266        move second child to first child (temp 4-component vector of float)
+0:266          'r004' (temp 4-component vector of float)
+0:266          arc sine (global 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 int)
+0:267          'r005' (temp 4-component vector of int)
+0:267          floatBitsToInt (global 4-component vector of int)
+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 uint)
+0:268          'r006' (temp 4-component vector of uint)
+0:268          floatBitsToUint (global 4-component vector of uint)
+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 float)
+0:269          'r007' (temp 4-component vector of float)
+0:269          intBitsToFloat (global 4-component vector of float)
+0:269            'inU0' (in 4-component vector of uint)
+0:271      Sequence
+0:271        move second child to first child (temp 4-component vector of float)
+0:271          'r009' (temp 4-component vector of float)
+0:271          arc tangent (global 4-component vector of float)
+0:271            'inF0' (in 4-component vector of float)
+0:272      Sequence
+0:272        move second child to first child (temp 4-component vector of float)
+0:272          'r010' (temp 4-component vector of float)
+0:272          arc tangent (global 4-component vector of float)
+0:272            'inF0' (in 4-component vector of float)
+0:272            'inF1' (in 4-component vector of float)
+0:273      Sequence
+0:273        move second child to first child (temp 4-component vector of float)
+0:273          'r011' (temp 4-component vector of float)
+0:273          Ceiling (global 4-component vector of float)
+0:273            'inF0' (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          'r012' (temp 4-component vector of float)
+0:274          clamp (global 4-component vector of float)
+0:274            'inF0' (in 4-component vector of float)
+0:274            'inF1' (in 4-component vector of float)
+0:274            'inF2' (in 4-component vector of float)
+0:275      Test condition and select (temp void)
+0:275        Condition
+0:275        any (temp bool)
+0:275          Compare Less Than (temp 4-component vector of bool)
+0:275            'inF0' (in 4-component vector of float)
+0:275            Constant:
+0:275              0.000000
+0:275              0.000000
+0:275              0.000000
+0:275              0.000000
+0:275        true case
+0:275        Branch: Kill
+0:276      Sequence
+0:276        move second child to first child (temp 4-component vector of float)
+0:276          'r013' (temp 4-component vector of float)
+0:276          cosine (global 4-component vector of float)
+0:276            'inF0' (in 4-component vector of float)
+0:277      Sequence
+0:277        move second child to first child (temp 4-component vector of float)
+0:277          'r014' (temp 4-component vector of float)
+0:277          hyp. cosine (global 4-component vector of float)
+0:277            'inF0' (in 4-component vector of float)
+0:278      Sequence
+0:278        move second child to first child (temp 4-component vector of uint)
+0:278          'r015' (temp 4-component vector of uint)
+0:?           bitCount (global 4-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               3 (const uint)
+0:?               5 (const uint)
+0:?               2 (const uint)
+0:279      Sequence
+0:279        move second child to first child (temp 4-component vector of float)
+0:279          'r016' (temp 4-component vector of float)
+0:279          dPdx (global 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 float)
+0:280          'r017' (temp 4-component vector of float)
+0:280          dPdxCoarse (global 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 float)
+0:281          'r018' (temp 4-component vector of float)
+0:281          dPdxFine (global 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          'r019' (temp 4-component vector of float)
+0:282          dPdy (global 4-component vector of float)
 0:282            'inF0' (in 4-component vector of float)
-0:282            Constant:
-0:282              1 (const int)
-0:282          direct index (temp float)
-0:282            'inF1' (in 4-component vector of float)
-0:282            Constant:
-0:282              1 (const int)
-0:282        direct index (temp float)
-0:282          'inF0' (in 4-component vector of float)
-0:282          Constant:
-0:282            2 (const int)
-0:282        direct index (temp float)
-0:282          'inF1' (in 4-component vector of float)
-0:282          Constant:
-0:282            3 (const int)
-0:286      exp (global 4-component vector of float)
-0:286        'inF0' (in 4-component vector of float)
-0:287      exp2 (global 4-component vector of float)
-0:287        'inF0' (in 4-component vector of float)
-0:288      face-forward (global 4-component vector of float)
-0:288        'inF0' (in 4-component vector of float)
-0:288        'inF1' (in 4-component vector of float)
-0:288        'inF2' (in 4-component vector of float)
-0:289      findMSB (global int)
-0:289        Constant:
-0:289          7 (const int)
-0:290      findLSB (global int)
-0:290        Constant:
-0:290          7 (const int)
-0:291      Floor (global 4-component vector of float)
-0:291        'inF0' (in 4-component vector of float)
-0:293      mod (global 4-component vector of float)
-0:293        'inF0' (in 4-component vector of float)
-0:293        'inF1' (in 4-component vector of float)
-0:294      Fraction (global 4-component vector of float)
-0:294        'inF0' (in 4-component vector of float)
-0:295      frexp (global 4-component vector of float)
-0:295        'inF0' (in 4-component vector of float)
-0:295        'inF1' (in 4-component vector of float)
-0:296      fwidth (global 4-component vector of float)
-0:296        'inF0' (in 4-component vector of float)
-0:297      isinf (global 4-component vector of bool)
-0:297        'inF0' (in 4-component vector of float)
-0:298      isnan (global 4-component vector of bool)
-0:298        'inF0' (in 4-component vector of float)
-0:299      ldexp (global 4-component vector of float)
-0:299        'inF0' (in 4-component vector of float)
-0:299        'inF1' (in 4-component vector of float)
-0:300      length (global float)
-0:300        'inF0' (in 4-component vector of float)
-0:301      log (global 4-component vector of float)
-0:301        'inF0' (in 4-component vector of float)
-0:302      vector-scale (temp 4-component vector of float)
-0:302        log2 (temp 4-component vector of float)
-0:302          'inF0' (in 4-component vector of float)
-0:302        Constant:
-0:302          0.301030
-0:303      log2 (global 4-component vector of float)
-0:303        'inF0' (in 4-component vector of float)
-0:304      max (global 4-component vector of float)
-0:304        'inF0' (in 4-component vector of float)
-0:304        'inF1' (in 4-component vector of float)
-0:305      min (global 4-component vector of float)
-0:305        'inF0' (in 4-component vector of float)
-0:305        'inF1' (in 4-component vector of float)
-0:306      normalize (global 4-component vector of float)
-0:306        'inF0' (in 4-component vector of float)
-0:307      pow (global 4-component vector of float)
-0:307        'inF0' (in 4-component vector of float)
-0:307        'inF1' (in 4-component vector of float)
-0:308      radians (global 4-component vector of float)
-0:308        'inF0' (in 4-component vector of float)
-0:309      divide (temp 4-component vector of float)
-0:309        Constant:
-0:309          1.000000
-0:309        'inF0' (in 4-component vector of float)
-0:310      reflect (global 4-component vector of float)
-0:310        'inF0' (in 4-component vector of float)
-0:310        'inF1' (in 4-component vector of float)
-0:311      refract (global 4-component vector of float)
-0:311        'inF0' (in 4-component vector of float)
-0:311        'inF1' (in 4-component vector of float)
-0:311        Constant:
-0:311          2.000000
-0:?       bitFieldReverse (global 4-component vector of uint)
-0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:?           4 (const uint)
-0:313      roundEven (global 4-component vector of float)
-0:313        'inF0' (in 4-component vector of float)
-0:314      inverse sqrt (global 4-component vector of float)
-0:314        'inF0' (in 4-component vector of float)
-0:315      clamp (temp 4-component vector of float)
-0:315        'inF0' (in 4-component vector of float)
-0:315        Constant:
-0:315          0.000000
-0:315        Constant:
-0:315          1.000000
-0:316      Sign (global 4-component vector of float)
-0:316        'inF0' (in 4-component vector of float)
-0:317      sine (global 4-component vector of float)
-0:317        '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          'r020' (temp 4-component vector of float)
+0:283          dPdyCoarse (global 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          'r021' (temp 4-component vector of float)
+0:284          dPdyFine (global 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          'r022' (temp 4-component vector of float)
+0:285          degrees (global 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 float)
+0:286          'r023' (temp float)
+0:286          distance (global float)
+0:286            'inF0' (in 4-component vector of float)
+0:286            'inF1' (in 4-component vector of float)
+0:287      Sequence
+0:287        move second child to first child (temp float)
+0:287          'r024' (temp float)
+0:287          dot-product (global float)
+0:287            'inF0' (in 4-component vector of float)
+0:287            'inF1' (in 4-component vector of float)
+0:288      Sequence
+0:288        move second child to first child (temp 4-component vector of float)
+0:288          'r025' (temp 4-component vector of float)
+0:288          Construct vec4 (temp 4-component vector of float)
+0:288            Constant:
+0:288              1.000000
+0:288            component-wise multiply (temp float)
+0:288              direct index (temp float)
+0:288                'inF0' (in 4-component vector of float)
+0:288                Constant:
+0:288                  1 (const int)
+0:288              direct index (temp float)
+0:288                'inF1' (in 4-component vector of float)
+0:288                Constant:
+0:288                  1 (const int)
+0:288            direct index (temp float)
+0:288              'inF0' (in 4-component vector of float)
+0:288              Constant:
+0:288                2 (const int)
+0:288            direct index (temp float)
+0:288              'inF1' (in 4-component vector of float)
+0:288              Constant:
+0:288                3 (const int)
+0:292      Sequence
+0:292        move second child to first child (temp 4-component vector of float)
+0:292          'r029' (temp 4-component vector of float)
+0:292          exp (global 4-component vector of float)
+0:292            'inF0' (in 4-component vector of float)
+0:293      Sequence
+0:293        move second child to first child (temp 4-component vector of float)
+0:293          'r030' (temp 4-component vector of float)
+0:293          exp2 (global 4-component vector of float)
+0:293            'inF0' (in 4-component vector of float)
+0:294      Sequence
+0:294        move second child to first child (temp 4-component vector of float)
+0:294          'r031' (temp 4-component vector of float)
+0:294          face-forward (global 4-component vector of float)
+0:294            'inF0' (in 4-component vector of float)
+0:294            'inF1' (in 4-component vector of float)
+0:294            'inF2' (in 4-component vector of float)
+0:295      Sequence
+0:295        move second child to first child (temp 4-component vector of uint)
+0:295          'r032' (temp 4-component vector of uint)
+0:?           findMSB (global 4-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               8 (const uint)
+0:?               9 (const uint)
+0:?               10 (const uint)
+0:296      Sequence
+0:296        move second child to first child (temp 4-component vector of uint)
+0:296          'r033' (temp 4-component vector of uint)
+0:?           findLSB (global 4-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               8 (const uint)
+0:?               9 (const uint)
+0:?               10 (const uint)
+0:297      Sequence
+0:297        move second child to first child (temp 4-component vector of float)
+0:297          'r034' (temp 4-component vector of float)
+0:297          Floor (global 4-component vector of float)
+0:297            'inF0' (in 4-component vector of float)
+0:299      Sequence
+0:299        move second child to first child (temp 4-component vector of float)
+0:299          'r036' (temp 4-component vector of float)
+0:299          mod (global 4-component vector of float)
+0:299            'inF0' (in 4-component vector of float)
+0:299            '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          'r037' (temp 4-component vector of float)
+0:300          Fraction (global 4-component vector of float)
+0:300            '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          'r038' (temp 4-component vector of float)
+0:301          frexp (global 4-component vector of float)
+0:301            'inF0' (in 4-component vector of float)
+0:301            'inF1' (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          'r039' (temp 4-component vector of float)
+0:302          fwidth (global 4-component vector of float)
+0:302            'inF0' (in 4-component vector of float)
+0:303      Sequence
+0:303        move second child to first child (temp 4-component vector of bool)
+0:303          'r040' (temp 4-component vector of bool)
+0:303          isinf (global 4-component vector of bool)
+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          'r041' (temp 4-component vector of bool)
+0:304          isnan (global 4-component vector of bool)
+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 float)
+0:305          'r042' (temp 4-component vector of float)
+0:305          ldexp (global 4-component vector of float)
+0:305            'inF0' (in 4-component vector of float)
+0:305            'inF1' (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          'r039a' (temp 4-component vector of float)
+0:306          mix (global 4-component vector of float)
+0:306            'inF0' (in 4-component vector of float)
+0:306            'inF1' (in 4-component vector of float)
+0:306            'inF2' (in 4-component vector of float)
+0:307      Sequence
+0:307        move second child to first child (temp float)
+0:307          'r043' (temp float)
+0:307          length (global float)
+0:307            'inF0' (in 4-component vector of float)
+0:308      Sequence
+0:308        move second child to first child (temp 4-component vector of float)
+0:308          'r044' (temp 4-component vector of float)
+0:308          log (global 4-component vector of float)
+0:308            'inF0' (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          'r045' (temp 4-component vector of float)
+0:309          vector-scale (temp 4-component vector of float)
+0:309            log2 (temp 4-component vector of float)
+0:309              'inF0' (in 4-component vector of float)
+0:309            Constant:
+0:309              0.301030
+0:310      Sequence
+0:310        move second child to first child (temp 4-component vector of float)
+0:310          'r046' (temp 4-component vector of float)
+0:310          log2 (global 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          'r047' (temp 4-component vector of float)
+0:311          max (global 4-component vector of float)
+0:311            'inF0' (in 4-component vector of float)
+0:311            'inF1' (in 4-component vector of float)
+0:312      Sequence
+0:312        move second child to first child (temp 4-component vector of float)
+0:312          'r048' (temp 4-component vector of float)
+0:312          min (global 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          'r049' (temp 4-component vector of float)
+0:313          normalize (global 4-component vector of float)
+0:313            'inF0' (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          'r050' (temp 4-component vector of float)
+0:314          pow (global 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          'r051' (temp 4-component vector of float)
+0:315          radians (global 4-component vector of float)
+0:315            'inF0' (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          'r052' (temp 4-component vector of float)
+0:316          divide (temp 4-component vector of float)
+0:316            Constant:
+0:316              1.000000
+0:316            'inF0' (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          'r053' (temp 4-component vector of float)
+0:317          reflect (global 4-component vector of float)
+0:317            'inF0' (in 4-component vector of float)
+0:317            'inF1' (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          'inF1' (in 4-component vector of float)
-0:318          sine (temp 4-component vector of float)
+0:318          'r054' (temp 4-component vector of float)
+0:318          refract (global 4-component vector of float)
 0:318            'inF0' (in 4-component vector of float)
-0:318        move second child to first child (temp 4-component vector of float)
-0:318          'inF2' (in 4-component vector of float)
-0:318          cosine (temp 4-component vector of float)
-0:318            'inF0' (in 4-component vector of float)
-0:319      hyp. sine (global 4-component vector of float)
-0:319        'inF0' (in 4-component vector of float)
-0:320      smoothstep (global 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        'inF2' (in 4-component vector of float)
-0:321      sqrt (global 4-component vector of float)
-0:321        'inF0' (in 4-component vector of float)
-0:322      step (global 4-component vector of float)
-0:322        'inF0' (in 4-component vector of float)
-0:322        'inF1' (in 4-component vector of float)
-0:323      tangent (global 4-component vector of float)
-0:323        'inF0' (in 4-component vector of float)
-0:324      hyp. tangent (global 4-component vector of float)
-0:324        'inF0' (in 4-component vector of float)
-0:326      trunc (global 4-component vector of float)
-0:326        'inF0' (in 4-component vector of float)
-0:329      Branch: Return with expression
+0:318            'inF1' (in 4-component vector of float)
+0:318            Constant:
+0:318              2.000000
+0:319      Sequence
+0:319        move second child to first child (temp 4-component vector of uint)
+0:319          'r055' (temp 4-component vector of uint)
+0:?           bitFieldReverse (global 4-component vector of uint)
+0:?             Constant:
+0:?               1 (const uint)
+0:?               2 (const uint)
+0:?               3 (const uint)
+0:?               4 (const uint)
+0:320      Sequence
+0:320        move second child to first child (temp 4-component vector of float)
+0:320          'r056' (temp 4-component vector of float)
+0:320          roundEven (global 4-component vector of float)
+0:320            'inF0' (in 4-component vector of float)
+0:321      Sequence
+0:321        move second child to first child (temp 4-component vector of float)
+0:321          'r057' (temp 4-component vector of float)
+0:321          inverse sqrt (global 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          'r058' (temp 4-component vector of float)
+0:322          clamp (temp 4-component vector of float)
+0:322            'inF0' (in 4-component vector of float)
+0:322            Constant:
+0:322              0.000000
+0:322            Constant:
+0:322              1.000000
+0:323      Sequence
+0:323        move second child to first child (temp 4-component vector of float)
+0:323          'r059' (temp 4-component vector of float)
+0:323          Sign (global 4-component vector of float)
+0:323            'inF0' (in 4-component vector of float)
+0:324      Sequence
+0:324        move second child to first child (temp 4-component vector of float)
+0:324          'r060' (temp 4-component vector of float)
+0:324          sine (global 4-component vector of float)
+0:324            'inF0' (in 4-component vector of float)
+0:325      Sequence
+0:325        move second child to first child (temp 4-component vector of float)
+0:325          'inF1' (in 4-component vector of float)
+0:325          sine (temp 4-component vector of float)
+0:325            'inF0' (in 4-component vector of float)
+0:325        move second child to first child (temp 4-component vector of float)
+0:325          'inF2' (in 4-component vector of float)
+0:325          cosine (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          'r061' (temp 4-component vector of float)
+0:326          hyp. sine (global 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          'r062' (temp 4-component vector of float)
+0:327          smoothstep (global 4-component vector of float)
+0:327            'inF0' (in 4-component vector of float)
+0:327            'inF1' (in 4-component vector of float)
+0:327            'inF2' (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          'r063' (temp 4-component vector of float)
+0:328          sqrt (global 4-component vector of float)
+0:328            'inF0' (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          'r064' (temp 4-component vector of float)
+0:329          step (global 4-component vector of float)
+0:329            'inF0' (in 4-component vector of float)
+0:329            'inF1' (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          'r065' (temp 4-component vector of float)
+0:330          tangent (global 4-component vector of float)
+0:330            'inF0' (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          'r066' (temp 4-component vector of float)
+0:331          hyp. tangent (global 4-component vector of float)
+0:331            'inF0' (in 4-component vector of float)
+0:333      Sequence
+0:333        move second child to first child (temp 4-component vector of float)
+0:333          'r067' (temp 4-component vector of float)
+0:333          trunc (global 4-component vector of float)
+0:333            'inF0' (in 4-component vector of float)
+0:336      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:402  Function Definition: PixelShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float)
-0:394    Function Parameters: 
-0:394      'inF0' (in 2X2 matrix of float)
-0:394      'inF1' (in 2X2 matrix of float)
-0:394      'inF2' (in 2X2 matrix of float)
+0:408  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 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:?     Sequence
-0:396      all (global bool)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      Absolute value (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      arc cosine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      any (global bool)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      arc sine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      arc tangent (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      arc tangent (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      Ceiling (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      Test condition and select (temp void)
-0:396        Condition
-0:396        any (temp bool)
-0:396          Compare Less Than (temp 2X2 matrix of bool)
-0:396            'inF0' (in 2X2 matrix of float)
-0:396            Constant:
-0:396              0.000000
-0:396              0.000000
-0:396              0.000000
-0:396              0.000000
-0:396        true case
-0:396        Branch: Kill
-0:396      clamp (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396        'inF2' (in 2X2 matrix of float)
-0:396      cosine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      hyp. cosine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdx (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdxCoarse (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdxFine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdy (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdyCoarse (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdyFine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      degrees (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      determinant (global float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      exp (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      exp2 (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      findMSB (global int)
-0:396        Constant:
-0:396          7 (const int)
-0:396      findLSB (global int)
-0:396        Constant:
-0:396          7 (const int)
-0:396      Floor (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      mod (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      Fraction (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      frexp (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      fwidth (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      ldexp (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      log (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      matrix-scale (temp 2X2 matrix of float)
-0:396        log2 (temp 2X2 matrix of float)
-0:396          'inF0' (in 2X2 matrix of float)
-0:396        Constant:
-0:396          0.301030
-0:396      log2 (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      max (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      min (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      pow (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      radians (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      roundEven (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      inverse sqrt (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      clamp (temp 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        Constant:
-0:396          0.000000
-0:396        Constant:
-0:396          1.000000
-0:396      Sign (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      sine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      Sequence
-0:396        move second child to first child (temp 2X2 matrix of float)
-0:396          'inF1' (in 2X2 matrix of float)
-0:396          sine (temp 2X2 matrix of float)
-0:396            'inF0' (in 2X2 matrix of float)
-0:396        move second child to first child (temp 2X2 matrix of float)
-0:396          'inF2' (in 2X2 matrix of float)
-0:396          cosine (temp 2X2 matrix of float)
-0:396            'inF0' (in 2X2 matrix of float)
-0:396      hyp. sine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      smoothstep (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396        'inF2' (in 2X2 matrix of float)
-0:396      sqrt (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      step (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      tangent (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      hyp. tangent (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      transpose (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      trunc (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:399      Branch: Return with expression
+0:402      Sequence
+0:402        move second child to first child (temp bool)
+0:402          'r000' (temp bool)
+0:402          all (global 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 (global 2X2 matrix of float)
+0:402            'inF0' (in 2X2 matrix of float)
+0:402      arc cosine (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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          'r024' (temp 2X2 matrix of float)
+0:402          frexp (global 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          'r025' (temp 2X2 matrix of float)
+0:402          fwidth (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 2X2 matrix of float)
+0:402            'inF0' (in 2X2 matrix of float)
+0:402      transpose (global 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 (global 2X2 matrix of float)
+0:402            'inF0' (in 2X2 matrix of float)
+0:405      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:411  Function Definition: PixelShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float)
-0:403    Function Parameters: 
-0:403      'inF0' (in 3X3 matrix of float)
-0:403      'inF1' (in 3X3 matrix of float)
-0:403      'inF2' (in 3X3 matrix of float)
+0:417  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 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:?     Sequence
-0:405      all (global bool)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      Absolute value (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      arc cosine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      any (global bool)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      arc sine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      arc tangent (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      arc tangent (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      Ceiling (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      Test condition and select (temp void)
-0:405        Condition
-0:405        any (temp bool)
-0:405          Compare Less Than (temp 3X3 matrix of bool)
-0:405            'inF0' (in 3X3 matrix of float)
-0:405            Constant:
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405        true case
-0:405        Branch: Kill
-0:405      clamp (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405        'inF2' (in 3X3 matrix of float)
-0:405      cosine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      hyp. cosine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdx (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdxCoarse (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdxFine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdy (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdyCoarse (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdyFine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      degrees (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      determinant (global float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      exp (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      exp2 (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      findMSB (global int)
-0:405        Constant:
-0:405          7 (const int)
-0:405      findLSB (global int)
-0:405        Constant:
-0:405          7 (const int)
-0:405      Floor (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      mod (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      Fraction (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      frexp (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      fwidth (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      ldexp (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      log (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      matrix-scale (temp 3X3 matrix of float)
-0:405        log2 (temp 3X3 matrix of float)
-0:405          'inF0' (in 3X3 matrix of float)
-0:405        Constant:
-0:405          0.301030
-0:405      log2 (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      max (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      min (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      pow (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      radians (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      roundEven (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      inverse sqrt (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      clamp (temp 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        Constant:
-0:405          0.000000
-0:405        Constant:
-0:405          1.000000
-0:405      Sign (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      sine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      Sequence
-0:405        move second child to first child (temp 3X3 matrix of float)
-0:405          'inF1' (in 3X3 matrix of float)
-0:405          sine (temp 3X3 matrix of float)
-0:405            'inF0' (in 3X3 matrix of float)
-0:405        move second child to first child (temp 3X3 matrix of float)
-0:405          'inF2' (in 3X3 matrix of float)
-0:405          cosine (temp 3X3 matrix of float)
-0:405            'inF0' (in 3X3 matrix of float)
-0:405      hyp. sine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      smoothstep (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405        'inF2' (in 3X3 matrix of float)
-0:405      sqrt (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      step (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      tangent (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      hyp. tangent (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      transpose (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      trunc (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:408      Branch: Return with expression
+0:411      Sequence
+0:411        move second child to first child (temp bool)
+0:411          'r000' (temp bool)
+0:411          all (global 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 (global 3X3 matrix of float)
+0:411            'inF0' (in 3X3 matrix of float)
+0:411      arc cosine (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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          'r024' (temp 3X3 matrix of float)
+0:411          frexp (global 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          'r025' (temp 3X3 matrix of float)
+0:411          fwidth (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 3X3 matrix of float)
+0:411            'inF0' (in 3X3 matrix of float)
+0:411      transpose (global 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 (global 3X3 matrix of float)
+0:411            'inF0' (in 3X3 matrix of float)
+0:414      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -1093,165 +2136,301 @@ gl_FragCoord origin is upper left
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:432  Function Definition: PixelShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float)
-0:412    Function Parameters: 
-0:412      'inF0' (in 4X4 matrix of float)
-0:412      'inF1' (in 4X4 matrix of float)
-0:412      'inF2' (in 4X4 matrix of float)
+0:438  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 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:?     Sequence
-0:414      all (global bool)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      Absolute value (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      arc cosine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      any (global bool)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      arc sine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      arc tangent (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      arc tangent (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      Ceiling (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      Test condition and select (temp void)
-0:414        Condition
-0:414        any (temp bool)
-0:414          Compare Less Than (temp 4X4 matrix of bool)
-0:414            'inF0' (in 4X4 matrix of float)
-0:414            Constant:
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414        true case
-0:414        Branch: Kill
-0:414      clamp (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414        'inF2' (in 4X4 matrix of float)
-0:414      cosine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      hyp. cosine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdx (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdxCoarse (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdxFine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdy (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdyCoarse (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdyFine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      degrees (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      determinant (global float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      exp (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      exp2 (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      findMSB (global int)
-0:414        Constant:
-0:414          7 (const int)
-0:414      findLSB (global int)
-0:414        Constant:
-0:414          7 (const int)
-0:414      Floor (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      mod (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      Fraction (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      frexp (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      fwidth (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      ldexp (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      log (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      matrix-scale (temp 4X4 matrix of float)
-0:414        log2 (temp 4X4 matrix of float)
-0:414          'inF0' (in 4X4 matrix of float)
-0:414        Constant:
-0:414          0.301030
-0:414      log2 (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      max (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      min (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      pow (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      radians (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      roundEven (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      inverse sqrt (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      clamp (temp 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        Constant:
-0:414          0.000000
-0:414        Constant:
-0:414          1.000000
-0:414      Sign (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      sine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      Sequence
-0:414        move second child to first child (temp 4X4 matrix of float)
-0:414          'inF1' (in 4X4 matrix of float)
-0:414          sine (temp 4X4 matrix of float)
-0:414            'inF0' (in 4X4 matrix of float)
-0:414        move second child to first child (temp 4X4 matrix of float)
-0:414          'inF2' (in 4X4 matrix of float)
-0:414          cosine (temp 4X4 matrix of float)
-0:414            'inF0' (in 4X4 matrix of float)
-0:414      hyp. sine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      smoothstep (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414        'inF2' (in 4X4 matrix of float)
-0:414      sqrt (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      step (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      tangent (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      hyp. tangent (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      transpose (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      trunc (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:417      Branch: Return with expression
+0:420      Sequence
+0:420        move second child to first child (temp bool)
+0:420          'r000' (temp bool)
+0:420          all (global 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 (global 4X4 matrix of float)
+0:420            'inF0' (in 4X4 matrix of float)
+0:420      arc cosine (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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          'r024' (temp 4X4 matrix of float)
+0:420          frexp (global 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          'r025' (temp 4X4 matrix of float)
+0:420          fwidth (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 4X4 matrix of float)
+0:420            'inF0' (in 4X4 matrix of float)
+0:420      transpose (global 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 (global 4X4 matrix of float)
+0:420            'inF0' (in 4X4 matrix of float)
+0:423      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -1269,181 +2448,322 @@ gl_FragCoord origin is upper left
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:439  Function Definition: TestGenMul(f1;f1;vf2;vf2;mf22;mf22; (temp void)
-0:435    Function Parameters: 
-0:435      'inF0' (in float)
-0:435      'inF1' (in float)
-0:435      'inFV0' (in 2-component vector of float)
-0:435      'inFV1' (in 2-component vector of float)
-0:435      'inFM0' (in 2X2 matrix of float)
-0:435      'inFM1' (in 2X2 matrix of float)
+0:445  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global 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:?     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            'inF0' (in float)
+0:442            'inF1' (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            'inFV0' (in 2-component vector of 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          'r2' (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 float)
+0:442          'r3' (temp float)
+0:442          dot-product (global 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          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 2-component vector of float)
+0:442          'r5' (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 2X2 matrix of float)
+0:442          'r6' (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          'r7' (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          'r8' (temp 2X2 matrix of float)
+0:442          matrix-multiply (temp 2X2 matrix of float)
+0:442            'inFM0' (in 2X2 matrix of float)
+0:442            'inFM1' (in 2X2 matrix of float)
+0:452  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global 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:?     Sequence
-0:436      move second child to first child (temp float)
-0:436        'r0' (temp float)
-0:436        component-wise multiply (temp float)
-0:436          'inF0' (in float)
-0:436          'inF1' (in float)
-0:436      move second child to first child (temp 2-component vector of float)
-0:436        'r1' (temp 2-component vector of float)
-0:436        vector-scale (temp 2-component vector of float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436          'inF0' (in float)
-0:436      move second child to first child (temp 2-component vector of float)
-0:436        'r2' (temp 2-component vector of float)
-0:436        vector-scale (temp 2-component vector of float)
-0:436          'inF0' (in float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436      move second child to first child (temp float)
-0:436        'r3' (temp float)
-0:436        dot-product (global float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436          'inFV1' (in 2-component vector of float)
-0:436      move second child to first child (temp 2-component vector of float)
-0:436        'r4' (temp 2-component vector of float)
-0:436        matrix-times-vector (temp 2-component vector of float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436      move second child to first child (temp 2-component vector of float)
-0:436        'r5' (temp 2-component vector of float)
-0:436        vector-times-matrix (temp 2-component vector of float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436      move second child to first child (temp 2X2 matrix of float)
-0:436        'r6' (temp 2X2 matrix of float)
-0:436        matrix-scale (temp 2X2 matrix of float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436          'inF0' (in float)
-0:436      move second child to first child (temp 2X2 matrix of float)
-0:436        'r7' (temp 2X2 matrix of float)
-0:436        matrix-scale (temp 2X2 matrix of float)
-0:436          'inF0' (in float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436      move second child to first child (temp 2X2 matrix of float)
-0:436        'r8' (temp 2X2 matrix of float)
-0:436        matrix-multiply (temp 2X2 matrix of float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436          'inFM1' (in 2X2 matrix of float)
-0:446  Function Definition: TestGenMul(f1;f1;vf3;vf3;mf33;mf33; (temp void)
-0:442    Function Parameters: 
-0:442      'inF0' (in float)
-0:442      'inF1' (in float)
-0:442      'inFV0' (in 3-component vector of float)
-0:442      'inFV1' (in 3-component vector of float)
-0:442      'inFM0' (in 3X3 matrix of float)
-0:442      'inFM1' (in 3X3 matrix of float)
+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            'inF0' (in float)
+0:449            'inF1' (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            'inFV0' (in 3-component vector of 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          'r2' (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 float)
+0:449          'r3' (temp float)
+0:449          dot-product (global 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          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 3-component vector of float)
+0:449          'r5' (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 3X3 matrix of float)
+0:449          'r6' (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          'r7' (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          'r8' (temp 3X3 matrix of float)
+0:449          matrix-multiply (temp 3X3 matrix of float)
+0:449            'inFM0' (in 3X3 matrix of float)
+0:449            'inFM1' (in 3X3 matrix of float)
+0:460  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global 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:?     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          'inF0' (in float)
-0:443          'inF1' (in float)
-0:443      move second child to first child (temp 3-component vector of float)
-0:443        'r1' (temp 3-component vector of float)
-0:443        vector-scale (temp 3-component vector of float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443          'inF0' (in float)
-0:443      move second child to first child (temp 3-component vector of float)
-0:443        'r2' (temp 3-component vector of float)
-0:443        vector-scale (temp 3-component vector of float)
-0:443          'inF0' (in float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443      move second child to first child (temp float)
-0:443        'r3' (temp float)
-0:443        dot-product (global float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443          'inFV1' (in 3-component vector of float)
-0:443      move second child to first child (temp 3-component vector of float)
-0:443        'r4' (temp 3-component vector of float)
-0:443        matrix-times-vector (temp 3-component vector of float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443      move second child to first child (temp 3-component vector of float)
-0:443        'r5' (temp 3-component vector of float)
-0:443        vector-times-matrix (temp 3-component vector of float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443      move second child to first child (temp 3X3 matrix of float)
-0:443        'r6' (temp 3X3 matrix of float)
-0:443        matrix-scale (temp 3X3 matrix of float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443          'inF0' (in float)
-0:443      move second child to first child (temp 3X3 matrix of float)
-0:443        'r7' (temp 3X3 matrix of float)
-0:443        matrix-scale (temp 3X3 matrix of float)
-0:443          'inF0' (in float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443      move second child to first child (temp 3X3 matrix of float)
-0:443        'r8' (temp 3X3 matrix of float)
-0:443        matrix-multiply (temp 3X3 matrix of float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443          'inFM1' (in 3X3 matrix of float)
-0:452  Function Definition: TestGenMul(f1;f1;vf4;vf4;mf44;mf44; (temp void)
-0:449    Function Parameters: 
-0:449      'inF0' (in float)
-0:449      'inF1' (in float)
-0:449      'inFV0' (in 4-component vector of float)
-0:449      'inFV1' (in 4-component vector of float)
-0:449      'inFM0' (in 4X4 matrix of float)
-0:449      'inFM1' (in 4X4 matrix of float)
+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            'inF0' (in float)
+0:456            'inF1' (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            'inFV0' (in 4-component vector of 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          'r2' (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 float)
+0:456          'r3' (temp float)
+0:456          dot-product (global 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          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 4-component vector of float)
+0:456          'r5' (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 4X4 matrix of float)
+0:456          'r6' (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          'r7' (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          'r8' (temp 4X4 matrix of float)
+0:456          matrix-multiply (temp 4X4 matrix of float)
+0:456            'inFM0' (in 4X4 matrix of float)
+0:456            'inFM1' (in 4X4 matrix of float)
+0:484  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42; (global 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 3X2 matrix of float)
+0:465      'inFM3x2' (in 2X3 matrix of float)
+0:465      'inFM3x3' (in 3X3 matrix of float)
+0:465      'inFM3x4' (in 4X3 matrix of float)
+0:465      'inFM2x4' (in 4X2 matrix of float)
 0:?     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          'inF0' (in float)
-0:450          'inF1' (in float)
-0:450      move second child to first child (temp 4-component vector of float)
-0:450        'r1' (temp 4-component vector of float)
-0:450        vector-scale (temp 4-component vector of float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450          'inF0' (in float)
-0:450      move second child to first child (temp 4-component vector of float)
-0:450        'r2' (temp 4-component vector of float)
-0:450        vector-scale (temp 4-component vector of float)
-0:450          'inF0' (in float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450      move second child to first child (temp float)
-0:450        'r3' (temp float)
-0:450        dot-product (global float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450          'inFV1' (in 4-component vector of float)
-0:450      move second child to first child (temp 4-component vector of float)
-0:450        'r4' (temp 4-component vector of float)
-0:450        matrix-times-vector (temp 4-component vector of float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450      move second child to first child (temp 4-component vector of float)
-0:450        'r5' (temp 4-component vector of float)
-0:450        vector-times-matrix (temp 4-component vector of float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450      move second child to first child (temp 4X4 matrix of float)
-0:450        'r6' (temp 4X4 matrix of float)
-0:450        matrix-scale (temp 4X4 matrix of float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450          'inF0' (in float)
-0:450      move second child to first child (temp 4X4 matrix of float)
-0:450        'r7' (temp 4X4 matrix of float)
-0:450        matrix-scale (temp 4X4 matrix of float)
-0:450          'inF0' (in float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450      move second child to first child (temp 4X4 matrix of float)
-0:450        'r8' (temp 4X4 matrix of float)
-0:450        matrix-multiply (temp 4X4 matrix of float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450          'inFM1' (in 4X4 matrix of float)
+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            'inF0' (in float)
+0:466            'inF1' (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            'inFV2' (in 2-component vector of float)
+0:467            'inF0' (in 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            'inFV3' (in 3-component vector of float)
+0:468            'inF0' (in 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            'inF0' (in float)
+0:469            'inFV2' (in 2-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            'inF0' (in float)
+0:470            'inFV3' (in 3-component vector of float)
+0:471      Sequence
+0:471        move second child to first child (temp float)
+0:471          'r05' (temp float)
+0:471          dot-product (global float)
+0:471            'inFV2' (in 2-component vector of float)
+0:471            'inFV2' (in 2-component vector of float)
+0:472      Sequence
+0:472        move second child to first child (temp float)
+0:472          'r06' (temp float)
+0:472          dot-product (global float)
+0:472            'inFV3' (in 3-component vector of float)
+0:472            'inFV3' (in 3-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          vector-times-matrix (temp 3-component vector of float)
+0:473            'inFV2' (in 2-component vector of float)
+0:473            'inFM2x3' (in 3X2 matrix 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          vector-times-matrix (temp 2-component vector of float)
+0:474            'inFV3' (in 3-component vector of float)
+0:474            'inFM3x2' (in 2X3 matrix 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          matrix-times-vector (temp 2-component vector of float)
+0:475            'inFM2x3' (in 3X2 matrix of float)
+0:475            'inFV3' (in 3-component vector 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          matrix-times-vector (temp 3-component vector of float)
+0:476            'inFM3x2' (in 2X3 matrix of float)
+0:476            'inFV2' (in 2-component vector of float)
+0:477      Sequence
+0:477        move second child to first child (temp 3X2 matrix of float)
+0:477          'r11' (temp 3X2 matrix of float)
+0:477          matrix-scale (temp 3X2 matrix of float)
+0:477            'inFM2x3' (in 3X2 matrix of float)
+0:477            'inF0' (in float)
+0:478      Sequence
+0:478        move second child to first child (temp 2X3 matrix of float)
+0:478          'r12' (temp 2X3 matrix of float)
+0:478          matrix-scale (temp 2X3 matrix of float)
+0:478            'inFM3x2' (in 2X3 matrix of float)
+0:478            'inF0' (in 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            'inFM2x3' (in 3X2 matrix of float)
+0:479            'inFM3x2' (in 2X3 matrix of float)
+0:480      Sequence
+0:480        move second child to first child (temp 3X2 matrix of float)
+0:480          'r14' (temp 3X2 matrix of float)
+0:480          matrix-multiply (temp 3X2 matrix of float)
+0:480            'inFM2x3' (in 3X2 matrix of float)
+0:480            'inFM3x3' (in 3X3 matrix of float)
+0:481      Sequence
+0:481        move second child to first child (temp 4X2 matrix of float)
+0:481          'r15' (temp 4X2 matrix of float)
+0:481          matrix-multiply (temp 4X2 matrix of float)
+0:481            'inFM2x3' (in 3X2 matrix of float)
+0:481            'inFM3x4' (in 4X3 matrix of float)
+0:482      Sequence
+0:482        move second child to first child (temp 4X3 matrix of float)
+0:482          'r16' (temp 4X3 matrix of float)
+0:482          matrix-multiply (temp 4X3 matrix of float)
+0:482            'inFM3x2' (in 2X3 matrix of float)
+0:482            'inFM2x4' (in 4X2 matrix of float)
 0:?   Linker Objects
-0:?     'gs_ua' (temp uint)
-0:?     'gs_ub' (temp uint)
-0:?     'gs_uc' (temp uint)
-0:?     'gs_ua2' (temp 2-component vector of uint)
-0:?     'gs_ub2' (temp 2-component vector of uint)
-0:?     'gs_uc2' (temp 2-component vector of uint)
-0:?     'gs_ua3' (temp 3-component vector of uint)
-0:?     'gs_ub3' (temp 3-component vector of uint)
-0:?     'gs_uc3' (temp 3-component vector of uint)
-0:?     'gs_ua4' (temp 4-component vector of uint)
-0:?     'gs_ub4' (temp 4-component vector of uint)
-0:?     'gs_uc4' (temp 4-component vector of uint)
+0:?     'gs_ua' (global uint)
+0:?     'gs_ub' (global uint)
+0:?     'gs_uc' (global uint)
+0:?     'gs_ua2' (global 2-component vector of uint)
+0:?     'gs_ub2' (global 2-component vector of uint)
+0:?     'gs_uc2' (global 2-component vector of uint)
+0:?     'gs_ua3' (global 3-component vector of uint)
+0:?     'gs_ub3' (global 3-component vector of uint)
+0:?     'gs_uc3' (global 3-component vector of uint)
+0:?     'gs_ua4' (global 4-component vector of uint)
+0:?     'gs_ub4' (global 4-component vector of uint)
+0:?     'gs_uc4' (global 4-component vector of uint)
 
 
 Linked fragment stage:
@@ -1452,7 +2772,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:87  Function Definition: PixelShaderFunction(f1;f1;f1;u1;u1; (temp float)
+0:88  Function Definition: PixelShaderFunctionS(f1;f1;f1;u1;u1; (global float)
 0:17    Function Parameters: 
 0:17      'inF0' (in float)
 0:17      'inF1' (in float)
@@ -1460,33 +2780,69 @@ gl_FragCoord origin is upper left
 0:17      'inU0' (in uint)
 0:17      'inU1' (in uint)
 0:?     Sequence
-0:20      all (global bool)
-0:20        'inF0' (in float)
-0:21      Absolute value (global float)
-0:21        'inF0' (in float)
-0:22      arc cosine (global float)
-0:22        'inF0' (in float)
-0:23      any (global bool)
-0:23        'inF0' (in float)
-0:24      arc sine (global float)
-0:24        'inF0' (in float)
-0:25      floatBitsToInt (global int)
-0:25        'inF0' (in float)
-0:26      floatBitsToUint (global uint)
-0:26        'inF0' (in float)
-0:27      intBitsToFloat (global float)
-0:27        'inU0' (in uint)
-0:29      arc tangent (global float)
-0:29        'inF0' (in float)
-0:30      arc tangent (global float)
-0:30        'inF0' (in float)
-0:30        'inF1' (in float)
-0:31      Ceiling (global float)
-0:31        'inF0' (in float)
-0:32      clamp (global float)
-0:32        'inF0' (in float)
-0:32        'inF1' (in float)
-0:32        'inF2' (in float)
+0:20      Sequence
+0:20        move second child to first child (temp bool)
+0:20          'r000' (temp bool)
+0:20          all (global bool)
+0:20            'inF0' (in float)
+0:21      Sequence
+0:21        move second child to first child (temp float)
+0:21          'r001' (temp float)
+0:21          Absolute value (global float)
+0:21            'inF0' (in float)
+0:22      Sequence
+0:22        move second child to first child (temp float)
+0:22          'r002' (temp float)
+0:22          arc cosine (global float)
+0:22            'inF0' (in float)
+0:23      Sequence
+0:23        move second child to first child (temp bool)
+0:23          'r003' (temp bool)
+0:23          any (global bool)
+0:23            'inF0' (in float)
+0:24      Sequence
+0:24        move second child to first child (temp float)
+0:24          'r004' (temp float)
+0:24          arc sine (global float)
+0:24            'inF0' (in float)
+0:25      Sequence
+0:25        move second child to first child (temp int)
+0:25          'r005' (temp int)
+0:25          floatBitsToInt (global int)
+0:25            'inF0' (in float)
+0:26      Sequence
+0:26        move second child to first child (temp uint)
+0:26          'r006' (temp uint)
+0:26          floatBitsToUint (global uint)
+0:26            'inF0' (in float)
+0:27      Sequence
+0:27        move second child to first child (temp float)
+0:27          'r007' (temp float)
+0:27          intBitsToFloat (global float)
+0:27            'inU0' (in uint)
+0:29      Sequence
+0:29        move second child to first child (temp float)
+0:29          'r009' (temp float)
+0:29          arc tangent (global float)
+0:29            'inF0' (in float)
+0:30      Sequence
+0:30        move second child to first child (temp float)
+0:30          'r010' (temp float)
+0:30          arc tangent (global float)
+0:30            'inF0' (in float)
+0:30            'inF1' (in float)
+0:31      Sequence
+0:31        move second child to first child (temp float)
+0:31          'r011' (temp float)
+0:31          Ceiling (global float)
+0:31            'inF0' (in float)
+0:32      Sequence
+0:32        move second child to first child (temp float)
+0:32          'r012' (temp float)
+0:32          clamp (global float)
+0:32            'inF0' (in float)
+0:32            'inF1' (in float)
+0:32            'inF2' (in float)
 0:33      Test condition and select (temp void)
 0:33        Condition
 0:33        Compare Less Than (temp bool)
@@ -1495,1044 +2851,2051 @@ gl_FragCoord origin is upper left
 0:33            0.000000
 0:33        true case
 0:33        Branch: Kill
-0:34      cosine (global float)
-0:34        'inF0' (in float)
-0:35      hyp. cosine (global float)
-0:35        'inF0' (in float)
-0:36      bitCount (global uint)
-0:36        Constant:
-0:36          7 (const uint)
-0:37      dPdx (global float)
-0:37        'inF0' (in float)
-0:38      dPdxCoarse (global float)
-0:38        'inF0' (in float)
-0:39      dPdxFine (global float)
-0:39        'inF0' (in float)
-0:40      dPdy (global float)
-0:40        'inF0' (in float)
-0:41      dPdyCoarse (global float)
-0:41        'inF0' (in float)
-0:42      dPdyFine (global float)
-0:42        'inF0' (in float)
-0:43      degrees (global float)
-0:43        'inF0' (in float)
-0:47      exp (global float)
-0:47        'inF0' (in float)
-0:48      exp2 (global float)
-0:48        'inF0' (in float)
-0:49      findMSB (global int)
-0:49        Constant:
-0:49          7 (const int)
-0:50      findLSB (global int)
-0:50        Constant:
-0:50          7 (const int)
-0:51      Floor (global float)
-0:51        'inF0' (in float)
-0:53      mod (global float)
-0:53        'inF0' (in float)
-0:53        'inF1' (in float)
-0:54      Fraction (global float)
-0:54        'inF0' (in float)
-0:55      frexp (global float)
-0:55        'inF0' (in float)
-0:55        'inF1' (in float)
-0:56      fwidth (global float)
-0:56        'inF0' (in float)
-0:57      isinf (global bool)
-0:57        'inF0' (in float)
-0:58      isnan (global bool)
-0:58        'inF0' (in float)
-0:59      ldexp (global float)
-0:59        'inF0' (in float)
-0:59        'inF1' (in float)
-0:60      log (global float)
-0:60        'inF0' (in float)
-0:61      component-wise multiply (temp float)
-0:61        log2 (temp float)
-0:61          'inF0' (in float)
-0:61        Constant:
-0:61          0.301030
-0:62      log2 (global float)
-0:62        'inF0' (in float)
-0:63      max (global float)
-0:63        'inF0' (in float)
-0:63        'inF1' (in float)
-0:64      min (global float)
-0:64        'inF0' (in float)
-0:64        'inF1' (in float)
-0:65      pow (global float)
-0:65        'inF0' (in float)
-0:65        'inF1' (in float)
-0:66      radians (global float)
-0:66        'inF0' (in float)
-0:67      divide (temp float)
-0:67        Constant:
-0:67          1.000000
-0:67        'inF0' (in float)
-0:68      bitFieldReverse (global uint)
-0:68        Constant:
-0:68          2 (const uint)
-0:69      roundEven (global float)
-0:69        'inF0' (in float)
-0:70      inverse sqrt (global float)
-0:70        'inF0' (in float)
-0:71      clamp (temp float)
-0:71        'inF0' (in float)
-0:71        Constant:
-0:71          0.000000
-0:71        Constant:
-0:71          1.000000
-0:72      Sign (global float)
-0:72        'inF0' (in float)
-0:73      sine (global float)
-0:73        'inF0' (in float)
+0:34      Sequence
+0:34        move second child to first child (temp float)
+0:34          'r014' (temp float)
+0:34          cosine (global float)
+0:34            'inF0' (in float)
+0:35      Sequence
+0:35        move second child to first child (temp float)
+0:35          'r015' (temp float)
+0:35          hyp. cosine (global float)
+0:35            'inF0' (in float)
+0:36      Sequence
+0:36        move second child to first child (temp uint)
+0:36          'r016' (temp uint)
+0:36          bitCount (global uint)
+0:36            Constant:
+0:36              7 (const uint)
+0:37      Sequence
+0:37        move second child to first child (temp float)
+0:37          'r017' (temp float)
+0:37          dPdx (global float)
+0:37            'inF0' (in float)
+0:38      Sequence
+0:38        move second child to first child (temp float)
+0:38          'r018' (temp float)
+0:38          dPdxCoarse (global float)
+0:38            'inF0' (in float)
+0:39      Sequence
+0:39        move second child to first child (temp float)
+0:39          'r019' (temp float)
+0:39          dPdxFine (global float)
+0:39            'inF0' (in float)
+0:40      Sequence
+0:40        move second child to first child (temp float)
+0:40          'r020' (temp float)
+0:40          dPdy (global float)
+0:40            'inF0' (in float)
+0:41      Sequence
+0:41        move second child to first child (temp float)
+0:41          'r021' (temp float)
+0:41          dPdyCoarse (global float)
+0:41            'inF0' (in float)
+0:42      Sequence
+0:42        move second child to first child (temp float)
+0:42          'r022' (temp float)
+0:42          dPdyFine (global float)
+0:42            'inF0' (in float)
+0:43      Sequence
+0:43        move second child to first child (temp float)
+0:43          'r023' (temp float)
+0:43          degrees (global float)
+0:43            'inF0' (in float)
+0:47      Sequence
+0:47        move second child to first child (temp float)
+0:47          'r027' (temp float)
+0:47          exp (global float)
+0:47            'inF0' (in float)
+0:48      Sequence
+0:48        move second child to first child (temp float)
+0:48          'r028' (temp float)
+0:48          exp2 (global float)
+0:48            'inF0' (in float)
+0:49      Sequence
+0:49        move second child to first child (temp uint)
+0:49          'r029' (temp uint)
+0:49          Convert int to uint (temp uint)
+0:49            findMSB (global int)
+0:49              Constant:
+0:49                7 (const int)
+0:50      Sequence
+0:50        move second child to first child (temp uint)
+0:50          'r030' (temp uint)
+0:50          Convert int to uint (temp uint)
+0:50            findLSB (global int)
+0:50              Constant:
+0:50                7 (const int)
+0:51      Sequence
+0:51        move second child to first child (temp float)
+0:51          'r031' (temp float)
+0:51          Floor (global float)
+0:51            'inF0' (in float)
+0:53      Sequence
+0:53        move second child to first child (temp float)
+0:53          'r033' (temp float)
+0:53          mod (global float)
+0:53            'inF0' (in float)
+0:53            'inF1' (in float)
+0:54      Sequence
+0:54        move second child to first child (temp float)
+0:54          'r034' (temp float)
+0:54          Fraction (global float)
+0:54            'inF0' (in float)
+0:55      Sequence
+0:55        move second child to first child (temp float)
+0:55          'r035' (temp float)
+0:55          frexp (global 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 (global 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 (global bool)
+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 (global 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 (global float)
+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 (global 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 (global float)
+0:61            'inF0' (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:63      Sequence
+0:63        move second child to first child (temp float)
+0:63          'r042' (temp float)
+0:63          log2 (global float)
+0:63            'inF0' (in float)
+0:64      Sequence
+0:64        move second child to first child (temp float)
+0:64          'r043' (temp float)
+0:64          max (global 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 (global 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 (global 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 (global float)
+0:67            'inF0' (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            'inF0' (in float)
+0:69      Sequence
+0:69        move second child to first child (temp uint)
+0:69          'r048' (temp uint)
+0:69          bitFieldReverse (global uint)
+0:69            Constant:
+0:69              2 (const uint)
+0:70      Sequence
+0:70        move second child to first child (temp float)
+0:70          'r049' (temp float)
+0:70          roundEven (global float)
+0:70            'inF0' (in float)
+0:71      Sequence
+0:71        move second child to first child (temp float)
+0:71          'r050' (temp float)
+0:71          inverse sqrt (global 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            '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 (global float)
+0:73            'inF0' (in float)
 0:74      Sequence
 0:74        move second child to first child (temp float)
-0:74          'inF1' (in float)
-0:74          sine (temp float)
+0:74          'r053' (temp float)
+0:74          sine (global float)
 0:74            'inF0' (in float)
-0:74        move second child to first child (temp float)
-0:74          'inF2' (in float)
-0:74          cosine (temp float)
-0:74            'inF0' (in float)
-0:75      hyp. sine (global float)
-0:75        'inF0' (in float)
-0:76      smoothstep (global float)
-0:76        'inF0' (in float)
-0:76        'inF1' (in float)
-0:76        'inF2' (in float)
-0:77      sqrt (global float)
-0:77        'inF0' (in float)
-0:78      step (global float)
-0:78        'inF0' (in float)
-0:78        'inF1' (in float)
-0:79      tangent (global float)
-0:79        'inF0' (in float)
-0:80      hyp. tangent (global float)
-0:80        'inF0' (in float)
-0:82      trunc (global float)
-0:82        'inF0' (in float)
-0:84      Branch: Return with expression
-0:84        Constant:
-0:84          0.000000
-0:93  Function Definition: PixelShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float)
-0:88    Function Parameters: 
-0:88      'inF0' (in 1-component vector of float)
-0:88      'inF1' (in 1-component vector of float)
-0:88      'inF2' (in 1-component vector of float)
+0:75      Sequence
+0:75        move second child to first child (temp float)
+0:75          'inF1' (in 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 (global 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 (global 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 (global float)
+0:78            'inF0' (in float)
+0:79      Sequence
+0:79        move second child to first child (temp float)
+0:79          'r058' (temp float)
+0:79          step (global 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 (global float)
+0:80            'inF0' (in float)
+0:81      Sequence
+0:81        move second child to first child (temp float)
+0:81          'r060' (temp float)
+0:81          hyp. tangent (global 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 (global float)
+0:83            'inF0' (in float)
+0:85      Branch: Return with expression
+0:85        Constant:
+0:85          0.000000
+0:94  Function Definition: PixelShaderFunction1(vf1;vf1;vf1; (global 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:?     Sequence
-0:90      Branch: Return with expression
-0:90        Constant:
-0:90          0.000000
-0:172  Function Definition: PixelShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
-0:94    Function Parameters: 
-0:94      'inF0' (in 2-component vector of float)
-0:94      'inF1' (in 2-component vector of float)
-0:94      'inF2' (in 2-component vector of float)
-0:94      'inU0' (in 2-component vector of uint)
-0:94      'inU1' (in 2-component vector of uint)
+0:91      Branch: Return with expression
+0:91        Constant:
+0:91          0.000000
+0:177  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 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:?     Sequence
-0:97      all (global bool)
-0:97        'inF0' (in 2-component vector of float)
-0:98      Absolute value (global 2-component vector of float)
-0:98        'inF0' (in 2-component vector of float)
-0:99      arc cosine (global 2-component vector of float)
-0:99        'inF0' (in 2-component vector of float)
-0:100      any (global bool)
-0:100        'inF0' (in 2-component vector of float)
-0:101      arc sine (global 2-component vector of float)
-0:101        'inF0' (in 2-component vector of float)
-0:102      floatBitsToInt (global 2-component vector of int)
-0:102        'inF0' (in 2-component vector of float)
-0:103      floatBitsToUint (global 2-component vector of uint)
-0:103        'inF0' (in 2-component vector of float)
-0:104      intBitsToFloat (global 2-component vector of float)
-0:104        'inU0' (in 2-component vector of uint)
-0:106      arc tangent (global 2-component vector of float)
-0:106        'inF0' (in 2-component vector of float)
-0:107      arc tangent (global 2-component vector of float)
-0:107        'inF0' (in 2-component vector of float)
-0:107        'inF1' (in 2-component vector of float)
-0:108      Ceiling (global 2-component vector of float)
-0:108        'inF0' (in 2-component vector of float)
-0:109      clamp (global 2-component vector of float)
-0:109        'inF0' (in 2-component vector of float)
-0:109        'inF1' (in 2-component vector of float)
-0:109        'inF2' (in 2-component vector of float)
-0:110      Test condition and select (temp void)
-0:110        Condition
-0:110        any (temp bool)
-0:110          Compare Less Than (temp 2-component vector of bool)
+0:98      Sequence
+0:98        move second child to first child (temp bool)
+0:98          'r000' (temp bool)
+0:98          all (global 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 (global 2-component vector of float)
+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 (global 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 (global bool)
+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 (global 2-component vector of float)
+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 (global 2-component vector of int)
+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 (global 2-component vector of uint)
+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 (global 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 (global 2-component vector of float)
+0:107            'inF0' (in 2-component vector of float)
+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          arc tangent (global 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 (global 2-component vector of float)
+0:109            'inF0' (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 (global 2-component vector of float)
 0:110            'inF0' (in 2-component vector of float)
-0:110            Constant:
-0:110              0.000000
-0:110              0.000000
-0:110        true case
-0:110        Branch: Kill
-0:111      cosine (global 2-component vector of float)
-0:111        'inF0' (in 2-component vector of float)
-0:112      hyp. cosine (global 2-component vector of float)
-0:112        'inF0' (in 2-component vector of float)
-0:?       bitCount (global 2-component vector of uint)
-0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:114      dPdx (global 2-component vector of float)
-0:114        'inF0' (in 2-component vector of float)
-0:115      dPdxCoarse (global 2-component vector of float)
-0:115        'inF0' (in 2-component vector of float)
-0:116      dPdxFine (global 2-component vector of float)
-0:116        'inF0' (in 2-component vector of float)
-0:117      dPdy (global 2-component vector of float)
-0:117        'inF0' (in 2-component vector of float)
-0:118      dPdyCoarse (global 2-component vector of float)
-0:118        'inF0' (in 2-component vector of float)
-0:119      dPdyFine (global 2-component vector of float)
-0:119        'inF0' (in 2-component vector of float)
-0:120      degrees (global 2-component vector of float)
-0:120        'inF0' (in 2-component vector of float)
-0:121      distance (global float)
-0:121        'inF0' (in 2-component vector of float)
-0:121        'inF1' (in 2-component vector of float)
-0:122      dot-product (global float)
-0:122        'inF0' (in 2-component vector of float)
-0:122        'inF1' (in 2-component vector of float)
-0:126      exp (global 2-component vector of float)
-0:126        'inF0' (in 2-component vector of float)
-0:127      exp2 (global 2-component vector of float)
-0:127        'inF0' (in 2-component vector of float)
-0:128      face-forward (global 2-component vector of float)
-0:128        'inF0' (in 2-component vector of float)
-0:128        'inF1' (in 2-component vector of float)
-0:128        'inF2' (in 2-component vector of float)
-0:129      findMSB (global int)
-0:129        Constant:
-0:129          7 (const int)
-0:130      findLSB (global int)
-0:130        Constant:
-0:130          7 (const int)
-0:131      Floor (global 2-component vector of float)
-0:131        'inF0' (in 2-component vector of float)
-0:133      mod (global 2-component vector of float)
-0:133        'inF0' (in 2-component vector of float)
-0:133        'inF1' (in 2-component vector of float)
-0:134      Fraction (global 2-component vector of float)
-0:134        'inF0' (in 2-component vector of float)
-0:135      frexp (global 2-component vector of float)
-0:135        'inF0' (in 2-component vector of float)
-0:135        'inF1' (in 2-component vector of float)
-0:136      fwidth (global 2-component vector of float)
-0:136        'inF0' (in 2-component vector of float)
-0:137      isinf (global 2-component vector of bool)
-0:137        'inF0' (in 2-component vector of float)
-0:138      isnan (global 2-component vector of bool)
-0:138        'inF0' (in 2-component vector of float)
-0:139      ldexp (global 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      length (global float)
-0:140        'inF0' (in 2-component vector of float)
-0:141      log (global 2-component vector of float)
-0:141        'inF0' (in 2-component vector of float)
-0:142      vector-scale (temp 2-component vector of float)
-0:142        log2 (temp 2-component vector of float)
-0:142          'inF0' (in 2-component vector of float)
-0:142        Constant:
-0:142          0.301030
-0:143      log2 (global 2-component vector of float)
-0:143        'inF0' (in 2-component vector of float)
-0:144      max (global 2-component vector of float)
-0:144        'inF0' (in 2-component vector of float)
-0:144        'inF1' (in 2-component vector of float)
-0:145      min (global 2-component vector of float)
-0:145        'inF0' (in 2-component vector of float)
-0:145        'inF1' (in 2-component vector of float)
-0:146      normalize (global 2-component vector of float)
-0:146        'inF0' (in 2-component vector of float)
-0:147      pow (global 2-component vector of float)
-0:147        'inF0' (in 2-component vector of float)
-0:147        'inF1' (in 2-component vector of float)
-0:148      radians (global 2-component vector of float)
-0:148        'inF0' (in 2-component vector of float)
-0:149      divide (temp 2-component vector of float)
-0:149        Constant:
-0:149          1.000000
-0:149        'inF0' (in 2-component vector of float)
-0:150      reflect (global 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      refract (global 2-component vector of float)
-0:151        'inF0' (in 2-component vector of float)
-0:151        'inF1' (in 2-component vector of float)
-0:151        Constant:
-0:151          2.000000
-0:?       bitFieldReverse (global 2-component vector of uint)
-0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:153      roundEven (global 2-component vector of float)
-0:153        'inF0' (in 2-component vector of float)
-0:154      inverse sqrt (global 2-component vector of float)
-0:154        'inF0' (in 2-component vector of float)
-0:155      clamp (temp 2-component vector of float)
-0:155        'inF0' (in 2-component vector of float)
-0:155        Constant:
-0:155          0.000000
-0:155        Constant:
-0:155          1.000000
-0:156      Sign (global 2-component vector of float)
-0:156        'inF0' (in 2-component vector of float)
-0:157      sine (global 2-component vector of float)
-0:157        '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            '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:112      Sequence
+0:112        move second child to first child (temp 2-component vector of float)
+0:112          'r013' (temp 2-component vector of float)
+0:112          cosine (global 2-component vector of float)
+0:112            'inF0' (in 2-component vector of float)
+0:113      Sequence
+0:113        move second child to first child (temp 2-component vector of float)
+0:113          'r015' (temp 2-component vector of float)
+0:113          hyp. cosine (global 2-component vector of float)
+0:113            'inF0' (in 2-component vector of float)
+0:114      Sequence
+0:114        move second child to first child (temp 2-component vector of uint)
+0:114          'r016' (temp 2-component vector of uint)
+0:?           bitCount (global 2-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               3 (const uint)
+0:115      Sequence
+0:115        move second child to first child (temp 2-component vector of float)
+0:115          'r017' (temp 2-component vector of float)
+0:115          dPdx (global 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 float)
+0:116          'r018' (temp 2-component vector of float)
+0:116          dPdxCoarse (global 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          'r019' (temp 2-component vector of float)
+0:117          dPdxFine (global 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          'r020' (temp 2-component vector of float)
+0:118          dPdy (global 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          'r021' (temp 2-component vector of float)
+0:119          dPdyCoarse (global 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          'r022' (temp 2-component vector of float)
+0:120          dPdyFine (global 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          'r023' (temp 2-component vector of float)
+0:121          degrees (global 2-component vector of float)
+0:121            'inF0' (in 2-component vector of float)
+0:125      Sequence
+0:125        move second child to first child (temp float)
+0:125          'r026' (temp float)
+0:125          distance (global float)
+0:125            'inF0' (in 2-component vector of float)
+0:125            'inF1' (in 2-component vector of float)
+0:126      Sequence
+0:126        move second child to first child (temp float)
+0:126          'r027' (temp float)
+0:126          dot-product (global float)
+0:126            'inF0' (in 2-component vector of float)
+0:126            'inF1' (in 2-component vector of float)
+0:130      Sequence
+0:130        move second child to first child (temp 2-component vector of float)
+0:130          'r028' (temp 2-component vector of float)
+0:130          exp (global 2-component vector of float)
+0:130            'inF0' (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          'r029' (temp 2-component vector of float)
+0:131          exp2 (global 2-component vector of float)
+0:131            'inF0' (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          'r030' (temp 2-component vector of float)
+0:132          face-forward (global 2-component vector of float)
+0:132            'inF0' (in 2-component vector of float)
+0:132            'inF1' (in 2-component vector of float)
+0:132            'inF2' (in 2-component vector of float)
+0:133      Sequence
+0:133        move second child to first child (temp 2-component vector of uint)
+0:133          'r031' (temp 2-component vector of uint)
+0:?           findMSB (global 2-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               8 (const uint)
+0:134      Sequence
+0:134        move second child to first child (temp 2-component vector of uint)
+0:134          'r032' (temp 2-component vector of uint)
+0:?           findLSB (global 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 float)
+0:135          'r033' (temp 2-component vector of float)
+0:135          Floor (global 2-component vector of float)
+0:135            'inF0' (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          'r035' (temp 2-component vector of float)
+0:137          mod (global 2-component vector of float)
+0:137            'inF0' (in 2-component vector of float)
+0:137            'inF1' (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          'r036' (temp 2-component vector of float)
+0:138          Fraction (global 2-component vector of float)
+0:138            '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          'r037' (temp 2-component vector of float)
+0:139          frexp (global 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 (global 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 (global 2-component vector of bool)
+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 (global 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 (global 2-component vector of float)
+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 (global 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 (global float)
+0:145            'inF0' (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 (global 2-component vector of 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: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 (global 2-component vector of float)
+0:148            'inF0' (in 2-component vector of float)
+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 (global 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 (global 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 (global 2-component vector of float)
+0:151            'inF0' (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 (global 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 (global 2-component vector of float)
+0:153            'inF0' (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            '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 (global 2-component vector of float)
+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 (global 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:?           bitFieldReverse (global 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          'inF1' (in 2-component vector of float)
-0:158          sine (temp 2-component vector of float)
-0:158            'inF0' (in 2-component vector of float)
-0:158        move second child to first child (temp 2-component vector of float)
-0:158          'inF2' (in 2-component vector of float)
-0:158          cosine (temp 2-component vector of float)
+0:158          'r055' (temp 2-component vector of float)
+0:158          roundEven (global 2-component vector of float)
 0:158            'inF0' (in 2-component vector of float)
-0:159      hyp. sine (global 2-component vector of float)
-0:159        'inF0' (in 2-component vector of float)
-0:160      smoothstep (global 2-component vector of float)
-0:160        'inF0' (in 2-component vector of float)
-0:160        'inF1' (in 2-component vector of float)
-0:160        'inF2' (in 2-component vector of float)
-0:161      sqrt (global 2-component vector of float)
-0:161        'inF0' (in 2-component vector of float)
-0:162      step (global 2-component vector of float)
-0:162        'inF0' (in 2-component vector of float)
-0:162        'inF1' (in 2-component vector of float)
-0:163      tangent (global 2-component vector of float)
-0:163        'inF0' (in 2-component vector of float)
-0:164      hyp. tangent (global 2-component vector of float)
-0:164        'inF0' (in 2-component vector of float)
-0:166      trunc (global 2-component vector of float)
-0:166        'inF0' (in 2-component vector of float)
-0:169      Branch: Return with expression
+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 (global 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            '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 (global 2-component vector of float)
+0:161            'inF0' (in 2-component vector of float)
+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 (global 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          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 (global 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 (global 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 (global 2-component vector of float)
+0:166            'inF0' (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 (global 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 (global 2-component vector of float)
+0:168            'inF0' (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 (global 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 (global 2-component vector of float)
+0:171            'inF0' (in 2-component vector of float)
+0:174      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:252  Function Definition: PixelShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
-0:173    Function Parameters: 
-0:173      'inF0' (in 3-component vector of float)
-0:173      'inF1' (in 3-component vector of float)
-0:173      'inF2' (in 3-component vector of float)
-0:173      'inU0' (in 3-component vector of uint)
-0:173      'inU1' (in 3-component vector of uint)
+0:258  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 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:?     Sequence
-0:176      all (global bool)
-0:176        'inF0' (in 3-component vector of float)
-0:177      Absolute value (global 3-component vector of float)
-0:177        'inF0' (in 3-component vector of float)
-0:178      arc cosine (global 3-component vector of float)
-0:178        'inF0' (in 3-component vector of float)
-0:179      any (global bool)
-0:179        'inF0' (in 3-component vector of float)
-0:180      arc sine (global 3-component vector of float)
-0:180        'inF0' (in 3-component vector of float)
-0:181      floatBitsToInt (global 3-component vector of int)
-0:181        'inF0' (in 3-component vector of float)
-0:182      floatBitsToUint (global 3-component vector of uint)
-0:182        'inF0' (in 3-component vector of float)
-0:183      intBitsToFloat (global 3-component vector of float)
-0:183        'inU0' (in 3-component vector of uint)
-0:185      arc tangent (global 3-component vector of float)
-0:185        'inF0' (in 3-component vector of float)
-0:186      arc tangent (global 3-component vector of float)
-0:186        'inF0' (in 3-component vector of float)
-0:186        'inF1' (in 3-component vector of float)
-0:187      Ceiling (global 3-component vector of float)
-0:187        'inF0' (in 3-component vector of float)
-0:188      clamp (global 3-component vector of float)
-0:188        'inF0' (in 3-component vector of float)
-0:188        'inF1' (in 3-component vector of float)
-0:188        'inF2' (in 3-component vector of float)
-0:189      Test condition and select (temp void)
-0:189        Condition
-0:189        any (temp bool)
-0:189          Compare Less Than (temp 3-component vector of bool)
-0:189            'inF0' (in 3-component vector of float)
-0:189            Constant:
-0:189              0.000000
-0:189              0.000000
-0:189              0.000000
-0:189        true case
-0:189        Branch: Kill
-0:190      cosine (global 3-component vector of float)
-0:190        'inF0' (in 3-component vector of float)
-0:191      hyp. cosine (global 3-component vector of float)
-0:191        'inF0' (in 3-component vector of float)
-0:?       bitCount (global 3-component vector of uint)
-0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:193      cross-product (global 3-component vector of float)
-0:193        'inF0' (in 3-component vector of float)
-0:193        'inF1' (in 3-component vector of float)
-0:194      dPdx (global 3-component vector of float)
-0:194        'inF0' (in 3-component vector of float)
-0:195      dPdxCoarse (global 3-component vector of float)
-0:195        'inF0' (in 3-component vector of float)
-0:196      dPdxFine (global 3-component vector of float)
-0:196        'inF0' (in 3-component vector of float)
-0:197      dPdy (global 3-component vector of float)
-0:197        'inF0' (in 3-component vector of float)
-0:198      dPdyCoarse (global 3-component vector of float)
-0:198        'inF0' (in 3-component vector of float)
-0:199      dPdyFine (global 3-component vector of float)
-0:199        'inF0' (in 3-component vector of float)
-0:200      degrees (global 3-component vector of float)
-0:200        'inF0' (in 3-component vector of float)
-0:201      distance (global float)
-0:201        'inF0' (in 3-component vector of float)
-0:201        'inF1' (in 3-component vector of float)
-0:202      dot-product (global float)
-0:202        'inF0' (in 3-component vector of float)
-0:202        'inF1' (in 3-component vector of float)
-0:206      exp (global 3-component vector of float)
-0:206        'inF0' (in 3-component vector of float)
-0:207      exp2 (global 3-component vector of float)
-0:207        'inF0' (in 3-component vector of float)
-0:208      face-forward (global 3-component vector of float)
-0:208        'inF0' (in 3-component vector of float)
-0:208        'inF1' (in 3-component vector of float)
-0:208        'inF2' (in 3-component vector of float)
-0:209      findMSB (global int)
-0:209        Constant:
-0:209          7 (const int)
-0:210      findLSB (global int)
-0:210        Constant:
-0:210          7 (const int)
-0:211      Floor (global 3-component vector of float)
-0:211        'inF0' (in 3-component vector of float)
-0:213      mod (global 3-component vector of float)
-0:213        'inF0' (in 3-component vector of float)
-0:213        'inF1' (in 3-component vector of float)
-0:214      Fraction (global 3-component vector of float)
-0:214        'inF0' (in 3-component vector of float)
-0:215      frexp (global 3-component vector of float)
-0:215        'inF0' (in 3-component vector of float)
-0:215        'inF1' (in 3-component vector of float)
-0:216      fwidth (global 3-component vector of float)
-0:216        'inF0' (in 3-component vector of float)
-0:217      isinf (global 3-component vector of bool)
-0:217        'inF0' (in 3-component vector of float)
-0:218      isnan (global 3-component vector of bool)
-0:218        'inF0' (in 3-component vector of float)
-0:219      ldexp (global 3-component vector of float)
-0:219        'inF0' (in 3-component vector of float)
-0:219        'inF1' (in 3-component vector of float)
-0:220      length (global float)
-0:220        'inF0' (in 3-component vector of float)
-0:221      log (global 3-component vector of float)
-0:221        'inF0' (in 3-component vector of float)
-0:222      vector-scale (temp 3-component vector of float)
-0:222        log2 (temp 3-component vector of float)
-0:222          'inF0' (in 3-component vector of float)
-0:222        Constant:
-0:222          0.301030
-0:223      log2 (global 3-component vector of float)
-0:223        'inF0' (in 3-component vector of float)
-0:224      max (global 3-component vector of float)
-0:224        'inF0' (in 3-component vector of float)
-0:224        'inF1' (in 3-component vector of float)
-0:225      min (global 3-component vector of float)
-0:225        'inF0' (in 3-component vector of float)
-0:225        'inF1' (in 3-component vector of float)
-0:226      normalize (global 3-component vector of float)
-0:226        'inF0' (in 3-component vector of float)
-0:227      pow (global 3-component vector of float)
-0:227        'inF0' (in 3-component vector of float)
-0:227        'inF1' (in 3-component vector of float)
-0:228      radians (global 3-component vector of float)
-0:228        'inF0' (in 3-component vector of float)
-0:229      divide (temp 3-component vector of float)
-0:229        Constant:
-0:229          1.000000
-0:229        'inF0' (in 3-component vector of float)
-0:230      reflect (global 3-component vector of float)
-0:230        'inF0' (in 3-component vector of float)
-0:230        'inF1' (in 3-component vector of float)
-0:231      refract (global 3-component vector of float)
-0:231        'inF0' (in 3-component vector of float)
-0:231        'inF1' (in 3-component vector of float)
-0:231        Constant:
-0:231          2.000000
-0:?       bitFieldReverse (global 3-component vector of uint)
-0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:233      roundEven (global 3-component vector of float)
-0:233        'inF0' (in 3-component vector of float)
-0:234      inverse sqrt (global 3-component vector of float)
-0:234        'inF0' (in 3-component vector of float)
-0:235      clamp (temp 3-component vector of float)
-0:235        'inF0' (in 3-component vector of float)
-0:235        Constant:
-0:235          0.000000
-0:235        Constant:
-0:235          1.000000
-0:236      Sign (global 3-component vector of float)
-0:236        'inF0' (in 3-component vector of float)
-0:237      sine (global 3-component vector of float)
-0:237        'inF0' (in 3-component vector of float)
+0:181      Sequence
+0:181        move second child to first child (temp bool)
+0:181          'r000' (temp bool)
+0:181          all (global 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 (global 3-component vector of float)
+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 (global 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 (global bool)
+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 (global 3-component vector of float)
+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 (global 3-component vector of int)
+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 (global 3-component vector of uint)
+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 (global 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 (global 3-component vector of float)
+0:190            'inF0' (in 3-component vector of float)
+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          arc tangent (global 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 (global 3-component vector of float)
+0:192            'inF0' (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 (global 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            '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:195      Sequence
+0:195        move second child to first child (temp 3-component vector of float)
+0:195          'r013' (temp 3-component vector of float)
+0:195          cosine (global 3-component vector of float)
+0:195            'inF0' (in 3-component vector of float)
+0:196      Sequence
+0:196        move second child to first child (temp 3-component vector of float)
+0:196          'r014' (temp 3-component vector of float)
+0:196          hyp. cosine (global 3-component vector of float)
+0:196            'inF0' (in 3-component vector of float)
+0:197      Sequence
+0:197        move second child to first child (temp 3-component vector of uint)
+0:197          'r015' (temp 3-component vector of uint)
+0:?           bitCount (global 3-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               3 (const uint)
+0:?               5 (const uint)
+0:198      Sequence
+0:198        move second child to first child (temp 3-component vector of float)
+0:198          'r016' (temp 3-component vector of float)
+0:198          cross-product (global 3-component vector of float)
+0:198            'inF0' (in 3-component vector of float)
+0:198            'inF1' (in 3-component vector of float)
+0:199      Sequence
+0:199        move second child to first child (temp 3-component vector of float)
+0:199          'r017' (temp 3-component vector of float)
+0:199          dPdx (global 3-component vector of float)
+0:199            'inF0' (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          'r018' (temp 3-component vector of float)
+0:200          dPdxCoarse (global 3-component vector of float)
+0:200            'inF0' (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          'r019' (temp 3-component vector of float)
+0:201          dPdxFine (global 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          'r020' (temp 3-component vector of float)
+0:202          dPdy (global 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          'r021' (temp 3-component vector of float)
+0:203          dPdyCoarse (global 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          'r022' (temp 3-component vector of float)
+0:204          dPdyFine (global 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          'r023' (temp 3-component vector of float)
+0:205          degrees (global 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 float)
+0:206          'r024' (temp float)
+0:206          distance (global float)
+0:206            'inF0' (in 3-component vector of float)
+0:206            'inF1' (in 3-component vector of float)
+0:207      Sequence
+0:207        move second child to first child (temp float)
+0:207          'r025' (temp float)
+0:207          dot-product (global float)
+0:207            'inF0' (in 3-component vector of float)
+0:207            'inF1' (in 3-component vector of float)
+0:211      Sequence
+0:211        move second child to first child (temp 3-component vector of float)
+0:211          'r029' (temp 3-component vector of float)
+0:211          exp (global 3-component vector of float)
+0:211            'inF0' (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          'r030' (temp 3-component vector of float)
+0:212          exp2 (global 3-component vector of float)
+0:212            'inF0' (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          'r031' (temp 3-component vector of float)
+0:213          face-forward (global 3-component vector of float)
+0:213            'inF0' (in 3-component vector of float)
+0:213            'inF1' (in 3-component vector of float)
+0:213            'inF2' (in 3-component vector of float)
+0:214      Sequence
+0:214        move second child to first child (temp 3-component vector of uint)
+0:214          'r032' (temp 3-component vector of uint)
+0:?           findMSB (global 3-component vector of uint)
+0:?             Constant:
+0:?               2 (const uint)
+0:?               3 (const uint)
+0:?               4 (const uint)
+0:215      Sequence
+0:215        move second child to first child (temp 3-component vector of uint)
+0:215          'r033' (temp 3-component vector of uint)
+0:?           findLSB (global 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 float)
+0:216          'r034' (temp 3-component vector of float)
+0:216          Floor (global 3-component vector of float)
+0:216            'inF0' (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          'r036' (temp 3-component vector of float)
+0:218          mod (global 3-component vector of float)
+0:218            'inF0' (in 3-component vector of float)
+0:218            'inF1' (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          'r037' (temp 3-component vector of float)
+0:219          Fraction (global 3-component vector of float)
+0:219            '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          'r038' (temp 3-component vector of float)
+0:220          frexp (global 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 (global 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 (global 3-component vector of bool)
+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 (global 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 (global 3-component vector of float)
+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 (global 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 float)
+0:226          'r043' (temp float)
+0:226          length (global float)
+0:226            'inF0' (in 3-component vector of float)
+0:227      Sequence
+0:227        move second child to first child (temp 3-component vector of float)
+0:227          'r044' (temp 3-component vector of float)
+0:227          log (global 3-component vector of float)
+0:227            'inF0' (in 3-component vector of float)
+0:228      Sequence
+0:228        move second child to first child (temp 3-component vector of float)
+0:228          'r045' (temp 3-component vector of float)
+0:228          vector-scale (temp 3-component vector of float)
+0:228            log2 (temp 3-component vector of float)
+0:228              'inF0' (in 3-component vector of float)
+0:228            Constant:
+0:228              0.301030
+0:229      Sequence
+0:229        move second child to first child (temp 3-component vector of float)
+0:229          'r046' (temp 3-component vector of float)
+0:229          log2 (global 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          'r047' (temp 3-component vector of float)
+0:230          max (global 3-component vector of float)
+0:230            'inF0' (in 3-component vector of float)
+0:230            'inF1' (in 3-component vector of float)
+0:231      Sequence
+0:231        move second child to first child (temp 3-component vector of float)
+0:231          'r048' (temp 3-component vector of float)
+0:231          min (global 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          'r049' (temp 3-component vector of float)
+0:232          normalize (global 3-component vector of float)
+0:232            'inF0' (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          'r050' (temp 3-component vector of float)
+0:233          pow (global 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          'r051' (temp 3-component vector of float)
+0:234          radians (global 3-component vector of float)
+0:234            'inF0' (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          'r052' (temp 3-component vector of float)
+0:235          divide (temp 3-component vector of float)
+0:235            Constant:
+0:235              1.000000
+0:235            'inF0' (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          'r053' (temp 3-component vector of float)
+0:236          reflect (global 3-component vector of float)
+0:236            'inF0' (in 3-component vector of float)
+0:236            'inF1' (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          'r054' (temp 3-component vector of float)
+0:237          refract (global 3-component vector of float)
+0:237            'inF0' (in 3-component vector of float)
+0:237            'inF1' (in 3-component vector of float)
+0:237            Constant:
+0:237              2.000000
 0:238      Sequence
-0:238        move second child to first child (temp 3-component vector of float)
-0:238          'inF1' (in 3-component vector of float)
-0:238          sine (temp 3-component vector of float)
-0:238            'inF0' (in 3-component vector of float)
-0:238        move second child to first child (temp 3-component vector of float)
-0:238          'inF2' (in 3-component vector of float)
-0:238          cosine (temp 3-component vector of float)
-0:238            'inF0' (in 3-component vector of float)
-0:239      hyp. sine (global 3-component vector of float)
-0:239        'inF0' (in 3-component vector of float)
-0:240      smoothstep (global 3-component vector of float)
-0:240        'inF0' (in 3-component vector of float)
-0:240        'inF1' (in 3-component vector of float)
-0:240        'inF2' (in 3-component vector of float)
-0:241      sqrt (global 3-component vector of float)
-0:241        'inF0' (in 3-component vector of float)
-0:242      step (global 3-component vector of float)
-0:242        'inF0' (in 3-component vector of float)
-0:242        'inF1' (in 3-component vector of float)
-0:243      tangent (global 3-component vector of float)
-0:243        'inF0' (in 3-component vector of float)
-0:244      hyp. tangent (global 3-component vector of float)
-0:244        'inF0' (in 3-component vector of float)
-0:246      trunc (global 3-component vector of float)
-0:246        'inF0' (in 3-component vector of float)
-0:249      Branch: Return with expression
+0:238        move second child to first child (temp 3-component vector of uint)
+0:238          'r055' (temp 3-component vector of uint)
+0:?           bitFieldReverse (global 3-component vector of uint)
+0:?             Constant:
+0:?               1 (const uint)
+0:?               2 (const uint)
+0:?               3 (const uint)
+0:239      Sequence
+0:239        move second child to first child (temp 3-component vector of float)
+0:239          'r056' (temp 3-component vector of float)
+0:239          roundEven (global 3-component vector of float)
+0:239            'inF0' (in 3-component vector of float)
+0:240      Sequence
+0:240        move second child to first child (temp 3-component vector of float)
+0:240          'r057' (temp 3-component vector of float)
+0:240          inverse sqrt (global 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          'r058' (temp 3-component vector of float)
+0:241          clamp (temp 3-component vector of float)
+0:241            'inF0' (in 3-component vector of float)
+0:241            Constant:
+0:241              0.000000
+0:241            Constant:
+0:241              1.000000
+0:242      Sequence
+0:242        move second child to first child (temp 3-component vector of float)
+0:242          'r059' (temp 3-component vector of float)
+0:242          Sign (global 3-component vector of float)
+0:242            'inF0' (in 3-component vector of float)
+0:243      Sequence
+0:243        move second child to first child (temp 3-component vector of float)
+0:243          'r060' (temp 3-component vector of float)
+0:243          sine (global 3-component vector of float)
+0:243            'inF0' (in 3-component vector of float)
+0:244      Sequence
+0:244        move second child to first child (temp 3-component vector of float)
+0:244          'inF1' (in 3-component vector of float)
+0:244          sine (temp 3-component vector of float)
+0:244            'inF0' (in 3-component vector of float)
+0:244        move second child to first child (temp 3-component vector of float)
+0:244          'inF2' (in 3-component vector of float)
+0:244          cosine (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          'r061' (temp 3-component vector of float)
+0:245          hyp. sine (global 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          'r062' (temp 3-component vector of float)
+0:246          smoothstep (global 3-component vector of float)
+0:246            'inF0' (in 3-component vector of float)
+0:246            'inF1' (in 3-component vector of float)
+0:246            'inF2' (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          'r063' (temp 3-component vector of float)
+0:247          sqrt (global 3-component vector of float)
+0:247            'inF0' (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          'r064' (temp 3-component vector of float)
+0:248          step (global 3-component vector of float)
+0:248            'inF0' (in 3-component vector of float)
+0:248            'inF1' (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          'r065' (temp 3-component vector of float)
+0:249          tangent (global 3-component vector of float)
+0:249            'inF0' (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          'r066' (temp 3-component vector of float)
+0:250          hyp. tangent (global 3-component vector of float)
+0:250            'inF0' (in 3-component vector of float)
+0:252      Sequence
+0:252        move second child to first child (temp 3-component vector of float)
+0:252          'r067' (temp 3-component vector of float)
+0:252          trunc (global 3-component vector of float)
+0:252            'inF0' (in 3-component vector of float)
+0:255      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:393  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
-0:253    Function Parameters: 
-0:253      'inF0' (in 4-component vector of float)
-0:253      'inF1' (in 4-component vector of float)
-0:253      'inF2' (in 4-component vector of float)
-0:253      'inU0' (in 4-component vector of uint)
-0:253      'inU1' (in 4-component vector of uint)
+0:399  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
+0:259    Function Parameters: 
+0:259      'inF0' (in 4-component vector of float)
+0:259      'inF1' (in 4-component vector of float)
+0:259      'inF2' (in 4-component vector of float)
+0:259      'inU0' (in 4-component vector of uint)
+0:259      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:256      all (global bool)
-0:256        'inF0' (in 4-component vector of float)
-0:257      Absolute value (global 4-component vector of float)
-0:257        'inF0' (in 4-component vector of float)
-0:258      arc cosine (global 4-component vector of float)
-0:258        'inF0' (in 4-component vector of float)
-0:259      any (global bool)
-0:259        'inF0' (in 4-component vector of float)
-0:260      arc sine (global 4-component vector of float)
-0:260        'inF0' (in 4-component vector of float)
-0:261      floatBitsToInt (global 4-component vector of int)
-0:261        'inF0' (in 4-component vector of float)
-0:262      floatBitsToUint (global 4-component vector of uint)
-0:262        'inF0' (in 4-component vector of float)
-0:263      intBitsToFloat (global 4-component vector of float)
-0:263        'inU0' (in 4-component vector of uint)
-0:265      arc tangent (global 4-component vector of float)
-0:265        'inF0' (in 4-component vector of float)
-0:266      arc tangent (global 4-component vector of float)
-0:266        'inF0' (in 4-component vector of float)
-0:266        'inF1' (in 4-component vector of float)
-0:267      Ceiling (global 4-component vector of float)
-0:267        'inF0' (in 4-component vector of float)
-0:268      clamp (global 4-component vector of float)
-0:268        'inF0' (in 4-component vector of float)
-0:268        'inF1' (in 4-component vector of float)
-0:268        'inF2' (in 4-component vector of float)
-0:269      Test condition and select (temp void)
-0:269        Condition
-0:269        any (temp bool)
-0:269          Compare Less Than (temp 4-component vector of bool)
-0:269            'inF0' (in 4-component vector of float)
-0:269            Constant:
-0:269              0.000000
-0:269              0.000000
-0:269              0.000000
-0:269              0.000000
-0:269        true case
-0:269        Branch: Kill
-0:270      cosine (global 4-component vector of float)
-0:270        'inF0' (in 4-component vector of float)
-0:271      hyp. cosine (global 4-component vector of float)
-0:271        'inF0' (in 4-component vector of float)
-0:?       bitCount (global 4-component vector of uint)
-0:?         Constant:
-0:?           7 (const uint)
-0:?           3 (const uint)
-0:?           5 (const uint)
-0:?           2 (const uint)
-0:273      dPdx (global 4-component vector of float)
-0:273        'inF0' (in 4-component vector of float)
-0:274      dPdxCoarse (global 4-component vector of float)
-0:274        'inF0' (in 4-component vector of float)
-0:275      dPdxFine (global 4-component vector of float)
-0:275        'inF0' (in 4-component vector of float)
-0:276      dPdy (global 4-component vector of float)
-0:276        'inF0' (in 4-component vector of float)
-0:277      dPdyCoarse (global 4-component vector of float)
-0:277        'inF0' (in 4-component vector of float)
-0:278      dPdyFine (global 4-component vector of float)
-0:278        'inF0' (in 4-component vector of float)
-0:279      degrees (global 4-component vector of float)
-0:279        'inF0' (in 4-component vector of float)
-0:280      distance (global float)
-0:280        'inF0' (in 4-component vector of float)
-0:280        'inF1' (in 4-component vector of float)
-0:281      dot-product (global float)
-0:281        'inF0' (in 4-component vector of float)
-0:281        'inF1' (in 4-component vector of float)
-0:282      Construct vec4 (temp 4-component vector of float)
-0:282        Constant:
-0:282          1.000000
-0:282        component-wise multiply (temp float)
-0:282          direct index (temp float)
+0:262      Sequence
+0:262        move second child to first child (temp bool)
+0:262          'r000' (temp bool)
+0:262          all (global bool)
+0:262            'inF0' (in 4-component vector of float)
+0:263      Sequence
+0:263        move second child to first child (temp 4-component vector of float)
+0:263          'r001' (temp 4-component vector of float)
+0:263          Absolute value (global 4-component vector of float)
+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          'r002' (temp 4-component vector of float)
+0:264          arc cosine (global 4-component vector of float)
+0:264            'inF0' (in 4-component vector of float)
+0:265      Sequence
+0:265        move second child to first child (temp bool)
+0:265          'r003' (temp bool)
+0:265          any (global bool)
+0:265            'inF0' (in 4-component vector of float)
+0:266      Sequence
+0:266        move second child to first child (temp 4-component vector of float)
+0:266          'r004' (temp 4-component vector of float)
+0:266          arc sine (global 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 int)
+0:267          'r005' (temp 4-component vector of int)
+0:267          floatBitsToInt (global 4-component vector of int)
+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 uint)
+0:268          'r006' (temp 4-component vector of uint)
+0:268          floatBitsToUint (global 4-component vector of uint)
+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 float)
+0:269          'r007' (temp 4-component vector of float)
+0:269          intBitsToFloat (global 4-component vector of float)
+0:269            'inU0' (in 4-component vector of uint)
+0:271      Sequence
+0:271        move second child to first child (temp 4-component vector of float)
+0:271          'r009' (temp 4-component vector of float)
+0:271          arc tangent (global 4-component vector of float)
+0:271            'inF0' (in 4-component vector of float)
+0:272      Sequence
+0:272        move second child to first child (temp 4-component vector of float)
+0:272          'r010' (temp 4-component vector of float)
+0:272          arc tangent (global 4-component vector of float)
+0:272            'inF0' (in 4-component vector of float)
+0:272            'inF1' (in 4-component vector of float)
+0:273      Sequence
+0:273        move second child to first child (temp 4-component vector of float)
+0:273          'r011' (temp 4-component vector of float)
+0:273          Ceiling (global 4-component vector of float)
+0:273            'inF0' (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          'r012' (temp 4-component vector of float)
+0:274          clamp (global 4-component vector of float)
+0:274            'inF0' (in 4-component vector of float)
+0:274            'inF1' (in 4-component vector of float)
+0:274            'inF2' (in 4-component vector of float)
+0:275      Test condition and select (temp void)
+0:275        Condition
+0:275        any (temp bool)
+0:275          Compare Less Than (temp 4-component vector of bool)
+0:275            'inF0' (in 4-component vector of float)
+0:275            Constant:
+0:275              0.000000
+0:275              0.000000
+0:275              0.000000
+0:275              0.000000
+0:275        true case
+0:275        Branch: Kill
+0:276      Sequence
+0:276        move second child to first child (temp 4-component vector of float)
+0:276          'r013' (temp 4-component vector of float)
+0:276          cosine (global 4-component vector of float)
+0:276            'inF0' (in 4-component vector of float)
+0:277      Sequence
+0:277        move second child to first child (temp 4-component vector of float)
+0:277          'r014' (temp 4-component vector of float)
+0:277          hyp. cosine (global 4-component vector of float)
+0:277            'inF0' (in 4-component vector of float)
+0:278      Sequence
+0:278        move second child to first child (temp 4-component vector of uint)
+0:278          'r015' (temp 4-component vector of uint)
+0:?           bitCount (global 4-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               3 (const uint)
+0:?               5 (const uint)
+0:?               2 (const uint)
+0:279      Sequence
+0:279        move second child to first child (temp 4-component vector of float)
+0:279          'r016' (temp 4-component vector of float)
+0:279          dPdx (global 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 float)
+0:280          'r017' (temp 4-component vector of float)
+0:280          dPdxCoarse (global 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 float)
+0:281          'r018' (temp 4-component vector of float)
+0:281          dPdxFine (global 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          'r019' (temp 4-component vector of float)
+0:282          dPdy (global 4-component vector of float)
 0:282            'inF0' (in 4-component vector of float)
-0:282            Constant:
-0:282              1 (const int)
-0:282          direct index (temp float)
-0:282            'inF1' (in 4-component vector of float)
-0:282            Constant:
-0:282              1 (const int)
-0:282        direct index (temp float)
-0:282          'inF0' (in 4-component vector of float)
-0:282          Constant:
-0:282            2 (const int)
-0:282        direct index (temp float)
-0:282          'inF1' (in 4-component vector of float)
-0:282          Constant:
-0:282            3 (const int)
-0:286      exp (global 4-component vector of float)
-0:286        'inF0' (in 4-component vector of float)
-0:287      exp2 (global 4-component vector of float)
-0:287        'inF0' (in 4-component vector of float)
-0:288      face-forward (global 4-component vector of float)
-0:288        'inF0' (in 4-component vector of float)
-0:288        'inF1' (in 4-component vector of float)
-0:288        'inF2' (in 4-component vector of float)
-0:289      findMSB (global int)
-0:289        Constant:
-0:289          7 (const int)
-0:290      findLSB (global int)
-0:290        Constant:
-0:290          7 (const int)
-0:291      Floor (global 4-component vector of float)
-0:291        'inF0' (in 4-component vector of float)
-0:293      mod (global 4-component vector of float)
-0:293        'inF0' (in 4-component vector of float)
-0:293        'inF1' (in 4-component vector of float)
-0:294      Fraction (global 4-component vector of float)
-0:294        'inF0' (in 4-component vector of float)
-0:295      frexp (global 4-component vector of float)
-0:295        'inF0' (in 4-component vector of float)
-0:295        'inF1' (in 4-component vector of float)
-0:296      fwidth (global 4-component vector of float)
-0:296        'inF0' (in 4-component vector of float)
-0:297      isinf (global 4-component vector of bool)
-0:297        'inF0' (in 4-component vector of float)
-0:298      isnan (global 4-component vector of bool)
-0:298        'inF0' (in 4-component vector of float)
-0:299      ldexp (global 4-component vector of float)
-0:299        'inF0' (in 4-component vector of float)
-0:299        'inF1' (in 4-component vector of float)
-0:300      length (global float)
-0:300        'inF0' (in 4-component vector of float)
-0:301      log (global 4-component vector of float)
-0:301        'inF0' (in 4-component vector of float)
-0:302      vector-scale (temp 4-component vector of float)
-0:302        log2 (temp 4-component vector of float)
-0:302          'inF0' (in 4-component vector of float)
-0:302        Constant:
-0:302          0.301030
-0:303      log2 (global 4-component vector of float)
-0:303        'inF0' (in 4-component vector of float)
-0:304      max (global 4-component vector of float)
-0:304        'inF0' (in 4-component vector of float)
-0:304        'inF1' (in 4-component vector of float)
-0:305      min (global 4-component vector of float)
-0:305        'inF0' (in 4-component vector of float)
-0:305        'inF1' (in 4-component vector of float)
-0:306      normalize (global 4-component vector of float)
-0:306        'inF0' (in 4-component vector of float)
-0:307      pow (global 4-component vector of float)
-0:307        'inF0' (in 4-component vector of float)
-0:307        'inF1' (in 4-component vector of float)
-0:308      radians (global 4-component vector of float)
-0:308        'inF0' (in 4-component vector of float)
-0:309      divide (temp 4-component vector of float)
-0:309        Constant:
-0:309          1.000000
-0:309        'inF0' (in 4-component vector of float)
-0:310      reflect (global 4-component vector of float)
-0:310        'inF0' (in 4-component vector of float)
-0:310        'inF1' (in 4-component vector of float)
-0:311      refract (global 4-component vector of float)
-0:311        'inF0' (in 4-component vector of float)
-0:311        'inF1' (in 4-component vector of float)
-0:311        Constant:
-0:311          2.000000
-0:?       bitFieldReverse (global 4-component vector of uint)
-0:?         Constant:
-0:?           1 (const uint)
-0:?           2 (const uint)
-0:?           3 (const uint)
-0:?           4 (const uint)
-0:313      roundEven (global 4-component vector of float)
-0:313        'inF0' (in 4-component vector of float)
-0:314      inverse sqrt (global 4-component vector of float)
-0:314        'inF0' (in 4-component vector of float)
-0:315      clamp (temp 4-component vector of float)
-0:315        'inF0' (in 4-component vector of float)
-0:315        Constant:
-0:315          0.000000
-0:315        Constant:
-0:315          1.000000
-0:316      Sign (global 4-component vector of float)
-0:316        'inF0' (in 4-component vector of float)
-0:317      sine (global 4-component vector of float)
-0:317        '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          'r020' (temp 4-component vector of float)
+0:283          dPdyCoarse (global 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          'r021' (temp 4-component vector of float)
+0:284          dPdyFine (global 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          'r022' (temp 4-component vector of float)
+0:285          degrees (global 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 float)
+0:286          'r023' (temp float)
+0:286          distance (global float)
+0:286            'inF0' (in 4-component vector of float)
+0:286            'inF1' (in 4-component vector of float)
+0:287      Sequence
+0:287        move second child to first child (temp float)
+0:287          'r024' (temp float)
+0:287          dot-product (global float)
+0:287            'inF0' (in 4-component vector of float)
+0:287            'inF1' (in 4-component vector of float)
+0:288      Sequence
+0:288        move second child to first child (temp 4-component vector of float)
+0:288          'r025' (temp 4-component vector of float)
+0:288          Construct vec4 (temp 4-component vector of float)
+0:288            Constant:
+0:288              1.000000
+0:288            component-wise multiply (temp float)
+0:288              direct index (temp float)
+0:288                'inF0' (in 4-component vector of float)
+0:288                Constant:
+0:288                  1 (const int)
+0:288              direct index (temp float)
+0:288                'inF1' (in 4-component vector of float)
+0:288                Constant:
+0:288                  1 (const int)
+0:288            direct index (temp float)
+0:288              'inF0' (in 4-component vector of float)
+0:288              Constant:
+0:288                2 (const int)
+0:288            direct index (temp float)
+0:288              'inF1' (in 4-component vector of float)
+0:288              Constant:
+0:288                3 (const int)
+0:292      Sequence
+0:292        move second child to first child (temp 4-component vector of float)
+0:292          'r029' (temp 4-component vector of float)
+0:292          exp (global 4-component vector of float)
+0:292            'inF0' (in 4-component vector of float)
+0:293      Sequence
+0:293        move second child to first child (temp 4-component vector of float)
+0:293          'r030' (temp 4-component vector of float)
+0:293          exp2 (global 4-component vector of float)
+0:293            'inF0' (in 4-component vector of float)
+0:294      Sequence
+0:294        move second child to first child (temp 4-component vector of float)
+0:294          'r031' (temp 4-component vector of float)
+0:294          face-forward (global 4-component vector of float)
+0:294            'inF0' (in 4-component vector of float)
+0:294            'inF1' (in 4-component vector of float)
+0:294            'inF2' (in 4-component vector of float)
+0:295      Sequence
+0:295        move second child to first child (temp 4-component vector of uint)
+0:295          'r032' (temp 4-component vector of uint)
+0:?           findMSB (global 4-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               8 (const uint)
+0:?               9 (const uint)
+0:?               10 (const uint)
+0:296      Sequence
+0:296        move second child to first child (temp 4-component vector of uint)
+0:296          'r033' (temp 4-component vector of uint)
+0:?           findLSB (global 4-component vector of uint)
+0:?             Constant:
+0:?               7 (const uint)
+0:?               8 (const uint)
+0:?               9 (const uint)
+0:?               10 (const uint)
+0:297      Sequence
+0:297        move second child to first child (temp 4-component vector of float)
+0:297          'r034' (temp 4-component vector of float)
+0:297          Floor (global 4-component vector of float)
+0:297            'inF0' (in 4-component vector of float)
+0:299      Sequence
+0:299        move second child to first child (temp 4-component vector of float)
+0:299          'r036' (temp 4-component vector of float)
+0:299          mod (global 4-component vector of float)
+0:299            'inF0' (in 4-component vector of float)
+0:299            '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          'r037' (temp 4-component vector of float)
+0:300          Fraction (global 4-component vector of float)
+0:300            '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          'r038' (temp 4-component vector of float)
+0:301          frexp (global 4-component vector of float)
+0:301            'inF0' (in 4-component vector of float)
+0:301            'inF1' (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          'r039' (temp 4-component vector of float)
+0:302          fwidth (global 4-component vector of float)
+0:302            'inF0' (in 4-component vector of float)
+0:303      Sequence
+0:303        move second child to first child (temp 4-component vector of bool)
+0:303          'r040' (temp 4-component vector of bool)
+0:303          isinf (global 4-component vector of bool)
+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          'r041' (temp 4-component vector of bool)
+0:304          isnan (global 4-component vector of bool)
+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 float)
+0:305          'r042' (temp 4-component vector of float)
+0:305          ldexp (global 4-component vector of float)
+0:305            'inF0' (in 4-component vector of float)
+0:305            'inF1' (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          'r039a' (temp 4-component vector of float)
+0:306          mix (global 4-component vector of float)
+0:306            'inF0' (in 4-component vector of float)
+0:306            'inF1' (in 4-component vector of float)
+0:306            'inF2' (in 4-component vector of float)
+0:307      Sequence
+0:307        move second child to first child (temp float)
+0:307          'r043' (temp float)
+0:307          length (global float)
+0:307            'inF0' (in 4-component vector of float)
+0:308      Sequence
+0:308        move second child to first child (temp 4-component vector of float)
+0:308          'r044' (temp 4-component vector of float)
+0:308          log (global 4-component vector of float)
+0:308            'inF0' (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          'r045' (temp 4-component vector of float)
+0:309          vector-scale (temp 4-component vector of float)
+0:309            log2 (temp 4-component vector of float)
+0:309              'inF0' (in 4-component vector of float)
+0:309            Constant:
+0:309              0.301030
+0:310      Sequence
+0:310        move second child to first child (temp 4-component vector of float)
+0:310          'r046' (temp 4-component vector of float)
+0:310          log2 (global 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          'r047' (temp 4-component vector of float)
+0:311          max (global 4-component vector of float)
+0:311            'inF0' (in 4-component vector of float)
+0:311            'inF1' (in 4-component vector of float)
+0:312      Sequence
+0:312        move second child to first child (temp 4-component vector of float)
+0:312          'r048' (temp 4-component vector of float)
+0:312          min (global 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          'r049' (temp 4-component vector of float)
+0:313          normalize (global 4-component vector of float)
+0:313            'inF0' (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          'r050' (temp 4-component vector of float)
+0:314          pow (global 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          'r051' (temp 4-component vector of float)
+0:315          radians (global 4-component vector of float)
+0:315            'inF0' (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          'r052' (temp 4-component vector of float)
+0:316          divide (temp 4-component vector of float)
+0:316            Constant:
+0:316              1.000000
+0:316            'inF0' (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          'r053' (temp 4-component vector of float)
+0:317          reflect (global 4-component vector of float)
+0:317            'inF0' (in 4-component vector of float)
+0:317            'inF1' (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          'inF1' (in 4-component vector of float)
-0:318          sine (temp 4-component vector of float)
+0:318          'r054' (temp 4-component vector of float)
+0:318          refract (global 4-component vector of float)
 0:318            'inF0' (in 4-component vector of float)
-0:318        move second child to first child (temp 4-component vector of float)
-0:318          'inF2' (in 4-component vector of float)
-0:318          cosine (temp 4-component vector of float)
-0:318            'inF0' (in 4-component vector of float)
-0:319      hyp. sine (global 4-component vector of float)
-0:319        'inF0' (in 4-component vector of float)
-0:320      smoothstep (global 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        'inF2' (in 4-component vector of float)
-0:321      sqrt (global 4-component vector of float)
-0:321        'inF0' (in 4-component vector of float)
-0:322      step (global 4-component vector of float)
-0:322        'inF0' (in 4-component vector of float)
-0:322        'inF1' (in 4-component vector of float)
-0:323      tangent (global 4-component vector of float)
-0:323        'inF0' (in 4-component vector of float)
-0:324      hyp. tangent (global 4-component vector of float)
-0:324        'inF0' (in 4-component vector of float)
-0:326      trunc (global 4-component vector of float)
-0:326        'inF0' (in 4-component vector of float)
-0:329      Branch: Return with expression
+0:318            'inF1' (in 4-component vector of float)
+0:318            Constant:
+0:318              2.000000
+0:319      Sequence
+0:319        move second child to first child (temp 4-component vector of uint)
+0:319          'r055' (temp 4-component vector of uint)
+0:?           bitFieldReverse (global 4-component vector of uint)
+0:?             Constant:
+0:?               1 (const uint)
+0:?               2 (const uint)
+0:?               3 (const uint)
+0:?               4 (const uint)
+0:320      Sequence
+0:320        move second child to first child (temp 4-component vector of float)
+0:320          'r056' (temp 4-component vector of float)
+0:320          roundEven (global 4-component vector of float)
+0:320            'inF0' (in 4-component vector of float)
+0:321      Sequence
+0:321        move second child to first child (temp 4-component vector of float)
+0:321          'r057' (temp 4-component vector of float)
+0:321          inverse sqrt (global 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          'r058' (temp 4-component vector of float)
+0:322          clamp (temp 4-component vector of float)
+0:322            'inF0' (in 4-component vector of float)
+0:322            Constant:
+0:322              0.000000
+0:322            Constant:
+0:322              1.000000
+0:323      Sequence
+0:323        move second child to first child (temp 4-component vector of float)
+0:323          'r059' (temp 4-component vector of float)
+0:323          Sign (global 4-component vector of float)
+0:323            'inF0' (in 4-component vector of float)
+0:324      Sequence
+0:324        move second child to first child (temp 4-component vector of float)
+0:324          'r060' (temp 4-component vector of float)
+0:324          sine (global 4-component vector of float)
+0:324            'inF0' (in 4-component vector of float)
+0:325      Sequence
+0:325        move second child to first child (temp 4-component vector of float)
+0:325          'inF1' (in 4-component vector of float)
+0:325          sine (temp 4-component vector of float)
+0:325            'inF0' (in 4-component vector of float)
+0:325        move second child to first child (temp 4-component vector of float)
+0:325          'inF2' (in 4-component vector of float)
+0:325          cosine (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          'r061' (temp 4-component vector of float)
+0:326          hyp. sine (global 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          'r062' (temp 4-component vector of float)
+0:327          smoothstep (global 4-component vector of float)
+0:327            'inF0' (in 4-component vector of float)
+0:327            'inF1' (in 4-component vector of float)
+0:327            'inF2' (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          'r063' (temp 4-component vector of float)
+0:328          sqrt (global 4-component vector of float)
+0:328            'inF0' (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          'r064' (temp 4-component vector of float)
+0:329          step (global 4-component vector of float)
+0:329            'inF0' (in 4-component vector of float)
+0:329            'inF1' (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          'r065' (temp 4-component vector of float)
+0:330          tangent (global 4-component vector of float)
+0:330            'inF0' (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          'r066' (temp 4-component vector of float)
+0:331          hyp. tangent (global 4-component vector of float)
+0:331            'inF0' (in 4-component vector of float)
+0:333      Sequence
+0:333        move second child to first child (temp 4-component vector of float)
+0:333          'r067' (temp 4-component vector of float)
+0:333          trunc (global 4-component vector of float)
+0:333            'inF0' (in 4-component vector of float)
+0:336      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:402  Function Definition: PixelShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float)
-0:394    Function Parameters: 
-0:394      'inF0' (in 2X2 matrix of float)
-0:394      'inF1' (in 2X2 matrix of float)
-0:394      'inF2' (in 2X2 matrix of float)
+0:408  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 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:?     Sequence
-0:396      all (global bool)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      Absolute value (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      arc cosine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      any (global bool)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      arc sine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      arc tangent (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      arc tangent (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      Ceiling (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      Test condition and select (temp void)
-0:396        Condition
-0:396        any (temp bool)
-0:396          Compare Less Than (temp 2X2 matrix of bool)
-0:396            'inF0' (in 2X2 matrix of float)
-0:396            Constant:
-0:396              0.000000
-0:396              0.000000
-0:396              0.000000
-0:396              0.000000
-0:396        true case
-0:396        Branch: Kill
-0:396      clamp (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396        'inF2' (in 2X2 matrix of float)
-0:396      cosine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      hyp. cosine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdx (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdxCoarse (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdxFine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdy (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdyCoarse (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      dPdyFine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      degrees (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      determinant (global float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      exp (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      exp2 (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      findMSB (global int)
-0:396        Constant:
-0:396          7 (const int)
-0:396      findLSB (global int)
-0:396        Constant:
-0:396          7 (const int)
-0:396      Floor (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      mod (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      Fraction (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      frexp (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      fwidth (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      ldexp (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      log (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      matrix-scale (temp 2X2 matrix of float)
-0:396        log2 (temp 2X2 matrix of float)
-0:396          'inF0' (in 2X2 matrix of float)
-0:396        Constant:
-0:396          0.301030
-0:396      log2 (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      max (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      min (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      pow (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      radians (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      roundEven (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      inverse sqrt (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      clamp (temp 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        Constant:
-0:396          0.000000
-0:396        Constant:
-0:396          1.000000
-0:396      Sign (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      sine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      Sequence
-0:396        move second child to first child (temp 2X2 matrix of float)
-0:396          'inF1' (in 2X2 matrix of float)
-0:396          sine (temp 2X2 matrix of float)
-0:396            'inF0' (in 2X2 matrix of float)
-0:396        move second child to first child (temp 2X2 matrix of float)
-0:396          'inF2' (in 2X2 matrix of float)
-0:396          cosine (temp 2X2 matrix of float)
-0:396            'inF0' (in 2X2 matrix of float)
-0:396      hyp. sine (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      smoothstep (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396        'inF2' (in 2X2 matrix of float)
-0:396      sqrt (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      step (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396        'inF1' (in 2X2 matrix of float)
-0:396      tangent (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      hyp. tangent (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      transpose (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:396      trunc (global 2X2 matrix of float)
-0:396        'inF0' (in 2X2 matrix of float)
-0:399      Branch: Return with expression
+0:402      Sequence
+0:402        move second child to first child (temp bool)
+0:402          'r000' (temp bool)
+0:402          all (global 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 (global 2X2 matrix of float)
+0:402            'inF0' (in 2X2 matrix of float)
+0:402      arc cosine (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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          'r024' (temp 2X2 matrix of float)
+0:402          frexp (global 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          'r025' (temp 2X2 matrix of float)
+0:402          fwidth (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 2X2 matrix of float)
+0:402            'inF0' (in 2X2 matrix of float)
+0:402      transpose (global 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 (global 2X2 matrix of float)
+0:402            'inF0' (in 2X2 matrix of float)
+0:405      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:411  Function Definition: PixelShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float)
-0:403    Function Parameters: 
-0:403      'inF0' (in 3X3 matrix of float)
-0:403      'inF1' (in 3X3 matrix of float)
-0:403      'inF2' (in 3X3 matrix of float)
+0:417  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 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:?     Sequence
-0:405      all (global bool)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      Absolute value (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      arc cosine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      any (global bool)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      arc sine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      arc tangent (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      arc tangent (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      Ceiling (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      Test condition and select (temp void)
-0:405        Condition
-0:405        any (temp bool)
-0:405          Compare Less Than (temp 3X3 matrix of bool)
-0:405            'inF0' (in 3X3 matrix of float)
-0:405            Constant:
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405              0.000000
-0:405        true case
-0:405        Branch: Kill
-0:405      clamp (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405        'inF2' (in 3X3 matrix of float)
-0:405      cosine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      hyp. cosine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdx (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdxCoarse (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdxFine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdy (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdyCoarse (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      dPdyFine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      degrees (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      determinant (global float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      exp (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      exp2 (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      findMSB (global int)
-0:405        Constant:
-0:405          7 (const int)
-0:405      findLSB (global int)
-0:405        Constant:
-0:405          7 (const int)
-0:405      Floor (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      mod (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      Fraction (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      frexp (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      fwidth (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      ldexp (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      log (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      matrix-scale (temp 3X3 matrix of float)
-0:405        log2 (temp 3X3 matrix of float)
-0:405          'inF0' (in 3X3 matrix of float)
-0:405        Constant:
-0:405          0.301030
-0:405      log2 (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      max (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      min (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      pow (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      radians (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      roundEven (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      inverse sqrt (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      clamp (temp 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        Constant:
-0:405          0.000000
-0:405        Constant:
-0:405          1.000000
-0:405      Sign (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      sine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      Sequence
-0:405        move second child to first child (temp 3X3 matrix of float)
-0:405          'inF1' (in 3X3 matrix of float)
-0:405          sine (temp 3X3 matrix of float)
-0:405            'inF0' (in 3X3 matrix of float)
-0:405        move second child to first child (temp 3X3 matrix of float)
-0:405          'inF2' (in 3X3 matrix of float)
-0:405          cosine (temp 3X3 matrix of float)
-0:405            'inF0' (in 3X3 matrix of float)
-0:405      hyp. sine (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      smoothstep (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405        'inF2' (in 3X3 matrix of float)
-0:405      sqrt (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      step (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405        'inF1' (in 3X3 matrix of float)
-0:405      tangent (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      hyp. tangent (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      transpose (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:405      trunc (global 3X3 matrix of float)
-0:405        'inF0' (in 3X3 matrix of float)
-0:408      Branch: Return with expression
+0:411      Sequence
+0:411        move second child to first child (temp bool)
+0:411          'r000' (temp bool)
+0:411          all (global 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 (global 3X3 matrix of float)
+0:411            'inF0' (in 3X3 matrix of float)
+0:411      arc cosine (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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          'r024' (temp 3X3 matrix of float)
+0:411          frexp (global 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          'r025' (temp 3X3 matrix of float)
+0:411          fwidth (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 3X3 matrix of float)
+0:411            'inF0' (in 3X3 matrix of float)
+0:411      transpose (global 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 (global 3X3 matrix of float)
+0:411            'inF0' (in 3X3 matrix of float)
+0:414      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -2543,165 +4906,301 @@ gl_FragCoord origin is upper left
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:432  Function Definition: PixelShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float)
-0:412    Function Parameters: 
-0:412      'inF0' (in 4X4 matrix of float)
-0:412      'inF1' (in 4X4 matrix of float)
-0:412      'inF2' (in 4X4 matrix of float)
+0:438  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 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:?     Sequence
-0:414      all (global bool)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      Absolute value (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      arc cosine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      any (global bool)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      arc sine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      arc tangent (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      arc tangent (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      Ceiling (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      Test condition and select (temp void)
-0:414        Condition
-0:414        any (temp bool)
-0:414          Compare Less Than (temp 4X4 matrix of bool)
-0:414            'inF0' (in 4X4 matrix of float)
-0:414            Constant:
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414              0.000000
-0:414        true case
-0:414        Branch: Kill
-0:414      clamp (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414        'inF2' (in 4X4 matrix of float)
-0:414      cosine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      hyp. cosine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdx (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdxCoarse (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdxFine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdy (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdyCoarse (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      dPdyFine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      degrees (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      determinant (global float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      exp (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      exp2 (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      findMSB (global int)
-0:414        Constant:
-0:414          7 (const int)
-0:414      findLSB (global int)
-0:414        Constant:
-0:414          7 (const int)
-0:414      Floor (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      mod (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      Fraction (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      frexp (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      fwidth (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      ldexp (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      log (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      matrix-scale (temp 4X4 matrix of float)
-0:414        log2 (temp 4X4 matrix of float)
-0:414          'inF0' (in 4X4 matrix of float)
-0:414        Constant:
-0:414          0.301030
-0:414      log2 (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      max (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      min (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      pow (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      radians (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      roundEven (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      inverse sqrt (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      clamp (temp 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        Constant:
-0:414          0.000000
-0:414        Constant:
-0:414          1.000000
-0:414      Sign (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      sine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      Sequence
-0:414        move second child to first child (temp 4X4 matrix of float)
-0:414          'inF1' (in 4X4 matrix of float)
-0:414          sine (temp 4X4 matrix of float)
-0:414            'inF0' (in 4X4 matrix of float)
-0:414        move second child to first child (temp 4X4 matrix of float)
-0:414          'inF2' (in 4X4 matrix of float)
-0:414          cosine (temp 4X4 matrix of float)
-0:414            'inF0' (in 4X4 matrix of float)
-0:414      hyp. sine (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      smoothstep (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414        'inF2' (in 4X4 matrix of float)
-0:414      sqrt (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      step (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414        'inF1' (in 4X4 matrix of float)
-0:414      tangent (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      hyp. tangent (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      transpose (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:414      trunc (global 4X4 matrix of float)
-0:414        'inF0' (in 4X4 matrix of float)
-0:417      Branch: Return with expression
+0:420      Sequence
+0:420        move second child to first child (temp bool)
+0:420          'r000' (temp bool)
+0:420          all (global 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 (global 4X4 matrix of float)
+0:420            'inF0' (in 4X4 matrix of float)
+0:420      arc cosine (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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          'r024' (temp 4X4 matrix of float)
+0:420          frexp (global 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          'r025' (temp 4X4 matrix of float)
+0:420          fwidth (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 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 (global 4X4 matrix of float)
+0:420            'inF0' (in 4X4 matrix of float)
+0:420      transpose (global 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 (global 4X4 matrix of float)
+0:420            'inF0' (in 4X4 matrix of float)
+0:423      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -2719,713 +5218,3126 @@ gl_FragCoord origin is upper left
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:439  Function Definition: TestGenMul(f1;f1;vf2;vf2;mf22;mf22; (temp void)
-0:435    Function Parameters: 
-0:435      'inF0' (in float)
-0:435      'inF1' (in float)
-0:435      'inFV0' (in 2-component vector of float)
-0:435      'inFV1' (in 2-component vector of float)
-0:435      'inFM0' (in 2X2 matrix of float)
-0:435      'inFM1' (in 2X2 matrix of float)
+0:445  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global 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:?     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            'inF0' (in float)
+0:442            'inF1' (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            'inFV0' (in 2-component vector of 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          'r2' (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 float)
+0:442          'r3' (temp float)
+0:442          dot-product (global 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          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 2-component vector of float)
+0:442          'r5' (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 2X2 matrix of float)
+0:442          'r6' (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          'r7' (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          'r8' (temp 2X2 matrix of float)
+0:442          matrix-multiply (temp 2X2 matrix of float)
+0:442            'inFM0' (in 2X2 matrix of float)
+0:442            'inFM1' (in 2X2 matrix of float)
+0:452  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global 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:?     Sequence
-0:436      move second child to first child (temp float)
-0:436        'r0' (temp float)
-0:436        component-wise multiply (temp float)
-0:436          'inF0' (in float)
-0:436          'inF1' (in float)
-0:436      move second child to first child (temp 2-component vector of float)
-0:436        'r1' (temp 2-component vector of float)
-0:436        vector-scale (temp 2-component vector of float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436          'inF0' (in float)
-0:436      move second child to first child (temp 2-component vector of float)
-0:436        'r2' (temp 2-component vector of float)
-0:436        vector-scale (temp 2-component vector of float)
-0:436          'inF0' (in float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436      move second child to first child (temp float)
-0:436        'r3' (temp float)
-0:436        dot-product (global float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436          'inFV1' (in 2-component vector of float)
-0:436      move second child to first child (temp 2-component vector of float)
-0:436        'r4' (temp 2-component vector of float)
-0:436        matrix-times-vector (temp 2-component vector of float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436      move second child to first child (temp 2-component vector of float)
-0:436        'r5' (temp 2-component vector of float)
-0:436        vector-times-matrix (temp 2-component vector of float)
-0:436          'inFV0' (in 2-component vector of float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436      move second child to first child (temp 2X2 matrix of float)
-0:436        'r6' (temp 2X2 matrix of float)
-0:436        matrix-scale (temp 2X2 matrix of float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436          'inF0' (in float)
-0:436      move second child to first child (temp 2X2 matrix of float)
-0:436        'r7' (temp 2X2 matrix of float)
-0:436        matrix-scale (temp 2X2 matrix of float)
-0:436          'inF0' (in float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436      move second child to first child (temp 2X2 matrix of float)
-0:436        'r8' (temp 2X2 matrix of float)
-0:436        matrix-multiply (temp 2X2 matrix of float)
-0:436          'inFM0' (in 2X2 matrix of float)
-0:436          'inFM1' (in 2X2 matrix of float)
-0:446  Function Definition: TestGenMul(f1;f1;vf3;vf3;mf33;mf33; (temp void)
-0:442    Function Parameters: 
-0:442      'inF0' (in float)
-0:442      'inF1' (in float)
-0:442      'inFV0' (in 3-component vector of float)
-0:442      'inFV1' (in 3-component vector of float)
-0:442      'inFM0' (in 3X3 matrix of float)
-0:442      'inFM1' (in 3X3 matrix of float)
+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            'inF0' (in float)
+0:449            'inF1' (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            'inFV0' (in 3-component vector of 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          'r2' (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 float)
+0:449          'r3' (temp float)
+0:449          dot-product (global 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          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 3-component vector of float)
+0:449          'r5' (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 3X3 matrix of float)
+0:449          'r6' (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          'r7' (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          'r8' (temp 3X3 matrix of float)
+0:449          matrix-multiply (temp 3X3 matrix of float)
+0:449            'inFM0' (in 3X3 matrix of float)
+0:449            'inFM1' (in 3X3 matrix of float)
+0:460  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global 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:?     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          'inF0' (in float)
-0:443          'inF1' (in float)
-0:443      move second child to first child (temp 3-component vector of float)
-0:443        'r1' (temp 3-component vector of float)
-0:443        vector-scale (temp 3-component vector of float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443          'inF0' (in float)
-0:443      move second child to first child (temp 3-component vector of float)
-0:443        'r2' (temp 3-component vector of float)
-0:443        vector-scale (temp 3-component vector of float)
-0:443          'inF0' (in float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443      move second child to first child (temp float)
-0:443        'r3' (temp float)
-0:443        dot-product (global float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443          'inFV1' (in 3-component vector of float)
-0:443      move second child to first child (temp 3-component vector of float)
-0:443        'r4' (temp 3-component vector of float)
-0:443        matrix-times-vector (temp 3-component vector of float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443      move second child to first child (temp 3-component vector of float)
-0:443        'r5' (temp 3-component vector of float)
-0:443        vector-times-matrix (temp 3-component vector of float)
-0:443          'inFV0' (in 3-component vector of float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443      move second child to first child (temp 3X3 matrix of float)
-0:443        'r6' (temp 3X3 matrix of float)
-0:443        matrix-scale (temp 3X3 matrix of float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443          'inF0' (in float)
-0:443      move second child to first child (temp 3X3 matrix of float)
-0:443        'r7' (temp 3X3 matrix of float)
-0:443        matrix-scale (temp 3X3 matrix of float)
-0:443          'inF0' (in float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443      move second child to first child (temp 3X3 matrix of float)
-0:443        'r8' (temp 3X3 matrix of float)
-0:443        matrix-multiply (temp 3X3 matrix of float)
-0:443          'inFM0' (in 3X3 matrix of float)
-0:443          'inFM1' (in 3X3 matrix of float)
-0:452  Function Definition: TestGenMul(f1;f1;vf4;vf4;mf44;mf44; (temp void)
-0:449    Function Parameters: 
-0:449      'inF0' (in float)
-0:449      'inF1' (in float)
-0:449      'inFV0' (in 4-component vector of float)
-0:449      'inFV1' (in 4-component vector of float)
-0:449      'inFM0' (in 4X4 matrix of float)
-0:449      'inFM1' (in 4X4 matrix of float)
+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            'inF0' (in float)
+0:456            'inF1' (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            'inFV0' (in 4-component vector of 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          'r2' (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 float)
+0:456          'r3' (temp float)
+0:456          dot-product (global 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          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 4-component vector of float)
+0:456          'r5' (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 4X4 matrix of float)
+0:456          'r6' (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          'r7' (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          'r8' (temp 4X4 matrix of float)
+0:456          matrix-multiply (temp 4X4 matrix of float)
+0:456            'inFM0' (in 4X4 matrix of float)
+0:456            'inFM1' (in 4X4 matrix of float)
+0:484  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42; (global 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 3X2 matrix of float)
+0:465      'inFM3x2' (in 2X3 matrix of float)
+0:465      'inFM3x3' (in 3X3 matrix of float)
+0:465      'inFM3x4' (in 4X3 matrix of float)
+0:465      'inFM2x4' (in 4X2 matrix of float)
 0:?     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          'inF0' (in float)
-0:450          'inF1' (in float)
-0:450      move second child to first child (temp 4-component vector of float)
-0:450        'r1' (temp 4-component vector of float)
-0:450        vector-scale (temp 4-component vector of float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450          'inF0' (in float)
-0:450      move second child to first child (temp 4-component vector of float)
-0:450        'r2' (temp 4-component vector of float)
-0:450        vector-scale (temp 4-component vector of float)
-0:450          'inF0' (in float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450      move second child to first child (temp float)
-0:450        'r3' (temp float)
-0:450        dot-product (global float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450          'inFV1' (in 4-component vector of float)
-0:450      move second child to first child (temp 4-component vector of float)
-0:450        'r4' (temp 4-component vector of float)
-0:450        matrix-times-vector (temp 4-component vector of float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450      move second child to first child (temp 4-component vector of float)
-0:450        'r5' (temp 4-component vector of float)
-0:450        vector-times-matrix (temp 4-component vector of float)
-0:450          'inFV0' (in 4-component vector of float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450      move second child to first child (temp 4X4 matrix of float)
-0:450        'r6' (temp 4X4 matrix of float)
-0:450        matrix-scale (temp 4X4 matrix of float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450          'inF0' (in float)
-0:450      move second child to first child (temp 4X4 matrix of float)
-0:450        'r7' (temp 4X4 matrix of float)
-0:450        matrix-scale (temp 4X4 matrix of float)
-0:450          'inF0' (in float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450      move second child to first child (temp 4X4 matrix of float)
-0:450        'r8' (temp 4X4 matrix of float)
-0:450        matrix-multiply (temp 4X4 matrix of float)
-0:450          'inFM0' (in 4X4 matrix of float)
-0:450          'inFM1' (in 4X4 matrix of float)
+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            'inF0' (in float)
+0:466            'inF1' (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            'inFV2' (in 2-component vector of float)
+0:467            'inF0' (in 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            'inFV3' (in 3-component vector of float)
+0:468            'inF0' (in 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            'inF0' (in float)
+0:469            'inFV2' (in 2-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            'inF0' (in float)
+0:470            'inFV3' (in 3-component vector of float)
+0:471      Sequence
+0:471        move second child to first child (temp float)
+0:471          'r05' (temp float)
+0:471          dot-product (global float)
+0:471            'inFV2' (in 2-component vector of float)
+0:471            'inFV2' (in 2-component vector of float)
+0:472      Sequence
+0:472        move second child to first child (temp float)
+0:472          'r06' (temp float)
+0:472          dot-product (global float)
+0:472            'inFV3' (in 3-component vector of float)
+0:472            'inFV3' (in 3-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          vector-times-matrix (temp 3-component vector of float)
+0:473            'inFV2' (in 2-component vector of float)
+0:473            'inFM2x3' (in 3X2 matrix 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          vector-times-matrix (temp 2-component vector of float)
+0:474            'inFV3' (in 3-component vector of float)
+0:474            'inFM3x2' (in 2X3 matrix 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          matrix-times-vector (temp 2-component vector of float)
+0:475            'inFM2x3' (in 3X2 matrix of float)
+0:475            'inFV3' (in 3-component vector 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          matrix-times-vector (temp 3-component vector of float)
+0:476            'inFM3x2' (in 2X3 matrix of float)
+0:476            'inFV2' (in 2-component vector of float)
+0:477      Sequence
+0:477        move second child to first child (temp 3X2 matrix of float)
+0:477          'r11' (temp 3X2 matrix of float)
+0:477          matrix-scale (temp 3X2 matrix of float)
+0:477            'inFM2x3' (in 3X2 matrix of float)
+0:477            'inF0' (in float)
+0:478      Sequence
+0:478        move second child to first child (temp 2X3 matrix of float)
+0:478          'r12' (temp 2X3 matrix of float)
+0:478          matrix-scale (temp 2X3 matrix of float)
+0:478            'inFM3x2' (in 2X3 matrix of float)
+0:478            'inF0' (in 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            'inFM2x3' (in 3X2 matrix of float)
+0:479            'inFM3x2' (in 2X3 matrix of float)
+0:480      Sequence
+0:480        move second child to first child (temp 3X2 matrix of float)
+0:480          'r14' (temp 3X2 matrix of float)
+0:480          matrix-multiply (temp 3X2 matrix of float)
+0:480            'inFM2x3' (in 3X2 matrix of float)
+0:480            'inFM3x3' (in 3X3 matrix of float)
+0:481      Sequence
+0:481        move second child to first child (temp 4X2 matrix of float)
+0:481          'r15' (temp 4X2 matrix of float)
+0:481          matrix-multiply (temp 4X2 matrix of float)
+0:481            'inFM2x3' (in 3X2 matrix of float)
+0:481            'inFM3x4' (in 4X3 matrix of float)
+0:482      Sequence
+0:482        move second child to first child (temp 4X3 matrix of float)
+0:482          'r16' (temp 4X3 matrix of float)
+0:482          matrix-multiply (temp 4X3 matrix of float)
+0:482            'inFM3x2' (in 2X3 matrix of float)
+0:482            'inFM2x4' (in 4X2 matrix of float)
 0:?   Linker Objects
-0:?     'gs_ua' (temp uint)
-0:?     'gs_ub' (temp uint)
-0:?     'gs_uc' (temp uint)
-0:?     'gs_ua2' (temp 2-component vector of uint)
-0:?     'gs_ub2' (temp 2-component vector of uint)
-0:?     'gs_uc2' (temp 2-component vector of uint)
-0:?     'gs_ua3' (temp 3-component vector of uint)
-0:?     'gs_ub3' (temp 3-component vector of uint)
-0:?     'gs_uc3' (temp 3-component vector of uint)
-0:?     'gs_ua4' (temp 4-component vector of uint)
-0:?     'gs_ub4' (temp 4-component vector of uint)
-0:?     'gs_uc4' (temp 4-component vector of uint)
+0:?     'gs_ua' (global uint)
+0:?     'gs_ub' (global uint)
+0:?     'gs_uc' (global uint)
+0:?     'gs_ua2' (global 2-component vector of uint)
+0:?     'gs_ub2' (global 2-component vector of uint)
+0:?     'gs_uc2' (global 2-component vector of uint)
+0:?     'gs_ua3' (global 3-component vector of uint)
+0:?     'gs_ub3' (global 3-component vector of uint)
+0:?     'gs_uc3' (global 3-component vector of uint)
+0:?     'gs_ua4' (global 4-component vector of uint)
+0:?     'gs_ub4' (global 4-component vector of uint)
+0:?     'gs_uc4' (global 4-component vector of uint)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1265
+// Id's are bound by 1806
 
                               Capability Shader
                               Capability DerivativeControl
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 48 67 73 80 195 213 219 226 366 384 390 397 539 557 563 570 719 733 748 857 871 886 998 1012 1027
+                              EntryPoint Fragment 4  "PixelShaderFunction" 804 831 839 848
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 450
                               Name 4  "PixelShaderFunction"
-                              Name 19  "TestGenMul(f1;f1;vf2;vf2;mf22;mf22;"
-                              Name 13  "inF0"
-                              Name 14  "inF1"
-                              Name 15  "inFV0"
-                              Name 16  "inFV1"
-                              Name 17  "inFM0"
-                              Name 18  "inFM1"
-                              Name 32  "TestGenMul(f1;f1;vf3;vf3;mf33;mf33;"
-                              Name 26  "inF0"
-                              Name 27  "inF1"
-                              Name 28  "inFV0"
-                              Name 29  "inFV1"
-                              Name 30  "inFM0"
-                              Name 31  "inFM1"
-                              Name 45  "TestGenMul(f1;f1;vf4;vf4;mf44;mf44;"
-                              Name 39  "inF0"
-                              Name 40  "inF1"
-                              Name 41  "inFV0"
-                              Name 42  "inFV1"
-                              Name 43  "inFM0"
-                              Name 44  "inFM1"
-                              Name 48  "inF0"
-                              Name 67  "inU0"
-                              Name 73  "inF1"
-                              Name 80  "inF2"
-                              Name 124  "ResType"
-                              Name 195  "inF0"
-                              Name 213  "inU0"
-                              Name 219  "inF1"
-                              Name 226  "inF2"
-                              Name 282  "ResType"
-                              Name 366  "inF0"
-                              Name 384  "inU0"
-                              Name 390  "inF1"
-                              Name 397  "inF2"
-                              Name 456  "ResType"
-                              Name 539  "inF0"
-                              Name 557  "inU0"
-                              Name 563  "inF1"
-                              Name 570  "inF2"
-                              Name 635  "ResType"
-                              Name 719  "inF0"
-                              Name 733  "inF1"
-                              Name 748  "inF2"
-                              Name 791  "ResType"
-                              Name 857  "inF0"
-                              Name 871  "inF1"
-                              Name 886  "inF2"
-                              Name 932  "ResType"
-                              Name 998  "inF0"
-                              Name 1012  "inF1"
-                              Name 1027  "inF2"
-                              Name 1076  "ResType"
-                              Name 1141  "r0"
-                              Name 1145  "r1"
-                              Name 1149  "r2"
-                              Name 1153  "r3"
-                              Name 1157  "r4"
-                              Name 1161  "r5"
-                              Name 1165  "r6"
-                              Name 1169  "r7"
-                              Name 1173  "r8"
-                              Name 1177  "r0"
-                              Name 1181  "r1"
-                              Name 1185  "r2"
-                              Name 1189  "r3"
-                              Name 1193  "r4"
-                              Name 1197  "r5"
-                              Name 1201  "r6"
-                              Name 1205  "r7"
-                              Name 1209  "r8"
-                              Name 1213  "r0"
-                              Name 1217  "r1"
-                              Name 1221  "r2"
-                              Name 1225  "r3"
-                              Name 1229  "r4"
-                              Name 1233  "r5"
-                              Name 1237  "r6"
-                              Name 1241  "r7"
-                              Name 1245  "r8"
-                              Name 1250  "gs_ua"
-                              Name 1251  "gs_ub"
-                              Name 1252  "gs_uc"
-                              Name 1254  "gs_ua2"
-                              Name 1255  "gs_ub2"
-                              Name 1256  "gs_uc2"
-                              Name 1258  "gs_ua3"
-                              Name 1259  "gs_ub3"
-                              Name 1260  "gs_uc3"
-                              Name 1262  "gs_ua4"
-                              Name 1263  "gs_ub4"
-                              Name 1264  "gs_uc4"
+                              Name 16  "PixelShaderFunctionS(f1;f1;f1;u1;u1;"
+                              Name 11  "inF0"
+                              Name 12  "inF1"
+                              Name 13  "inF2"
+                              Name 14  "inU0"
+                              Name 15  "inU1"
+                              Name 22  "PixelShaderFunction1(vf1;vf1;vf1;"
+                              Name 19  "inF0"
+                              Name 20  "inF1"
+                              Name 21  "inF2"
+                              Name 34  "PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;"
+                              Name 29  "inF0"
+                              Name 30  "inF1"
+                              Name 31  "inF2"
+                              Name 32  "inU0"
+                              Name 33  "inU1"
+                              Name 46  "PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;"
+                              Name 41  "inF0"
+                              Name 42  "inF1"
+                              Name 43  "inF2"
+                              Name 44  "inU0"
+                              Name 45  "inU1"
+                              Name 54  "PixelShaderFunction2x2(mf22;mf22;mf22;"
+                              Name 51  "inF0"
+                              Name 52  "inF1"
+                              Name 53  "inF2"
+                              Name 62  "PixelShaderFunction3x3(mf33;mf33;mf33;"
+                              Name 59  "inF0"
+                              Name 60  "inF1"
+                              Name 61  "inF2"
+                              Name 71  "PixelShaderFunction4x4(mf44;mf44;mf44;"
+                              Name 68  "inF0"
+                              Name 69  "inF1"
+                              Name 70  "inF2"
+                              Name 80  "TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;"
+                              Name 74  "inF0"
+                              Name 75  "inF1"
+                              Name 76  "inFV0"
+                              Name 77  "inFV1"
+                              Name 78  "inFM0"
+                              Name 79  "inFM1"
+                              Name 89  "TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;"
+                              Name 83  "inF0"
+                              Name 84  "inF1"
+                              Name 85  "inFV0"
+                              Name 86  "inFV1"
+                              Name 87  "inFM0"
+                              Name 88  "inFM1"
+                              Name 99  "TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;"
+                              Name 93  "inF0"
+                              Name 94  "inF1"
+                              Name 95  "inFV0"
+                              Name 96  "inFV1"
+                              Name 97  "inFM0"
+                              Name 98  "inFM1"
+                              Name 119  "TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42;"
+                              Name 110  "inF0"
+                              Name 111  "inF1"
+                              Name 112  "inFV2"
+                              Name 113  "inFV3"
+                              Name 114  "inFM2x3"
+                              Name 115  "inFM3x2"
+                              Name 116  "inFM3x3"
+                              Name 117  "inFM3x4"
+                              Name 118  "inFM2x4"
+                              Name 123  "r000"
+                              Name 126  "r001"
+                              Name 129  "r002"
+                              Name 132  "r003"
+                              Name 135  "r004"
+                              Name 140  "r005"
+                              Name 143  "r006"
+                              Name 146  "r007"
+                              Name 149  "r009"
+                              Name 152  "r010"
+                              Name 156  "r011"
+                              Name 159  "r012"
+                              Name 170  "r014"
+                              Name 173  "r015"
+                              Name 176  "r016"
+                              Name 179  "r017"
+                              Name 182  "r018"
+                              Name 185  "r019"
+                              Name 188  "r020"
+                              Name 191  "r021"
+                              Name 194  "r022"
+                              Name 197  "r023"
+                              Name 200  "r027"
+                              Name 203  "r028"
+                              Name 206  "r029"
+                              Name 210  "r030"
+                              Name 213  "r031"
+                              Name 216  "r033"
+                              Name 220  "r034"
+                              Name 223  "r035"
+                              Name 225  "ResType"
+                              Name 229  "r036"
+                              Name 232  "r037"
+                              Name 235  "r038"
+                              Name 238  "r039"
+                              Name 242  "r039a"
+                              Name 247  "r040"
+                              Name 250  "r041"
+                              Name 255  "r042"
+                              Name 258  "r043"
+                              Name 262  "r044"
+                              Name 266  "r045"
+                              Name 270  "r046"
+                              Name 273  "r047"
+                              Name 277  "r048"
+                              Name 280  "r049"
+                              Name 283  "r050"
+                              Name 286  "r051"
+                              Name 289  "r052"
+                              Name 292  "r053"
+                              Name 299  "r055"
+                              Name 302  "r056"
+                              Name 307  "r057"
+                              Name 310  "r058"
+                              Name 314  "r059"
+                              Name 317  "r060"
+                              Name 320  "r061"
+                              Name 327  "r000"
+                              Name 330  "r001"
+                              Name 333  "r002"
+                              Name 336  "r003"
+                              Name 339  "r004"
+                              Name 344  "r005"
+                              Name 347  "r006"
+                              Name 350  "r007"
+                              Name 353  "r009"
+                              Name 356  "r010"
+                              Name 360  "r011"
+                              Name 363  "r012"
+                              Name 376  "r013"
+                              Name 379  "r015"
+                              Name 382  "r016"
+                              Name 386  "r017"
+                              Name 389  "r018"
+                              Name 392  "r019"
+                              Name 395  "r020"
+                              Name 398  "r021"
+                              Name 401  "r022"
+                              Name 404  "r023"
+                              Name 407  "r026"
+                              Name 411  "r027"
+                              Name 415  "r028"
+                              Name 418  "r029"
+                              Name 421  "r030"
+                              Name 426  "r031"
+                              Name 430  "r032"
+                              Name 432  "r033"
+                              Name 435  "r035"
+                              Name 439  "r036"
+                              Name 442  "r037"
+                              Name 444  "ResType"
+                              Name 448  "r038"
+                              Name 452  "r039"
+                              Name 455  "r040"
+                              Name 458  "r041"
+                              Name 462  "r039a"
+                              Name 467  "r042"
+                              Name 470  "r043"
+                              Name 473  "r044"
+                              Name 477  "r045"
+                              Name 480  "r046"
+                              Name 484  "r047"
+                              Name 488  "r048"
+                              Name 491  "r049"
+                              Name 495  "r050"
+                              Name 498  "r051"
+                              Name 502  "r052"
+                              Name 506  "r053"
+                              Name 511  "r054"
+                              Name 515  "r055"
+                              Name 518  "r056"
+                              Name 521  "r057"
+                              Name 526  "r058"
+                              Name 529  "r059"
+                              Name 536  "r060"
+                              Name 539  "r061"
+                              Name 544  "r062"
+                              Name 547  "r063"
+                              Name 551  "r064"
+                              Name 554  "r065"
+                              Name 557  "r066"
+                              Name 563  "r000"
+                              Name 566  "r001"
+                              Name 569  "r002"
+                              Name 572  "r003"
+                              Name 575  "r004"
+                              Name 580  "r005"
+                              Name 583  "r006"
+                              Name 586  "r007"
+                              Name 589  "r009"
+                              Name 592  "r010"
+                              Name 596  "r011"
+                              Name 599  "r012"
+                              Name 612  "r013"
+                              Name 615  "r014"
+                              Name 618  "r015"
+                              Name 622  "r016"
+                              Name 626  "r017"
+                              Name 629  "r018"
+                              Name 632  "r019"
+                              Name 635  "r020"
+                              Name 638  "r021"
+                              Name 641  "r022"
+                              Name 644  "r023"
+                              Name 647  "r024"
+                              Name 651  "r025"
+                              Name 655  "r029"
+                              Name 658  "r030"
+                              Name 661  "r031"
+                              Name 666  "r032"
+                              Name 670  "r033"
+                              Name 672  "r034"
+                              Name 675  "r036"
+                              Name 679  "r037"
+                              Name 682  "r038"
+                              Name 684  "ResType"
+                              Name 688  "r039"
+                              Name 692  "r040"
+                              Name 695  "r041"
+                              Name 698  "r042"
+                              Name 702  "r039a"
+                              Name 707  "r043"
+                              Name 710  "r044"
+                              Name 713  "r045"
+                              Name 717  "r046"
+                              Name 720  "r047"
+                              Name 724  "r048"
+                              Name 728  "r049"
+                              Name 731  "r050"
+                              Name 735  "r051"
+                              Name 738  "r052"
+                              Name 742  "r053"
+                              Name 746  "r054"
+                              Name 750  "r055"
+                              Name 753  "r056"
+                              Name 756  "r057"
+                              Name 759  "r058"
+                              Name 764  "r059"
+                              Name 767  "r060"
+                              Name 774  "r061"
+                              Name 777  "r062"
+                              Name 782  "r063"
+                              Name 785  "r064"
+                              Name 789  "r065"
+                              Name 792  "r066"
+                              Name 795  "r067"
+                              Name 802  "r000"
+                              Name 804  "inF0"
+                              Name 807  "r001"
+                              Name 810  "r002"
+                              Name 813  "r003"
+                              Name 816  "r004"
+                              Name 821  "r005"
+                              Name 826  "r006"
+                              Name 829  "r007"
+                              Name 831  "inU0"
+                              Name 834  "r009"
+                              Name 837  "r010"
+                              Name 839  "inF1"
+                              Name 842  "r011"
+                              Name 845  "r012"
+                              Name 848  "inF2"
+                              Name 859  "r013"
+                              Name 862  "r014"
+                              Name 865  "r015"
+                              Name 868  "r016"
+                              Name 871  "r017"
+                              Name 874  "r018"
+                              Name 877  "r019"
+                              Name 880  "r020"
+                              Name 883  "r021"
+                              Name 886  "r022"
+                              Name 889  "r023"
+                              Name 893  "r024"
+                              Name 897  "r025"
+                              Name 909  "r029"
+                              Name 912  "r030"
+                              Name 915  "r031"
+                              Name 920  "r032"
+                              Name 925  "r033"
+                              Name 927  "r034"
+                              Name 930  "r036"
+                              Name 934  "r037"
+                              Name 937  "r038"
+                              Name 939  "ResType"
+                              Name 943  "r039"
+                              Name 947  "r040"
+                              Name 950  "r041"
+                              Name 953  "r042"
+                              Name 957  "r039a"
+                              Name 962  "r043"
+                              Name 965  "r044"
+                              Name 968  "r045"
+                              Name 972  "r046"
+                              Name 975  "r047"
+                              Name 979  "r048"
+                              Name 983  "r049"
+                              Name 986  "r050"
+                              Name 990  "r051"
+                              Name 993  "r052"
+                              Name 997  "r053"
+                              Name 1001  "r054"
+                              Name 1005  "r055"
+                              Name 1008  "r056"
+                              Name 1011  "r057"
+                              Name 1014  "r058"
+                              Name 1019  "r059"
+                              Name 1022  "r060"
+                              Name 1029  "r061"
+                              Name 1032  "r062"
+                              Name 1037  "r063"
+                              Name 1040  "r064"
+                              Name 1044  "r065"
+                              Name 1047  "r066"
+                              Name 1050  "r067"
+                              Name 1056  "r000"
+                              Name 1059  "r001"
+                              Name 1064  "r003"
+                              Name 1067  "r004"
+                              Name 1070  "r005"
+                              Name 1073  "r006"
+                              Name 1077  "r007"
+                              Name 1088  "r008"
+                              Name 1093  "r009"
+                              Name 1096  "r010"
+                              Name 1099  "r011"
+                              Name 1102  "r012"
+                              Name 1105  "r013"
+                              Name 1108  "r014"
+                              Name 1111  "r015"
+                              Name 1114  "r016"
+                              Name 1117  "r017"
+                              Name 1120  "r018"
+                              Name 1123  "r019"
+                              Name 1126  "R020"
+                              Name 1129  "r021"
+                              Name 1132  "r022"
+                              Name 1142  "r023"
+                              Name 1145  "r024"
+                              Name 1147  "ResType"
+                              Name 1151  "r025"
+                              Name 1154  "r026"
+                              Name 1158  "r026a"
+                              Name 1163  "r027"
+                              Name 1166  "r028"
+                              Name 1170  "r029"
+                              Name 1173  "r030"
+                              Name 1177  "r031"
+                              Name 1181  "r032"
+                              Name 1185  "r033"
+                              Name 1188  "r034"
+                              Name 1191  "r035"
+                              Name 1194  "r036"
+                              Name 1199  "r037"
+                              Name 1202  "r038"
+                              Name 1209  "r039"
+                              Name 1212  "r049"
+                              Name 1217  "r041"
+                              Name 1220  "r042"
+                              Name 1224  "r043"
+                              Name 1227  "r044"
+                              Name 1232  "r046"
+                              Name 1239  "r000"
+                              Name 1242  "r001"
+                              Name 1247  "r003"
+                              Name 1250  "r004"
+                              Name 1253  "r005"
+                              Name 1256  "r006"
+                              Name 1260  "r007"
+                              Name 1271  "r008"
+                              Name 1276  "r009"
+                              Name 1279  "r010"
+                              Name 1282  "r011"
+                              Name 1285  "r012"
+                              Name 1288  "r013"
+                              Name 1291  "r014"
+                              Name 1294  "r015"
+                              Name 1297  "r016"
+                              Name 1300  "r017"
+                              Name 1303  "r018"
+                              Name 1306  "r019"
+                              Name 1309  "R020"
+                              Name 1312  "r021"
+                              Name 1315  "r022"
+                              Name 1328  "r023"
+                              Name 1331  "r024"
+                              Name 1333  "ResType"
+                              Name 1337  "r025"
+                              Name 1340  "r026"
+                              Name 1344  "r026a"
+                              Name 1349  "r027"
+                              Name 1352  "r028"
+                              Name 1356  "r029"
+                              Name 1359  "r030"
+                              Name 1363  "r031"
+                              Name 1367  "r032"
+                              Name 1371  "r033"
+                              Name 1374  "r034"
+                              Name 1377  "r035"
+                              Name 1380  "r036"
+                              Name 1385  "r037"
+                              Name 1388  "r038"
+                              Name 1395  "r039"
+                              Name 1398  "r049"
+                              Name 1403  "r041"
+                              Name 1406  "r042"
+                              Name 1410  "r043"
+                              Name 1413  "r044"
+                              Name 1418  "r046"
+                              Name 1425  "r000"
+                              Name 1428  "r001"
+                              Name 1433  "r003"
+                              Name 1436  "r004"
+                              Name 1439  "r005"
+                              Name 1442  "r006"
+                              Name 1446  "r007"
+                              Name 1457  "r008"
+                              Name 1462  "r009"
+                              Name 1465  "r010"
+                              Name 1468  "r011"
+                              Name 1471  "r012"
+                              Name 1474  "r013"
+                              Name 1477  "r014"
+                              Name 1480  "r015"
+                              Name 1483  "r016"
+                              Name 1486  "r017"
+                              Name 1489  "r018"
+                              Name 1492  "r019"
+                              Name 1495  "R020"
+                              Name 1498  "r021"
+                              Name 1501  "r022"
+                              Name 1517  "r023"
+                              Name 1520  "r024"
+                              Name 1522  "ResType"
+                              Name 1526  "r025"
+                              Name 1529  "r026"
+                              Name 1533  "r026a"
+                              Name 1538  "r027"
+                              Name 1541  "r028"
+                              Name 1545  "r029"
+                              Name 1548  "r030"
+                              Name 1552  "r031"
+                              Name 1556  "r032"
+                              Name 1560  "r033"
+                              Name 1563  "r034"
+                              Name 1566  "r035"
+                              Name 1569  "r036"
+                              Name 1574  "r037"
+                              Name 1577  "r038"
+                              Name 1584  "r039"
+                              Name 1587  "r049"
+                              Name 1592  "r041"
+                              Name 1595  "r042"
+                              Name 1599  "r043"
+                              Name 1602  "r044"
+                              Name 1607  "r046"
+                              Name 1614  "r0"
+                              Name 1618  "r1"
+                              Name 1622  "r2"
+                              Name 1626  "r3"
+                              Name 1630  "r4"
+                              Name 1634  "r5"
+                              Name 1638  "r6"
+                              Name 1642  "r7"
+                              Name 1646  "r8"
+                              Name 1650  "r0"
+                              Name 1654  "r1"
+                              Name 1658  "r2"
+                              Name 1662  "r3"
+                              Name 1666  "r4"
+                              Name 1670  "r5"
+                              Name 1674  "r6"
+                              Name 1678  "r7"
+                              Name 1682  "r8"
+                              Name 1686  "r0"
+                              Name 1690  "r1"
+                              Name 1694  "r2"
+                              Name 1698  "r3"
+                              Name 1702  "r4"
+                              Name 1706  "r5"
+                              Name 1710  "r6"
+                              Name 1714  "r7"
+                              Name 1718  "r8"
+                              Name 1722  "r00"
+                              Name 1726  "r01"
+                              Name 1730  "r02"
+                              Name 1734  "r03"
+                              Name 1738  "r04"
+                              Name 1742  "r05"
+                              Name 1746  "r06"
+                              Name 1750  "r07"
+                              Name 1754  "r08"
+                              Name 1758  "r09"
+                              Name 1762  "r10"
+                              Name 1766  "r11"
+                              Name 1770  "r12"
+                              Name 1774  "r13"
+                              Name 1778  "r14"
+                              Name 1782  "r15"
+                              Name 1786  "r16"
+                              Name 1791  "gs_ua"
+                              Name 1792  "gs_ub"
+                              Name 1793  "gs_uc"
+                              Name 1795  "gs_ua2"
+                              Name 1796  "gs_ub2"
+                              Name 1797  "gs_uc2"
+                              Name 1799  "gs_ua3"
+                              Name 1800  "gs_ub3"
+                              Name 1801  "gs_uc3"
+                              Name 1803  "gs_ua4"
+                              Name 1804  "gs_ub4"
+                              Name 1805  "gs_uc4"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypePointer Function 6(float)
-               8:             TypeVector 6(float) 2
-               9:             TypePointer Function 8(fvec2)
-              10:             TypeMatrix 8(fvec2) 2
-              11:             TypePointer Function 10
-              12:             TypeFunction 2 7(ptr) 7(ptr) 9(ptr) 9(ptr) 11(ptr) 11(ptr)
-              21:             TypeVector 6(float) 3
-              22:             TypePointer Function 21(fvec3)
-              23:             TypeMatrix 21(fvec3) 3
-              24:             TypePointer Function 23
-              25:             TypeFunction 2 7(ptr) 7(ptr) 22(ptr) 22(ptr) 24(ptr) 24(ptr)
-              34:             TypeVector 6(float) 4
-              35:             TypePointer Function 34(fvec4)
-              36:             TypeMatrix 34(fvec4) 4
-              37:             TypePointer Function 36
-              38:             TypeFunction 2 7(ptr) 7(ptr) 35(ptr) 35(ptr) 37(ptr) 37(ptr)
-              47:             TypePointer Input 6(float)
-        48(inF0):     47(ptr) Variable Input
-              50:             TypeBool
-              61:             TypeInt 32 1
-              64:             TypeInt 32 0
-              66:             TypePointer Input 64(int)
-        67(inU0):     66(ptr) Variable Input
-        73(inF1):     47(ptr) Variable Input
-        80(inF2):     47(ptr) Variable Input
-              84:    6(float) Constant 0
-              93:     64(int) Constant 7
-             113:     61(int) Constant 7
-    124(ResType):             TypeStruct 6(float) 61(int)
-             141:    6(float) Constant 1050288283
-             156:    6(float) Constant 1065353216
-             159:     64(int) Constant 2
-             194:             TypePointer Input 8(fvec2)
-       195(inF0):    194(ptr) Variable Input
-             207:             TypeVector 61(int) 2
-             210:             TypeVector 64(int) 2
-             212:             TypePointer Input 210(ivec2)
-       213(inU0):    212(ptr) Variable Input
-       219(inF1):    194(ptr) Variable Input
-       226(inF2):    194(ptr) Variable Input
-             230:    8(fvec2) ConstantComposite 84 84
-             231:             TypeVector 50(bool) 2
-             241:     64(int) Constant 3
-             242:  210(ivec2) ConstantComposite 93 241
-    282(ResType):             TypeStruct 8(fvec2) 207(ivec2)
-             325:    6(float) Constant 1073741824
-             327:     64(int) Constant 1
-             328:  210(ivec2) ConstantComposite 327 159
-             363:    8(fvec2) ConstantComposite 156 325
-             365:             TypePointer Input 21(fvec3)
-       366(inF0):    365(ptr) Variable Input
-             378:             TypeVector 61(int) 3
-             381:             TypeVector 64(int) 3
-             383:             TypePointer Input 381(ivec3)
-       384(inU0):    383(ptr) Variable Input
-       390(inF1):    365(ptr) Variable Input
-       397(inF2):    365(ptr) Variable Input
-             401:   21(fvec3) ConstantComposite 84 84 84
-             402:             TypeVector 50(bool) 3
-             412:     64(int) Constant 5
-             413:  381(ivec3) ConstantComposite 93 241 412
-    456(ResType):             TypeStruct 21(fvec3) 378(ivec3)
-             500:  381(ivec3) ConstantComposite 327 159 241
-             535:    6(float) Constant 1077936128
-             536:   21(fvec3) ConstantComposite 156 325 535
-             538:             TypePointer Input 34(fvec4)
-       539(inF0):    538(ptr) Variable Input
-             551:             TypeVector 61(int) 4
-             554:             TypeVector 64(int) 4
-             556:             TypePointer Input 554(ivec4)
-       557(inU0):    556(ptr) Variable Input
-       563(inF1):    538(ptr) Variable Input
-       570(inF2):    538(ptr) Variable Input
-             574:   34(fvec4) ConstantComposite 84 84 84 84
-             575:             TypeVector 50(bool) 4
-             585:  554(ivec4) ConstantComposite 93 241 412 159
-    635(ResType):             TypeStruct 34(fvec4) 551(ivec4)
-             679:     64(int) Constant 4
-             680:  554(ivec4) ConstantComposite 327 159 241 679
-             715:    6(float) Constant 1082130432
-             716:   34(fvec4) ConstantComposite 156 325 535 715
-             718:             TypePointer Input 10
-       719(inF0):    718(ptr) Variable Input
-       733(inF1):    718(ptr) Variable Input
-             739:          10 ConstantComposite 230 230
-             740:             TypeMatrix 231(bvec2) 2
-       748(inF2):    718(ptr) Variable Input
-    791(ResType):             TypeStruct 10 207(ivec2)
-             853:    8(fvec2) ConstantComposite 325 325
-             854:          10 ConstantComposite 853 853
-             856:             TypePointer Input 23
-       857(inF0):    856(ptr) Variable Input
-       871(inF1):    856(ptr) Variable Input
-             877:          23 ConstantComposite 401 401 401
-             878:             TypeMatrix 402(bvec3) 3
-       886(inF2):    856(ptr) Variable Input
-    932(ResType):             TypeStruct 23 378(ivec3)
-             994:   21(fvec3) ConstantComposite 535 535 535
-             995:          23 ConstantComposite 994 994 994
-             997:             TypePointer Input 36
-       998(inF0):    997(ptr) Variable Input
-      1012(inF1):    997(ptr) Variable Input
-            1018:          36 ConstantComposite 574 574 574 574
-            1019:             TypeMatrix 575(bvec4) 4
-      1027(inF2):    997(ptr) Variable Input
-   1076(ResType):             TypeStruct 36 551(ivec4)
-            1138:   34(fvec4) ConstantComposite 715 715 715 715
-            1139:          36 ConstantComposite 1138 1138 1138 1138
-            1249:             TypePointer Function 64(int)
-            1253:             TypePointer Function 210(ivec2)
-            1257:             TypePointer Function 381(ivec3)
-            1261:             TypePointer Function 554(ivec4)
+               8:             TypeInt 32 0
+               9:             TypePointer Function 8(int)
+              10:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 9(ptr)
+              18:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr)
+              24:             TypeVector 6(float) 2
+              25:             TypePointer Function 24(fvec2)
+              26:             TypeVector 8(int) 2
+              27:             TypePointer Function 26(ivec2)
+              28:             TypeFunction 24(fvec2) 25(ptr) 25(ptr) 25(ptr) 27(ptr) 27(ptr)
+              36:             TypeVector 6(float) 3
+              37:             TypePointer Function 36(fvec3)
+              38:             TypeVector 8(int) 3
+              39:             TypePointer Function 38(ivec3)
+              40:             TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr)
+              48:             TypeMatrix 24(fvec2) 2
+              49:             TypePointer Function 48
+              50:             TypeFunction 48 49(ptr) 49(ptr) 49(ptr)
+              56:             TypeMatrix 36(fvec3) 3
+              57:             TypePointer Function 56
+              58:             TypeFunction 56 57(ptr) 57(ptr) 57(ptr)
+              64:             TypeVector 6(float) 4
+              65:             TypeMatrix 64(fvec4) 4
+              66:             TypePointer Function 65
+              67:             TypeFunction 65 66(ptr) 66(ptr) 66(ptr)
+              73:             TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 25(ptr) 49(ptr) 49(ptr)
+              82:             TypeFunction 2 7(ptr) 7(ptr) 37(ptr) 37(ptr) 57(ptr) 57(ptr)
+              91:             TypePointer Function 64(fvec4)
+              92:             TypeFunction 2 7(ptr) 7(ptr) 91(ptr) 91(ptr) 66(ptr) 66(ptr)
+             101:             TypeMatrix 24(fvec2) 3
+             102:             TypePointer Function 101
+             103:             TypeMatrix 36(fvec3) 2
+             104:             TypePointer Function 103
+             105:             TypeMatrix 36(fvec3) 4
+             106:             TypePointer Function 105
+             107:             TypeMatrix 24(fvec2) 4
+             108:             TypePointer Function 107
+             109:             TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 37(ptr) 102(ptr) 104(ptr) 57(ptr) 106(ptr) 108(ptr)
+             121:             TypeBool
+             122:             TypePointer Function 121(bool)
+             138:             TypeInt 32 1
+             139:             TypePointer Function 138(int)
+             165:    6(float) Constant 0
+             177:      8(int) Constant 7
+             207:    138(int) Constant 7
+    225(ResType):             TypeStruct 6(float) 138(int)
+             253:    6(float) Constant 1050288283
+             274:    6(float) Constant 1065353216
+             278:      8(int) Constant 2
+             342:             TypeVector 138(int) 2
+             343:             TypePointer Function 342(ivec2)
+             369:   24(fvec2) ConstantComposite 165 165
+             370:             TypeVector 121(bool) 2
+             383:      8(int) Constant 3
+             384:   26(ivec2) ConstantComposite 177 383
+             427:      8(int) Constant 8
+             428:   26(ivec2) ConstantComposite 177 427
+    444(ResType):             TypeStruct 24(fvec2) 342(ivec2)
+             451:             TypePointer Function 370(bvec2)
+             509:    6(float) Constant 1073741824
+             512:      8(int) Constant 1
+             513:   26(ivec2) ConstantComposite 512 278
+             560:   24(fvec2) ConstantComposite 274 509
+             578:             TypeVector 138(int) 3
+             579:             TypePointer Function 578(ivec3)
+             605:   36(fvec3) ConstantComposite 165 165 165
+             606:             TypeVector 121(bool) 3
+             619:      8(int) Constant 5
+             620:   38(ivec3) ConstantComposite 177 383 619
+             667:      8(int) Constant 4
+             668:   38(ivec3) ConstantComposite 278 383 667
+    684(ResType):             TypeStruct 36(fvec3) 578(ivec3)
+             691:             TypePointer Function 606(bvec3)
+             751:   38(ivec3) ConstantComposite 512 278 383
+             798:    6(float) Constant 1077936128
+             799:   36(fvec3) ConstantComposite 274 509 798
+             803:             TypePointer Input 64(fvec4)
+       804(inF0):    803(ptr) Variable Input
+             819:             TypeVector 138(int) 4
+             820:             TypePointer Function 819(ivec4)
+             824:             TypeVector 8(int) 4
+             825:             TypePointer Function 824(ivec4)
+             830:             TypePointer Input 824(ivec4)
+       831(inU0):    830(ptr) Variable Input
+       839(inF1):    803(ptr) Variable Input
+       848(inF2):    803(ptr) Variable Input
+             852:   64(fvec4) ConstantComposite 165 165 165 165
+             853:             TypeVector 121(bool) 4
+             866:  824(ivec4) ConstantComposite 177 383 619 278
+             898:             TypePointer Input 6(float)
+             921:      8(int) Constant 9
+             922:      8(int) Constant 10
+             923:  824(ivec4) ConstantComposite 177 427 921 922
+    939(ResType):             TypeStruct 64(fvec4) 819(ivec4)
+             946:             TypePointer Function 853(bvec4)
+            1006:  824(ivec4) ConstantComposite 512 278 383 667
+            1053:    6(float) Constant 1082130432
+            1054:   64(fvec4) ConstantComposite 274 509 798 1053
+            1081:          48 ConstantComposite 369 369
+            1082:             TypeMatrix 370(bvec2) 2
+   1147(ResType):             TypeStruct 48 342(ivec2)
+            1235:   24(fvec2) ConstantComposite 509 509
+            1236:          48 ConstantComposite 1235 1235
+            1264:          56 ConstantComposite 605 605 605
+            1265:             TypeMatrix 606(bvec3) 3
+   1333(ResType):             TypeStruct 56 578(ivec3)
+            1421:   36(fvec3) ConstantComposite 798 798 798
+            1422:          56 ConstantComposite 1421 1421 1421
+            1450:          65 ConstantComposite 852 852 852 852
+            1451:             TypeMatrix 853(bvec4) 4
+   1522(ResType):             TypeStruct 65 819(ivec4)
+            1610:   64(fvec4) ConstantComposite 1053 1053 1053 1053
+            1611:          65 ConstantComposite 1610 1610 1610 1610
+            1790:             TypePointer Private 8(int)
+     1791(gs_ua):   1790(ptr) Variable Private
+     1792(gs_ub):   1790(ptr) Variable Private
+     1793(gs_uc):   1790(ptr) Variable Private
+            1794:             TypePointer Private 26(ivec2)
+    1795(gs_ua2):   1794(ptr) Variable Private
+    1796(gs_ub2):   1794(ptr) Variable Private
+    1797(gs_uc2):   1794(ptr) Variable Private
+            1798:             TypePointer Private 38(ivec3)
+    1799(gs_ua3):   1798(ptr) Variable Private
+    1800(gs_ub3):   1798(ptr) Variable Private
+    1801(gs_uc3):   1798(ptr) Variable Private
+            1802:             TypePointer Private 824(ivec4)
+    1803(gs_ua4):   1802(ptr) Variable Private
+    1804(gs_ub4):   1802(ptr) Variable Private
+    1805(gs_uc4):   1802(ptr) Variable Private
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-              49:    6(float) Load 48(inF0)
-              51:    50(bool) All 49
-              52:    6(float) Load 48(inF0)
-              53:    6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 52
-              54:    6(float) Load 48(inF0)
-              55:    6(float) ExtInst 1(GLSL.std.450) 17(Acos) 54
-              56:    6(float) Load 48(inF0)
-              57:    50(bool) Any 56
-              58:    6(float) Load 48(inF0)
-              59:    6(float) ExtInst 1(GLSL.std.450) 16(Asin) 58
-              60:    6(float) Load 48(inF0)
-              62:     61(int) Bitcast 60
-              63:    6(float) Load 48(inF0)
-              65:     64(int) Bitcast 63
-              68:     64(int) Load 67(inU0)
-              69:    6(float) Bitcast 68
-              70:    6(float) Load 48(inF0)
-              71:    6(float) ExtInst 1(GLSL.std.450) 18(Atan) 70
-              72:    6(float) Load 48(inF0)
-              74:    6(float) Load 73(inF1)
-              75:    6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 72 74
-              76:    6(float) Load 48(inF0)
-              77:    6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 76
-              78:    6(float) Load 48(inF0)
-              79:    6(float) Load 73(inF1)
-              81:    6(float) Load 80(inF2)
-              82:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 78 79 81
-              83:    6(float) Load 48(inF0)
-              85:    50(bool) FOrdLessThan 83 84
-                              SelectionMerge 87 None
-                              BranchConditional 85 86 87
-              86:               Label
+       802(r000):    122(ptr) Variable Function
+       807(r001):     91(ptr) Variable Function
+       810(r002):     91(ptr) Variable Function
+       813(r003):    122(ptr) Variable Function
+       816(r004):     91(ptr) Variable Function
+       821(r005):    820(ptr) Variable Function
+       826(r006):    825(ptr) Variable Function
+       829(r007):     91(ptr) Variable Function
+       834(r009):     91(ptr) Variable Function
+       837(r010):     91(ptr) Variable Function
+       842(r011):     91(ptr) Variable Function
+       845(r012):     91(ptr) Variable Function
+       859(r013):     91(ptr) Variable Function
+       862(r014):     91(ptr) Variable Function
+       865(r015):    825(ptr) Variable Function
+       868(r016):     91(ptr) Variable Function
+       871(r017):     91(ptr) Variable Function
+       874(r018):     91(ptr) Variable Function
+       877(r019):     91(ptr) Variable Function
+       880(r020):     91(ptr) Variable Function
+       883(r021):     91(ptr) Variable Function
+       886(r022):     91(ptr) Variable Function
+       889(r023):      7(ptr) Variable Function
+       893(r024):      7(ptr) Variable Function
+       897(r025):     91(ptr) Variable Function
+       909(r029):     91(ptr) Variable Function
+       912(r030):     91(ptr) Variable Function
+       915(r031):     91(ptr) Variable Function
+       920(r032):    825(ptr) Variable Function
+       925(r033):    825(ptr) Variable Function
+       927(r034):     91(ptr) Variable Function
+       930(r036):     91(ptr) Variable Function
+       934(r037):     91(ptr) Variable Function
+       937(r038):     91(ptr) Variable Function
+       943(r039):     91(ptr) Variable Function
+       947(r040):    946(ptr) Variable Function
+       950(r041):    946(ptr) Variable Function
+       953(r042):     91(ptr) Variable Function
+      957(r039a):     91(ptr) Variable Function
+       962(r043):      7(ptr) Variable Function
+       965(r044):     91(ptr) Variable Function
+       968(r045):     91(ptr) Variable Function
+       972(r046):     91(ptr) Variable Function
+       975(r047):     91(ptr) Variable Function
+       979(r048):     91(ptr) Variable Function
+       983(r049):     91(ptr) Variable Function
+       986(r050):     91(ptr) Variable Function
+       990(r051):     91(ptr) Variable Function
+       993(r052):     91(ptr) Variable Function
+       997(r053):     91(ptr) Variable Function
+      1001(r054):     91(ptr) Variable Function
+      1005(r055):    825(ptr) Variable Function
+      1008(r056):     91(ptr) Variable Function
+      1011(r057):     91(ptr) Variable Function
+      1014(r058):     91(ptr) Variable Function
+      1019(r059):     91(ptr) Variable Function
+      1022(r060):     91(ptr) Variable Function
+      1029(r061):     91(ptr) Variable Function
+      1032(r062):     91(ptr) Variable Function
+      1037(r063):     91(ptr) Variable Function
+      1040(r064):     91(ptr) Variable Function
+      1044(r065):     91(ptr) Variable Function
+      1047(r066):     91(ptr) Variable Function
+      1050(r067):     91(ptr) Variable Function
+             805:   64(fvec4) Load 804(inF0)
+             806:   121(bool) All 805
+                              Store 802(r000) 806
+             808:   64(fvec4) Load 804(inF0)
+             809:   64(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 808
+                              Store 807(r001) 809
+             811:   64(fvec4) Load 804(inF0)
+             812:   64(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 811
+                              Store 810(r002) 812
+             814:   64(fvec4) Load 804(inF0)
+             815:   121(bool) Any 814
+                              Store 813(r003) 815
+             817:   64(fvec4) Load 804(inF0)
+             818:   64(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 817
+                              Store 816(r004) 818
+             822:   64(fvec4) Load 804(inF0)
+             823:  819(ivec4) Bitcast 822
+                              Store 821(r005) 823
+             827:   64(fvec4) Load 804(inF0)
+             828:  824(ivec4) Bitcast 827
+                              Store 826(r006) 828
+             832:  824(ivec4) Load 831(inU0)
+             833:   64(fvec4) Bitcast 832
+                              Store 829(r007) 833
+             835:   64(fvec4) Load 804(inF0)
+             836:   64(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 835
+                              Store 834(r009) 836
+             838:   64(fvec4) Load 804(inF0)
+             840:   64(fvec4) Load 839(inF1)
+             841:   64(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 838 840
+                              Store 837(r010) 841
+             843:   64(fvec4) Load 804(inF0)
+             844:   64(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 843
+                              Store 842(r011) 844
+             846:   64(fvec4) Load 804(inF0)
+             847:   64(fvec4) Load 839(inF1)
+             849:   64(fvec4) Load 848(inF2)
+             850:   64(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 846 847 849
+                              Store 845(r012) 850
+             851:   64(fvec4) Load 804(inF0)
+             854:  853(bvec4) FOrdLessThan 851 852
+             855:   121(bool) Any 854
+                              SelectionMerge 857 None
+                              BranchConditional 855 856 857
+             856:               Label
+                                Kill
+             857:             Label
+             860:   64(fvec4) Load 804(inF0)
+             861:   64(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 860
+                              Store 859(r013) 861
+             863:   64(fvec4) Load 804(inF0)
+             864:   64(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 863
+                              Store 862(r014) 864
+             867:  824(ivec4) BitCount 866
+                              Store 865(r015) 867
+             869:   64(fvec4) Load 804(inF0)
+             870:   64(fvec4) DPdx 869
+                              Store 868(r016) 870
+             872:   64(fvec4) Load 804(inF0)
+             873:   64(fvec4) DPdxCoarse 872
+                              Store 871(r017) 873
+             875:   64(fvec4) Load 804(inF0)
+             876:   64(fvec4) DPdxFine 875
+                              Store 874(r018) 876
+             878:   64(fvec4) Load 804(inF0)
+             879:   64(fvec4) DPdy 878
+                              Store 877(r019) 879
+             881:   64(fvec4) Load 804(inF0)
+             882:   64(fvec4) DPdyCoarse 881
+                              Store 880(r020) 882
+             884:   64(fvec4) Load 804(inF0)
+             885:   64(fvec4) DPdyFine 884
+                              Store 883(r021) 885
+             887:   64(fvec4) Load 804(inF0)
+             888:   64(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 887
+                              Store 886(r022) 888
+             890:   64(fvec4) Load 804(inF0)
+             891:   64(fvec4) Load 839(inF1)
+             892:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 890 891
+                              Store 889(r023) 892
+             894:   64(fvec4) Load 804(inF0)
+             895:   64(fvec4) Load 839(inF1)
+             896:    6(float) Dot 894 895
+                              Store 893(r024) 896
+             899:    898(ptr) AccessChain 804(inF0) 512
+             900:    6(float) Load 899
+             901:    898(ptr) AccessChain 839(inF1) 512
+             902:    6(float) Load 901
+             903:    6(float) FMul 900 902
+             904:    898(ptr) AccessChain 804(inF0) 278
+             905:    6(float) Load 904
+             906:    898(ptr) AccessChain 839(inF1) 383
+             907:    6(float) Load 906
+             908:   64(fvec4) CompositeConstruct 274 903 905 907
+                              Store 897(r025) 908
+             910:   64(fvec4) Load 804(inF0)
+             911:   64(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 910
+                              Store 909(r029) 911
+             913:   64(fvec4) Load 804(inF0)
+             914:   64(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 913
+                              Store 912(r030) 914
+             916:   64(fvec4) Load 804(inF0)
+             917:   64(fvec4) Load 839(inF1)
+             918:   64(fvec4) Load 848(inF2)
+             919:   64(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 916 917 918
+                              Store 915(r031) 919
+             924:  824(ivec4) ExtInst 1(GLSL.std.450) 75(FindUMsb) 923
+                              Store 920(r032) 924
+             926:  824(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 923
+                              Store 925(r033) 926
+             928:   64(fvec4) Load 804(inF0)
+             929:   64(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 928
+                              Store 927(r034) 929
+             931:   64(fvec4) Load 804(inF0)
+             932:   64(fvec4) Load 839(inF1)
+             933:   64(fvec4) FMod 931 932
+                              Store 930(r036) 933
+             935:   64(fvec4) Load 804(inF0)
+             936:   64(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 935
+                              Store 934(r037) 936
+             938:   64(fvec4) Load 804(inF0)
+             940:939(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 938
+             941:  819(ivec4) CompositeExtract 940 1
+                              Store 839(inF1) 941
+             942:   64(fvec4) CompositeExtract 940 0
+                              Store 937(r038) 942
+             944:   64(fvec4) Load 804(inF0)
+             945:   64(fvec4) Fwidth 944
+                              Store 943(r039) 945
+             948:   64(fvec4) Load 804(inF0)
+             949:  853(bvec4) IsInf 948
+                              Store 947(r040) 949
+             951:   64(fvec4) Load 804(inF0)
+             952:  853(bvec4) IsNan 951
+                              Store 950(r041) 952
+             954:   64(fvec4) Load 804(inF0)
+             955:   64(fvec4) Load 839(inF1)
+             956:   64(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 954 955
+                              Store 953(r042) 956
+             958:   64(fvec4) Load 804(inF0)
+             959:   64(fvec4) Load 839(inF1)
+             960:   64(fvec4) Load 848(inF2)
+             961:   64(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 958 959 960
+                              Store 957(r039a) 961
+             963:   64(fvec4) Load 804(inF0)
+             964:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 963
+                              Store 962(r043) 964
+             966:   64(fvec4) Load 804(inF0)
+             967:   64(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 966
+                              Store 965(r044) 967
+             969:   64(fvec4) Load 804(inF0)
+             970:   64(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 969
+             971:   64(fvec4) VectorTimesScalar 970 253
+                              Store 968(r045) 971
+             973:   64(fvec4) Load 804(inF0)
+             974:   64(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 973
+                              Store 972(r046) 974
+             976:   64(fvec4) Load 804(inF0)
+             977:   64(fvec4) Load 839(inF1)
+             978:   64(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 976 977
+                              Store 975(r047) 978
+             980:   64(fvec4) Load 804(inF0)
+             981:   64(fvec4) Load 839(inF1)
+             982:   64(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 980 981
+                              Store 979(r048) 982
+             984:   64(fvec4) Load 804(inF0)
+             985:   64(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 984
+                              Store 983(r049) 985
+             987:   64(fvec4) Load 804(inF0)
+             988:   64(fvec4) Load 839(inF1)
+             989:   64(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 987 988
+                              Store 986(r050) 989
+             991:   64(fvec4) Load 804(inF0)
+             992:   64(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 991
+                              Store 990(r051) 992
+             994:   64(fvec4) Load 804(inF0)
+             995:   64(fvec4) CompositeConstruct 274 274 274 274
+             996:   64(fvec4) FDiv 995 994
+                              Store 993(r052) 996
+             998:   64(fvec4) Load 804(inF0)
+             999:   64(fvec4) Load 839(inF1)
+            1000:   64(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 998 999
+                              Store 997(r053) 1000
+            1002:   64(fvec4) Load 804(inF0)
+            1003:   64(fvec4) Load 839(inF1)
+            1004:   64(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 1002 1003 509
+                              Store 1001(r054) 1004
+            1007:  824(ivec4) BitReverse 1006
+                              Store 1005(r055) 1007
+            1009:   64(fvec4) Load 804(inF0)
+            1010:   64(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 1009
+                              Store 1008(r056) 1010
+            1012:   64(fvec4) Load 804(inF0)
+            1013:   64(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1012
+                              Store 1011(r057) 1013
+            1015:   64(fvec4) Load 804(inF0)
+            1016:   64(fvec4) CompositeConstruct 165 165 165 165
+            1017:   64(fvec4) CompositeConstruct 274 274 274 274
+            1018:   64(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 1015 1016 1017
+                              Store 1014(r058) 1018
+            1020:   64(fvec4) Load 804(inF0)
+            1021:   64(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 1020
+                              Store 1019(r059) 1021
+            1023:   64(fvec4) Load 804(inF0)
+            1024:   64(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1023
+                              Store 1022(r060) 1024
+            1025:   64(fvec4) Load 804(inF0)
+            1026:   64(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 1025
+                              Store 839(inF1) 1026
+            1027:   64(fvec4) Load 804(inF0)
+            1028:   64(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 1027
+                              Store 848(inF2) 1028
+            1030:   64(fvec4) Load 804(inF0)
+            1031:   64(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 1030
+                              Store 1029(r061) 1031
+            1033:   64(fvec4) Load 804(inF0)
+            1034:   64(fvec4) Load 839(inF1)
+            1035:   64(fvec4) Load 848(inF2)
+            1036:   64(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 1033 1034 1035
+                              Store 1032(r062) 1036
+            1038:   64(fvec4) Load 804(inF0)
+            1039:   64(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 1038
+                              Store 1037(r063) 1039
+            1041:   64(fvec4) Load 804(inF0)
+            1042:   64(fvec4) Load 839(inF1)
+            1043:   64(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 1041 1042
+                              Store 1040(r064) 1043
+            1045:   64(fvec4) Load 804(inF0)
+            1046:   64(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 1045
+                              Store 1044(r065) 1046
+            1048:   64(fvec4) Load 804(inF0)
+            1049:   64(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 1048
+                              Store 1047(r066) 1049
+            1051:   64(fvec4) Load 804(inF0)
+            1052:   64(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 1051
+                              Store 1050(r067) 1052
+                              ReturnValue 1054
+                              FunctionEnd
+16(PixelShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
+        11(inF0):      7(ptr) FunctionParameter
+        12(inF1):      7(ptr) FunctionParameter
+        13(inF2):      7(ptr) FunctionParameter
+        14(inU0):      9(ptr) FunctionParameter
+        15(inU1):      9(ptr) FunctionParameter
+              17:             Label
+       123(r000):    122(ptr) Variable Function
+       126(r001):      7(ptr) Variable Function
+       129(r002):      7(ptr) Variable Function
+       132(r003):    122(ptr) Variable Function
+       135(r004):      7(ptr) Variable Function
+       140(r005):    139(ptr) Variable Function
+       143(r006):      9(ptr) Variable Function
+       146(r007):      7(ptr) Variable Function
+       149(r009):      7(ptr) Variable Function
+       152(r010):      7(ptr) Variable Function
+       156(r011):      7(ptr) Variable Function
+       159(r012):      7(ptr) Variable Function
+       170(r014):      7(ptr) Variable Function
+       173(r015):      7(ptr) Variable Function
+       176(r016):      9(ptr) Variable Function
+       179(r017):      7(ptr) Variable Function
+       182(r018):      7(ptr) Variable Function
+       185(r019):      7(ptr) Variable Function
+       188(r020):      7(ptr) Variable Function
+       191(r021):      7(ptr) Variable Function
+       194(r022):      7(ptr) Variable Function
+       197(r023):      7(ptr) Variable Function
+       200(r027):      7(ptr) Variable Function
+       203(r028):      7(ptr) Variable Function
+       206(r029):      9(ptr) Variable Function
+       210(r030):      9(ptr) Variable Function
+       213(r031):      7(ptr) Variable Function
+       216(r033):      7(ptr) Variable Function
+       220(r034):      7(ptr) Variable Function
+       223(r035):      7(ptr) Variable Function
+       229(r036):      7(ptr) Variable Function
+       232(r037):    122(ptr) Variable Function
+       235(r038):    122(ptr) Variable Function
+       238(r039):      7(ptr) Variable Function
+      242(r039a):      7(ptr) Variable Function
+       247(r040):      7(ptr) Variable Function
+       250(r041):      7(ptr) Variable Function
+       255(r042):      7(ptr) Variable Function
+       258(r043):      7(ptr) Variable Function
+       262(r044):      7(ptr) Variable Function
+       266(r045):      7(ptr) Variable Function
+       270(r046):      7(ptr) Variable Function
+       273(r047):      7(ptr) Variable Function
+       277(r048):      9(ptr) Variable Function
+       280(r049):      7(ptr) Variable Function
+       283(r050):      7(ptr) Variable Function
+       286(r051):      7(ptr) Variable Function
+       289(r052):      7(ptr) Variable Function
+       292(r053):      7(ptr) Variable Function
+       299(r055):      7(ptr) Variable Function
+       302(r056):      7(ptr) Variable Function
+       307(r057):      7(ptr) Variable Function
+       310(r058):      7(ptr) Variable Function
+       314(r059):      7(ptr) Variable Function
+       317(r060):      7(ptr) Variable Function
+       320(r061):      7(ptr) Variable Function
+             124:    6(float) Load 11(inF0)
+             125:   121(bool) All 124
+                              Store 123(r000) 125
+             127:    6(float) Load 11(inF0)
+             128:    6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 127
+                              Store 126(r001) 128
+             130:    6(float) Load 11(inF0)
+             131:    6(float) ExtInst 1(GLSL.std.450) 17(Acos) 130
+                              Store 129(r002) 131
+             133:    6(float) Load 11(inF0)
+             134:   121(bool) Any 133
+                              Store 132(r003) 134
+             136:    6(float) Load 11(inF0)
+             137:    6(float) ExtInst 1(GLSL.std.450) 16(Asin) 136
+                              Store 135(r004) 137
+             141:    6(float) Load 11(inF0)
+             142:    138(int) Bitcast 141
+                              Store 140(r005) 142
+             144:    6(float) Load 11(inF0)
+             145:      8(int) Bitcast 144
+                              Store 143(r006) 145
+             147:      8(int) Load 14(inU0)
+             148:    6(float) Bitcast 147
+                              Store 146(r007) 148
+             150:    6(float) Load 11(inF0)
+             151:    6(float) ExtInst 1(GLSL.std.450) 18(Atan) 150
+                              Store 149(r009) 151
+             153:    6(float) Load 11(inF0)
+             154:    6(float) Load 12(inF1)
+             155:    6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 153 154
+                              Store 152(r010) 155
+             157:    6(float) Load 11(inF0)
+             158:    6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 157
+                              Store 156(r011) 158
+             160:    6(float) Load 11(inF0)
+             161:    6(float) Load 12(inF1)
+             162:    6(float) Load 13(inF2)
+             163:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 160 161 162
+                              Store 159(r012) 163
+             164:    6(float) Load 11(inF0)
+             166:   121(bool) FOrdLessThan 164 165
+                              SelectionMerge 168 None
+                              BranchConditional 166 167 168
+             167:               Label
+                                Kill
+             168:             Label
+             171:    6(float) Load 11(inF0)
+             172:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 171
+                              Store 170(r014) 172
+             174:    6(float) Load 11(inF0)
+             175:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 174
+                              Store 173(r015) 175
+             178:      8(int) BitCount 177
+                              Store 176(r016) 178
+             180:    6(float) Load 11(inF0)
+             181:    6(float) DPdx 180
+                              Store 179(r017) 181
+             183:    6(float) Load 11(inF0)
+             184:    6(float) DPdxCoarse 183
+                              Store 182(r018) 184
+             186:    6(float) Load 11(inF0)
+             187:    6(float) DPdxFine 186
+                              Store 185(r019) 187
+             189:    6(float) Load 11(inF0)
+             190:    6(float) DPdy 189
+                              Store 188(r020) 190
+             192:    6(float) Load 11(inF0)
+             193:    6(float) DPdyCoarse 192
+                              Store 191(r021) 193
+             195:    6(float) Load 11(inF0)
+             196:    6(float) DPdyFine 195
+                              Store 194(r022) 196
+             198:    6(float) Load 11(inF0)
+             199:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 198
+                              Store 197(r023) 199
+             201:    6(float) Load 11(inF0)
+             202:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 201
+                              Store 200(r027) 202
+             204:    6(float) Load 11(inF0)
+             205:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 204
+                              Store 203(r028) 205
+             208:    138(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 207
+             209:      8(int) Bitcast 208
+                              Store 206(r029) 209
+             211:    138(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 207
+             212:      8(int) Bitcast 211
+                              Store 210(r030) 212
+             214:    6(float) Load 11(inF0)
+             215:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 214
+                              Store 213(r031) 215
+             217:    6(float) Load 11(inF0)
+             218:    6(float) Load 12(inF1)
+             219:    6(float) FMod 217 218
+                              Store 216(r033) 219
+             221:    6(float) Load 11(inF0)
+             222:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 221
+                              Store 220(r034) 222
+             224:    6(float) Load 11(inF0)
+             226:225(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 224
+             227:    138(int) CompositeExtract 226 1
+                              Store 12(inF1) 227
+             228:    6(float) CompositeExtract 226 0
+                              Store 223(r035) 228
+             230:    6(float) Load 11(inF0)
+             231:    6(float) Fwidth 230
+                              Store 229(r036) 231
+             233:    6(float) Load 11(inF0)
+             234:   121(bool) IsInf 233
+                              Store 232(r037) 234
+             236:    6(float) Load 11(inF0)
+             237:   121(bool) IsNan 236
+                              Store 235(r038) 237
+             239:    6(float) Load 11(inF0)
+             240:    6(float) Load 12(inF1)
+             241:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 239 240
+                              Store 238(r039) 241
+             243:    6(float) Load 11(inF0)
+             244:    6(float) Load 12(inF1)
+             245:    6(float) Load 13(inF2)
+             246:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 243 244 245
+                              Store 242(r039a) 246
+             248:    6(float) Load 11(inF0)
+             249:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 248
+                              Store 247(r040) 249
+             251:    6(float) Load 11(inF0)
+             252:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 251
+             254:    6(float) FMul 252 253
+                              Store 250(r041) 254
+             256:    6(float) Load 11(inF0)
+             257:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 256
+                              Store 255(r042) 257
+             259:    6(float) Load 11(inF0)
+             260:    6(float) Load 12(inF1)
+             261:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 259 260
+                              Store 258(r043) 261
+             263:    6(float) Load 11(inF0)
+             264:    6(float) Load 12(inF1)
+             265:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 263 264
+                              Store 262(r044) 265
+             267:    6(float) Load 11(inF0)
+             268:    6(float) Load 12(inF1)
+             269:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 267 268
+                              Store 266(r045) 269
+             271:    6(float) Load 11(inF0)
+             272:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 271
+                              Store 270(r046) 272
+             275:    6(float) Load 11(inF0)
+             276:    6(float) FDiv 274 275
+                              Store 273(r047) 276
+             279:      8(int) BitReverse 278
+                              Store 277(r048) 279
+             281:    6(float) Load 11(inF0)
+             282:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 281
+                              Store 280(r049) 282
+             284:    6(float) Load 11(inF0)
+             285:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 284
+                              Store 283(r050) 285
+             287:    6(float) Load 11(inF0)
+             288:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 287 165 274
+                              Store 286(r051) 288
+             290:    6(float) Load 11(inF0)
+             291:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 290
+                              Store 289(r052) 291
+             293:    6(float) Load 11(inF0)
+             294:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 293
+                              Store 292(r053) 294
+             295:    6(float) Load 11(inF0)
+             296:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 295
+                              Store 12(inF1) 296
+             297:    6(float) Load 11(inF0)
+             298:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 297
+                              Store 13(inF2) 298
+             300:    6(float) Load 11(inF0)
+             301:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 300
+                              Store 299(r055) 301
+             303:    6(float) Load 11(inF0)
+             304:    6(float) Load 12(inF1)
+             305:    6(float) Load 13(inF2)
+             306:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 303 304 305
+                              Store 302(r056) 306
+             308:    6(float) Load 11(inF0)
+             309:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 308
+                              Store 307(r057) 309
+             311:    6(float) Load 11(inF0)
+             312:    6(float) Load 12(inF1)
+             313:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 311 312
+                              Store 310(r058) 313
+             315:    6(float) Load 11(inF0)
+             316:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 315
+                              Store 314(r059) 316
+             318:    6(float) Load 11(inF0)
+             319:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 318
+                              Store 317(r060) 319
+             321:    6(float) Load 11(inF0)
+             322:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 321
+                              Store 320(r061) 322
+                              ReturnValue 165
+                              FunctionEnd
+22(PixelShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 18
+        19(inF0):      7(ptr) FunctionParameter
+        20(inF1):      7(ptr) FunctionParameter
+        21(inF2):      7(ptr) FunctionParameter
+              23:             Label
+                              ReturnValue 165
+                              FunctionEnd
+34(PixelShaderFunction2(vf2;vf2;vf2;vu2;vu2;):   24(fvec2) Function None 28
+        29(inF0):     25(ptr) FunctionParameter
+        30(inF1):     25(ptr) FunctionParameter
+        31(inF2):     25(ptr) FunctionParameter
+        32(inU0):     27(ptr) FunctionParameter
+        33(inU1):     27(ptr) FunctionParameter
+              35:             Label
+       327(r000):    122(ptr) Variable Function
+       330(r001):     25(ptr) Variable Function
+       333(r002):     25(ptr) Variable Function
+       336(r003):    122(ptr) Variable Function
+       339(r004):     25(ptr) Variable Function
+       344(r005):    343(ptr) Variable Function
+       347(r006):     27(ptr) Variable Function
+       350(r007):     25(ptr) Variable Function
+       353(r009):     25(ptr) Variable Function
+       356(r010):     25(ptr) Variable Function
+       360(r011):     25(ptr) Variable Function
+       363(r012):     25(ptr) Variable Function
+       376(r013):     25(ptr) Variable Function
+       379(r015):     25(ptr) Variable Function
+       382(r016):     27(ptr) Variable Function
+       386(r017):     25(ptr) Variable Function
+       389(r018):     25(ptr) Variable Function
+       392(r019):     25(ptr) Variable Function
+       395(r020):     25(ptr) Variable Function
+       398(r021):     25(ptr) Variable Function
+       401(r022):     25(ptr) Variable Function
+       404(r023):     25(ptr) Variable Function
+       407(r026):      7(ptr) Variable Function
+       411(r027):      7(ptr) Variable Function
+       415(r028):     25(ptr) Variable Function
+       418(r029):     25(ptr) Variable Function
+       421(r030):     25(ptr) Variable Function
+       426(r031):     27(ptr) Variable Function
+       430(r032):     27(ptr) Variable Function
+       432(r033):     25(ptr) Variable Function
+       435(r035):     25(ptr) Variable Function
+       439(r036):     25(ptr) Variable Function
+       442(r037):     25(ptr) Variable Function
+       448(r038):     25(ptr) Variable Function
+       452(r039):    451(ptr) Variable Function
+       455(r040):    451(ptr) Variable Function
+       458(r041):     25(ptr) Variable Function
+      462(r039a):     25(ptr) Variable Function
+       467(r042):      7(ptr) Variable Function
+       470(r043):     25(ptr) Variable Function
+       473(r044):     25(ptr) Variable Function
+       477(r045):     25(ptr) Variable Function
+       480(r046):     25(ptr) Variable Function
+       484(r047):     25(ptr) Variable Function
+       488(r048):     25(ptr) Variable Function
+       491(r049):     25(ptr) Variable Function
+       495(r050):     25(ptr) Variable Function
+       498(r051):     25(ptr) Variable Function
+       502(r052):     25(ptr) Variable Function
+       506(r053):     25(ptr) Variable Function
+       511(r054):     27(ptr) Variable Function
+       515(r055):     25(ptr) Variable Function
+       518(r056):     25(ptr) Variable Function
+       521(r057):     25(ptr) Variable Function
+       526(r058):     25(ptr) Variable Function
+       529(r059):     25(ptr) Variable Function
+       536(r060):     25(ptr) Variable Function
+       539(r061):     25(ptr) Variable Function
+       544(r062):     25(ptr) Variable Function
+       547(r063):     25(ptr) Variable Function
+       551(r064):     25(ptr) Variable Function
+       554(r065):     25(ptr) Variable Function
+       557(r066):     25(ptr) Variable Function
+             328:   24(fvec2) Load 29(inF0)
+             329:   121(bool) All 328
+                              Store 327(r000) 329
+             331:   24(fvec2) Load 29(inF0)
+             332:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 331
+                              Store 330(r001) 332
+             334:   24(fvec2) Load 29(inF0)
+             335:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 334
+                              Store 333(r002) 335
+             337:   24(fvec2) Load 29(inF0)
+             338:   121(bool) Any 337
+                              Store 336(r003) 338
+             340:   24(fvec2) Load 29(inF0)
+             341:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 340
+                              Store 339(r004) 341
+             345:   24(fvec2) Load 29(inF0)
+             346:  342(ivec2) Bitcast 345
+                              Store 344(r005) 346
+             348:   24(fvec2) Load 29(inF0)
+             349:   26(ivec2) Bitcast 348
+                              Store 347(r006) 349
+             351:   26(ivec2) Load 32(inU0)
+             352:   24(fvec2) Bitcast 351
+                              Store 350(r007) 352
+             354:   24(fvec2) Load 29(inF0)
+             355:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 354
+                              Store 353(r009) 355
+             357:   24(fvec2) Load 29(inF0)
+             358:   24(fvec2) Load 30(inF1)
+             359:   24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 357 358
+                              Store 356(r010) 359
+             361:   24(fvec2) Load 29(inF0)
+             362:   24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 361
+                              Store 360(r011) 362
+             364:   24(fvec2) Load 29(inF0)
+             365:   24(fvec2) Load 30(inF1)
+             366:   24(fvec2) Load 31(inF2)
+             367:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 364 365 366
+                              Store 363(r012) 367
+             368:   24(fvec2) Load 29(inF0)
+             371:  370(bvec2) FOrdLessThan 368 369
+             372:   121(bool) Any 371
+                              SelectionMerge 374 None
+                              BranchConditional 372 373 374
+             373:               Label
                                 Kill
-              87:             Label
-              89:    6(float) Load 48(inF0)
-              90:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 89
-              91:    6(float) Load 48(inF0)
-              92:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 91
-              94:     64(int) BitCount 93
-              95:    6(float) Load 48(inF0)
-              96:    6(float) DPdx 95
-              97:    6(float) Load 48(inF0)
-              98:    6(float) DPdxCoarse 97
-              99:    6(float) Load 48(inF0)
-             100:    6(float) DPdxFine 99
-             101:    6(float) Load 48(inF0)
-             102:    6(float) DPdy 101
-             103:    6(float) Load 48(inF0)
-             104:    6(float) DPdyCoarse 103
-             105:    6(float) Load 48(inF0)
-             106:    6(float) DPdyFine 105
-             107:    6(float) Load 48(inF0)
-             108:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 107
-             109:    6(float) Load 48(inF0)
-             110:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 109
-             111:    6(float) Load 48(inF0)
-             112:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 111
-             114:     61(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 113
-             115:     61(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 113
-             116:    6(float) Load 48(inF0)
-             117:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 116
-             118:    6(float) Load 48(inF0)
-             119:    6(float) Load 73(inF1)
-             120:    6(float) FMod 118 119
-             121:    6(float) Load 48(inF0)
-             122:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 121
-             123:    6(float) Load 48(inF0)
-             125:124(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 123
-             126:     61(int) CompositeExtract 125 1
-                              Store 73(inF1) 126
-             127:    6(float) CompositeExtract 125 0
-             128:    6(float) Load 48(inF0)
-             129:    6(float) Fwidth 128
-             130:    6(float) Load 48(inF0)
-             131:    50(bool) IsInf 130
-             132:    6(float) Load 48(inF0)
-             133:    50(bool) IsNan 132
-             134:    6(float) Load 48(inF0)
-             135:    6(float) Load 73(inF1)
-             136:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 134 135
-             137:    6(float) Load 48(inF0)
-             138:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 137
-             139:    6(float) Load 48(inF0)
-             140:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 139
-             142:    6(float) FMul 140 141
-             143:    6(float) Load 48(inF0)
-             144:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 143
-             145:    6(float) Load 48(inF0)
-             146:    6(float) Load 73(inF1)
-             147:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 145 146
-             148:    6(float) Load 48(inF0)
-             149:    6(float) Load 73(inF1)
-             150:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 148 149
-             151:    6(float) Load 48(inF0)
-             152:    6(float) Load 73(inF1)
-             153:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 151 152
-             154:    6(float) Load 48(inF0)
-             155:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 154
-             157:    6(float) Load 48(inF0)
-             158:    6(float) FDiv 156 157
-             160:     64(int) BitReverse 159
-             161:    6(float) Load 48(inF0)
-             162:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 161
-             163:    6(float) Load 48(inF0)
-             164:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 163
-             165:    6(float) Load 48(inF0)
-             166:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 165 84 156
-             167:    6(float) Load 48(inF0)
-             168:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 167
-             169:    6(float) Load 48(inF0)
-             170:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 169
-             171:    6(float) Load 48(inF0)
-             172:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 171
-                              Store 73(inF1) 172
-             173:    6(float) Load 48(inF0)
-             174:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 173
-                              Store 80(inF2) 174
-             175:    6(float) Load 48(inF0)
-             176:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 175
-             177:    6(float) Load 48(inF0)
-             178:    6(float) Load 73(inF1)
-             179:    6(float) Load 80(inF2)
-             180:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 177 178 179
-             181:    6(float) Load 48(inF0)
-             182:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 181
-             183:    6(float) Load 48(inF0)
-             184:    6(float) Load 73(inF1)
-             185:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 183 184
-             186:    6(float) Load 48(inF0)
-             187:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 186
-             188:    6(float) Load 48(inF0)
-             189:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 188
-             190:    6(float) Load 48(inF0)
-             191:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 190
-                              ReturnValue 84
+             374:             Label
+             377:   24(fvec2) Load 29(inF0)
+             378:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 377
+                              Store 376(r013) 378
+             380:   24(fvec2) Load 29(inF0)
+             381:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 380
+                              Store 379(r015) 381
+             385:   26(ivec2) BitCount 384
+                              Store 382(r016) 385
+             387:   24(fvec2) Load 29(inF0)
+             388:   24(fvec2) DPdx 387
+                              Store 386(r017) 388
+             390:   24(fvec2) Load 29(inF0)
+             391:   24(fvec2) DPdxCoarse 390
+                              Store 389(r018) 391
+             393:   24(fvec2) Load 29(inF0)
+             394:   24(fvec2) DPdxFine 393
+                              Store 392(r019) 394
+             396:   24(fvec2) Load 29(inF0)
+             397:   24(fvec2) DPdy 396
+                              Store 395(r020) 397
+             399:   24(fvec2) Load 29(inF0)
+             400:   24(fvec2) DPdyCoarse 399
+                              Store 398(r021) 400
+             402:   24(fvec2) Load 29(inF0)
+             403:   24(fvec2) DPdyFine 402
+                              Store 401(r022) 403
+             405:   24(fvec2) Load 29(inF0)
+             406:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 405
+                              Store 404(r023) 406
+             408:   24(fvec2) Load 29(inF0)
+             409:   24(fvec2) Load 30(inF1)
+             410:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 408 409
+                              Store 407(r026) 410
+             412:   24(fvec2) Load 29(inF0)
+             413:   24(fvec2) Load 30(inF1)
+             414:    6(float) Dot 412 413
+                              Store 411(r027) 414
+             416:   24(fvec2) Load 29(inF0)
+             417:   24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 416
+                              Store 415(r028) 417
+             419:   24(fvec2) Load 29(inF0)
+             420:   24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 419
+                              Store 418(r029) 420
+             422:   24(fvec2) Load 29(inF0)
+             423:   24(fvec2) Load 30(inF1)
+             424:   24(fvec2) Load 31(inF2)
+             425:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 422 423 424
+                              Store 421(r030) 425
+             429:   26(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 428
+                              Store 426(r031) 429
+             431:   26(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 428
+                              Store 430(r032) 431
+             433:   24(fvec2) Load 29(inF0)
+             434:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 433
+                              Store 432(r033) 434
+             436:   24(fvec2) Load 29(inF0)
+             437:   24(fvec2) Load 30(inF1)
+             438:   24(fvec2) FMod 436 437
+                              Store 435(r035) 438
+             440:   24(fvec2) Load 29(inF0)
+             441:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 440
+                              Store 439(r036) 441
+             443:   24(fvec2) Load 29(inF0)
+             445:444(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 443
+             446:  342(ivec2) CompositeExtract 445 1
+                              Store 30(inF1) 446
+             447:   24(fvec2) CompositeExtract 445 0
+                              Store 442(r037) 447
+             449:   24(fvec2) Load 29(inF0)
+             450:   24(fvec2) Fwidth 449
+                              Store 448(r038) 450
+             453:   24(fvec2) Load 29(inF0)
+             454:  370(bvec2) IsInf 453
+                              Store 452(r039) 454
+             456:   24(fvec2) Load 29(inF0)
+             457:  370(bvec2) IsNan 456
+                              Store 455(r040) 457
+             459:   24(fvec2) Load 29(inF0)
+             460:   24(fvec2) Load 30(inF1)
+             461:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 459 460
+                              Store 458(r041) 461
+             463:   24(fvec2) Load 29(inF0)
+             464:   24(fvec2) Load 30(inF1)
+             465:   24(fvec2) Load 31(inF2)
+             466:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 463 464 465
+                              Store 462(r039a) 466
+             468:   24(fvec2) Load 29(inF0)
+             469:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 468
+                              Store 467(r042) 469
+             471:   24(fvec2) Load 29(inF0)
+             472:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 471
+                              Store 470(r043) 472
+             474:   24(fvec2) Load 29(inF0)
+             475:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 474
+             476:   24(fvec2) VectorTimesScalar 475 253
+                              Store 473(r044) 476
+             478:   24(fvec2) Load 29(inF0)
+             479:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 478
+                              Store 477(r045) 479
+             481:   24(fvec2) Load 29(inF0)
+             482:   24(fvec2) Load 30(inF1)
+             483:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 481 482
+                              Store 480(r046) 483
+             485:   24(fvec2) Load 29(inF0)
+             486:   24(fvec2) Load 30(inF1)
+             487:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 485 486
+                              Store 484(r047) 487
+             489:   24(fvec2) Load 29(inF0)
+             490:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 489
+                              Store 488(r048) 490
+             492:   24(fvec2) Load 29(inF0)
+             493:   24(fvec2) Load 30(inF1)
+             494:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 492 493
+                              Store 491(r049) 494
+             496:   24(fvec2) Load 29(inF0)
+             497:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 496
+                              Store 495(r050) 497
+             499:   24(fvec2) Load 29(inF0)
+             500:   24(fvec2) CompositeConstruct 274 274
+             501:   24(fvec2) FDiv 500 499
+                              Store 498(r051) 501
+             503:   24(fvec2) Load 29(inF0)
+             504:   24(fvec2) Load 30(inF1)
+             505:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 503 504
+                              Store 502(r052) 505
+             507:   24(fvec2) Load 29(inF0)
+             508:   24(fvec2) Load 30(inF1)
+             510:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 507 508 509
+                              Store 506(r053) 510
+             514:   26(ivec2) BitReverse 513
+                              Store 511(r054) 514
+             516:   24(fvec2) Load 29(inF0)
+             517:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 516
+                              Store 515(r055) 517
+             519:   24(fvec2) Load 29(inF0)
+             520:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 519
+                              Store 518(r056) 520
+             522:   24(fvec2) Load 29(inF0)
+             523:   24(fvec2) CompositeConstruct 165 165
+             524:   24(fvec2) CompositeConstruct 274 274
+             525:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 522 523 524
+                              Store 521(r057) 525
+             527:   24(fvec2) Load 29(inF0)
+             528:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 527
+                              Store 526(r058) 528
+             530:   24(fvec2) Load 29(inF0)
+             531:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 530
+                              Store 529(r059) 531
+             532:   24(fvec2) Load 29(inF0)
+             533:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 532
+                              Store 30(inF1) 533
+             534:   24(fvec2) Load 29(inF0)
+             535:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 534
+                              Store 31(inF2) 535
+             537:   24(fvec2) Load 29(inF0)
+             538:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 537
+                              Store 536(r060) 538
+             540:   24(fvec2) Load 29(inF0)
+             541:   24(fvec2) Load 30(inF1)
+             542:   24(fvec2) Load 31(inF2)
+             543:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 540 541 542
+                              Store 539(r061) 543
+             545:   24(fvec2) Load 29(inF0)
+             546:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 545
+                              Store 544(r062) 546
+             548:   24(fvec2) Load 29(inF0)
+             549:   24(fvec2) Load 30(inF1)
+             550:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 548 549
+                              Store 547(r063) 550
+             552:   24(fvec2) Load 29(inF0)
+             553:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 552
+                              Store 551(r064) 553
+             555:   24(fvec2) Load 29(inF0)
+             556:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 555
+                              Store 554(r065) 556
+             558:   24(fvec2) Load 29(inF0)
+             559:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 558
+                              Store 557(r066) 559
+                              ReturnValue 560
+                              FunctionEnd
+46(PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
+        41(inF0):     37(ptr) FunctionParameter
+        42(inF1):     37(ptr) FunctionParameter
+        43(inF2):     37(ptr) FunctionParameter
+        44(inU0):     39(ptr) FunctionParameter
+        45(inU1):     39(ptr) FunctionParameter
+              47:             Label
+       563(r000):    122(ptr) Variable Function
+       566(r001):     37(ptr) Variable Function
+       569(r002):     37(ptr) Variable Function
+       572(r003):    122(ptr) Variable Function
+       575(r004):     37(ptr) Variable Function
+       580(r005):    579(ptr) Variable Function
+       583(r006):     39(ptr) Variable Function
+       586(r007):     37(ptr) Variable Function
+       589(r009):     37(ptr) Variable Function
+       592(r010):     37(ptr) Variable Function
+       596(r011):     37(ptr) Variable Function
+       599(r012):     37(ptr) Variable Function
+       612(r013):     37(ptr) Variable Function
+       615(r014):     37(ptr) Variable Function
+       618(r015):     39(ptr) Variable Function
+       622(r016):     37(ptr) Variable Function
+       626(r017):     37(ptr) Variable Function
+       629(r018):     37(ptr) Variable Function
+       632(r019):     37(ptr) Variable Function
+       635(r020):     37(ptr) Variable Function
+       638(r021):     37(ptr) Variable Function
+       641(r022):     37(ptr) Variable Function
+       644(r023):     37(ptr) Variable Function
+       647(r024):      7(ptr) Variable Function
+       651(r025):      7(ptr) Variable Function
+       655(r029):     37(ptr) Variable Function
+       658(r030):     37(ptr) Variable Function
+       661(r031):     37(ptr) Variable Function
+       666(r032):     39(ptr) Variable Function
+       670(r033):     39(ptr) Variable Function
+       672(r034):     37(ptr) Variable Function
+       675(r036):     37(ptr) Variable Function
+       679(r037):     37(ptr) Variable Function
+       682(r038):     37(ptr) Variable Function
+       688(r039):     37(ptr) Variable Function
+       692(r040):    691(ptr) Variable Function
+       695(r041):    691(ptr) Variable Function
+       698(r042):     37(ptr) Variable Function
+      702(r039a):     37(ptr) Variable Function
+       707(r043):      7(ptr) Variable Function
+       710(r044):     37(ptr) Variable Function
+       713(r045):     37(ptr) Variable Function
+       717(r046):     37(ptr) Variable Function
+       720(r047):     37(ptr) Variable Function
+       724(r048):     37(ptr) Variable Function
+       728(r049):     37(ptr) Variable Function
+       731(r050):     37(ptr) Variable Function
+       735(r051):     37(ptr) Variable Function
+       738(r052):     37(ptr) Variable Function
+       742(r053):     37(ptr) Variable Function
+       746(r054):     37(ptr) Variable Function
+       750(r055):     39(ptr) Variable Function
+       753(r056):     37(ptr) Variable Function
+       756(r057):     37(ptr) Variable Function
+       759(r058):     37(ptr) Variable Function
+       764(r059):     37(ptr) Variable Function
+       767(r060):     37(ptr) Variable Function
+       774(r061):     37(ptr) Variable Function
+       777(r062):     37(ptr) Variable Function
+       782(r063):     37(ptr) Variable Function
+       785(r064):     37(ptr) Variable Function
+       789(r065):     37(ptr) Variable Function
+       792(r066):     37(ptr) Variable Function
+       795(r067):     37(ptr) Variable Function
+             564:   36(fvec3) Load 41(inF0)
+             565:   121(bool) All 564
+                              Store 563(r000) 565
+             567:   36(fvec3) Load 41(inF0)
+             568:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 567
+                              Store 566(r001) 568
+             570:   36(fvec3) Load 41(inF0)
+             571:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 570
+                              Store 569(r002) 571
+             573:   36(fvec3) Load 41(inF0)
+             574:   121(bool) Any 573
+                              Store 572(r003) 574
+             576:   36(fvec3) Load 41(inF0)
+             577:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 576
+                              Store 575(r004) 577
+             581:   36(fvec3) Load 41(inF0)
+             582:  578(ivec3) Bitcast 581
+                              Store 580(r005) 582
+             584:   36(fvec3) Load 41(inF0)
+             585:   38(ivec3) Bitcast 584
+                              Store 583(r006) 585
+             587:   38(ivec3) Load 44(inU0)
+             588:   36(fvec3) Bitcast 587
+                              Store 586(r007) 588
+             590:   36(fvec3) Load 41(inF0)
+             591:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 590
+                              Store 589(r009) 591
+             593:   36(fvec3) Load 41(inF0)
+             594:   36(fvec3) Load 42(inF1)
+             595:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 593 594
+                              Store 592(r010) 595
+             597:   36(fvec3) Load 41(inF0)
+             598:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 597
+                              Store 596(r011) 598
+             600:   36(fvec3) Load 41(inF0)
+             601:   36(fvec3) Load 42(inF1)
+             602:   36(fvec3) Load 43(inF2)
+             603:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 600 601 602
+                              Store 599(r012) 603
+             604:   36(fvec3) Load 41(inF0)
+             607:  606(bvec3) FOrdLessThan 604 605
+             608:   121(bool) Any 607
+                              SelectionMerge 610 None
+                              BranchConditional 608 609 610
+             609:               Label
+                                Kill
+             610:             Label
+             613:   36(fvec3) Load 41(inF0)
+             614:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 613
+                              Store 612(r013) 614
+             616:   36(fvec3) Load 41(inF0)
+             617:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 616
+                              Store 615(r014) 617
+             621:   38(ivec3) BitCount 620
+                              Store 618(r015) 621
+             623:   36(fvec3) Load 41(inF0)
+             624:   36(fvec3) Load 42(inF1)
+             625:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 623 624
+                              Store 622(r016) 625
+             627:   36(fvec3) Load 41(inF0)
+             628:   36(fvec3) DPdx 627
+                              Store 626(r017) 628
+             630:   36(fvec3) Load 41(inF0)
+             631:   36(fvec3) DPdxCoarse 630
+                              Store 629(r018) 631
+             633:   36(fvec3) Load 41(inF0)
+             634:   36(fvec3) DPdxFine 633
+                              Store 632(r019) 634
+             636:   36(fvec3) Load 41(inF0)
+             637:   36(fvec3) DPdy 636
+                              Store 635(r020) 637
+             639:   36(fvec3) Load 41(inF0)
+             640:   36(fvec3) DPdyCoarse 639
+                              Store 638(r021) 640
+             642:   36(fvec3) Load 41(inF0)
+             643:   36(fvec3) DPdyFine 642
+                              Store 641(r022) 643
+             645:   36(fvec3) Load 41(inF0)
+             646:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 645
+                              Store 644(r023) 646
+             648:   36(fvec3) Load 41(inF0)
+             649:   36(fvec3) Load 42(inF1)
+             650:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 648 649
+                              Store 647(r024) 650
+             652:   36(fvec3) Load 41(inF0)
+             653:   36(fvec3) Load 42(inF1)
+             654:    6(float) Dot 652 653
+                              Store 651(r025) 654
+             656:   36(fvec3) Load 41(inF0)
+             657:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 656
+                              Store 655(r029) 657
+             659:   36(fvec3) Load 41(inF0)
+             660:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 659
+                              Store 658(r030) 660
+             662:   36(fvec3) Load 41(inF0)
+             663:   36(fvec3) Load 42(inF1)
+             664:   36(fvec3) Load 43(inF2)
+             665:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 662 663 664
+                              Store 661(r031) 665
+             669:   38(ivec3) ExtInst 1(GLSL.std.450) 75(FindUMsb) 668
+                              Store 666(r032) 669
+             671:   38(ivec3) ExtInst 1(GLSL.std.450) 73(FindILsb) 668
+                              Store 670(r033) 671
+             673:   36(fvec3) Load 41(inF0)
+             674:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 673
+                              Store 672(r034) 674
+             676:   36(fvec3) Load 41(inF0)
+             677:   36(fvec3) Load 42(inF1)
+             678:   36(fvec3) FMod 676 677
+                              Store 675(r036) 678
+             680:   36(fvec3) Load 41(inF0)
+             681:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 680
+                              Store 679(r037) 681
+             683:   36(fvec3) Load 41(inF0)
+             685:684(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 683
+             686:  578(ivec3) CompositeExtract 685 1
+                              Store 42(inF1) 686
+             687:   36(fvec3) CompositeExtract 685 0
+                              Store 682(r038) 687
+             689:   36(fvec3) Load 41(inF0)
+             690:   36(fvec3) Fwidth 689
+                              Store 688(r039) 690
+             693:   36(fvec3) Load 41(inF0)
+             694:  606(bvec3) IsInf 693
+                              Store 692(r040) 694
+             696:   36(fvec3) Load 41(inF0)
+             697:  606(bvec3) IsNan 696
+                              Store 695(r041) 697
+             699:   36(fvec3) Load 41(inF0)
+             700:   36(fvec3) Load 42(inF1)
+             701:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 699 700
+                              Store 698(r042) 701
+             703:   36(fvec3) Load 41(inF0)
+             704:   36(fvec3) Load 42(inF1)
+             705:   36(fvec3) Load 43(inF2)
+             706:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 703 704 705
+                              Store 702(r039a) 706
+             708:   36(fvec3) Load 41(inF0)
+             709:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 708
+                              Store 707(r043) 709
+             711:   36(fvec3) Load 41(inF0)
+             712:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 711
+                              Store 710(r044) 712
+             714:   36(fvec3) Load 41(inF0)
+             715:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 714
+             716:   36(fvec3) VectorTimesScalar 715 253
+                              Store 713(r045) 716
+             718:   36(fvec3) Load 41(inF0)
+             719:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 718
+                              Store 717(r046) 719
+             721:   36(fvec3) Load 41(inF0)
+             722:   36(fvec3) Load 42(inF1)
+             723:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 721 722
+                              Store 720(r047) 723
+             725:   36(fvec3) Load 41(inF0)
+             726:   36(fvec3) Load 42(inF1)
+             727:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 725 726
+                              Store 724(r048) 727
+             729:   36(fvec3) Load 41(inF0)
+             730:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 729
+                              Store 728(r049) 730
+             732:   36(fvec3) Load 41(inF0)
+             733:   36(fvec3) Load 42(inF1)
+             734:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 732 733
+                              Store 731(r050) 734
+             736:   36(fvec3) Load 41(inF0)
+             737:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 736
+                              Store 735(r051) 737
+             739:   36(fvec3) Load 41(inF0)
+             740:   36(fvec3) CompositeConstruct 274 274 274
+             741:   36(fvec3) FDiv 740 739
+                              Store 738(r052) 741
+             743:   36(fvec3) Load 41(inF0)
+             744:   36(fvec3) Load 42(inF1)
+             745:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 743 744
+                              Store 742(r053) 745
+             747:   36(fvec3) Load 41(inF0)
+             748:   36(fvec3) Load 42(inF1)
+             749:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 747 748 509
+                              Store 746(r054) 749
+             752:   38(ivec3) BitReverse 751
+                              Store 750(r055) 752
+             754:   36(fvec3) Load 41(inF0)
+             755:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 754
+                              Store 753(r056) 755
+             757:   36(fvec3) Load 41(inF0)
+             758:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 757
+                              Store 756(r057) 758
+             760:   36(fvec3) Load 41(inF0)
+             761:   36(fvec3) CompositeConstruct 165 165 165
+             762:   36(fvec3) CompositeConstruct 274 274 274
+             763:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 760 761 762
+                              Store 759(r058) 763
+             765:   36(fvec3) Load 41(inF0)
+             766:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 765
+                              Store 764(r059) 766
+             768:   36(fvec3) Load 41(inF0)
+             769:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 768
+                              Store 767(r060) 769
+             770:   36(fvec3) Load 41(inF0)
+             771:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 770
+                              Store 42(inF1) 771
+             772:   36(fvec3) Load 41(inF0)
+             773:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 772
+                              Store 43(inF2) 773
+             775:   36(fvec3) Load 41(inF0)
+             776:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 775
+                              Store 774(r061) 776
+             778:   36(fvec3) Load 41(inF0)
+             779:   36(fvec3) Load 42(inF1)
+             780:   36(fvec3) Load 43(inF2)
+             781:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 778 779 780
+                              Store 777(r062) 781
+             783:   36(fvec3) Load 41(inF0)
+             784:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 783
+                              Store 782(r063) 784
+             786:   36(fvec3) Load 41(inF0)
+             787:   36(fvec3) Load 42(inF1)
+             788:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 786 787
+                              Store 785(r064) 788
+             790:   36(fvec3) Load 41(inF0)
+             791:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 790
+                              Store 789(r065) 791
+             793:   36(fvec3) Load 41(inF0)
+             794:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 793
+                              Store 792(r066) 794
+             796:   36(fvec3) Load 41(inF0)
+             797:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 796
+                              Store 795(r067) 797
+                              ReturnValue 799
+                              FunctionEnd
+54(PixelShaderFunction2x2(mf22;mf22;mf22;):          48 Function None 50
+        51(inF0):     49(ptr) FunctionParameter
+        52(inF1):     49(ptr) FunctionParameter
+        53(inF2):     49(ptr) FunctionParameter
+              55:             Label
+      1056(r000):    122(ptr) Variable Function
+      1059(r001):     49(ptr) Variable Function
+      1064(r003):    122(ptr) Variable Function
+      1067(r004):     49(ptr) Variable Function
+      1070(r005):     49(ptr) Variable Function
+      1073(r006):     49(ptr) Variable Function
+      1077(r007):     49(ptr) Variable Function
+      1088(r008):     49(ptr) Variable Function
+      1093(r009):     49(ptr) Variable Function
+      1096(r010):     49(ptr) Variable Function
+      1099(r011):     49(ptr) Variable Function
+      1102(r012):     49(ptr) Variable Function
+      1105(r013):     49(ptr) Variable Function
+      1108(r014):     49(ptr) Variable Function
+      1111(r015):     49(ptr) Variable Function
+      1114(r016):     49(ptr) Variable Function
+      1117(r017):     49(ptr) Variable Function
+      1120(r018):      7(ptr) Variable Function
+      1123(r019):     49(ptr) Variable Function
+      1126(R020):     49(ptr) Variable Function
+      1129(r021):     49(ptr) Variable Function
+      1132(r022):     49(ptr) Variable Function
+      1142(r023):     49(ptr) Variable Function
+      1145(r024):     49(ptr) Variable Function
+      1151(r025):     49(ptr) Variable Function
+      1154(r026):     49(ptr) Variable Function
+     1158(r026a):     49(ptr) Variable Function
+      1163(r027):     49(ptr) Variable Function
+      1166(r028):     49(ptr) Variable Function
+      1170(r029):     49(ptr) Variable Function
+      1173(r030):     49(ptr) Variable Function
+      1177(r031):     49(ptr) Variable Function
+      1181(r032):     49(ptr) Variable Function
+      1185(r033):     49(ptr) Variable Function
+      1188(r034):     49(ptr) Variable Function
+      1191(r035):     49(ptr) Variable Function
+      1194(r036):     49(ptr) Variable Function
+      1199(r037):     49(ptr) Variable Function
+      1202(r038):     49(ptr) Variable Function
+      1209(r039):     49(ptr) Variable Function
+      1212(r049):     49(ptr) Variable Function
+      1217(r041):     49(ptr) Variable Function
+      1220(r042):     49(ptr) Variable Function
+      1224(r043):     49(ptr) Variable Function
+      1227(r044):     49(ptr) Variable Function
+      1232(r046):     49(ptr) Variable Function
+            1057:          48 Load 51(inF0)
+            1058:   121(bool) All 1057
+                              Store 1056(r000) 1058
+            1060:          48 Load 51(inF0)
+            1061:          48 ExtInst 1(GLSL.std.450) 4(FAbs) 1060
+                              Store 1059(r001) 1061
+            1062:          48 Load 51(inF0)
+            1063:          48 ExtInst 1(GLSL.std.450) 17(Acos) 1062
+            1065:          48 Load 51(inF0)
+            1066:   121(bool) Any 1065
+                              Store 1064(r003) 1066
+            1068:          48 Load 51(inF0)
+            1069:          48 ExtInst 1(GLSL.std.450) 16(Asin) 1068
+                              Store 1067(r004) 1069
+            1071:          48 Load 51(inF0)
+            1072:          48 ExtInst 1(GLSL.std.450) 18(Atan) 1071
+                              Store 1070(r005) 1072
+            1074:          48 Load 51(inF0)
+            1075:          48 Load 52(inF1)
+            1076:          48 ExtInst 1(GLSL.std.450) 25(Atan2) 1074 1075
+                              Store 1073(r006) 1076
+            1078:          48 Load 51(inF0)
+            1079:          48 ExtInst 1(GLSL.std.450) 9(Ceil) 1078
+                              Store 1077(r007) 1079
+            1080:          48 Load 51(inF0)
+            1083:        1082 FOrdLessThan 1080 1081
+            1084:   121(bool) Any 1083
+                              SelectionMerge 1086 None
+                              BranchConditional 1084 1085 1086
+            1085:               Label
+                                Kill
+            1086:             Label
+            1089:          48 Load 51(inF0)
+            1090:          48 Load 52(inF1)
+            1091:          48 Load 53(inF2)
+            1092:          48 ExtInst 1(GLSL.std.450) 43(FClamp) 1089 1090 1091
+                              Store 1088(r008) 1092
+            1094:          48 Load 51(inF0)
+            1095:          48 ExtInst 1(GLSL.std.450) 14(Cos) 1094
+                              Store 1093(r009) 1095
+            1097:          48 Load 51(inF0)
+            1098:          48 ExtInst 1(GLSL.std.450) 20(Cosh) 1097
+                              Store 1096(r010) 1098
+            1100:          48 Load 51(inF0)
+            1101:          48 DPdx 1100
+                              Store 1099(r011) 1101
+            1103:          48 Load 51(inF0)
+            1104:          48 DPdxCoarse 1103
+                              Store 1102(r012) 1104
+            1106:          48 Load 51(inF0)
+            1107:          48 DPdxFine 1106
+                              Store 1105(r013) 1107
+            1109:          48 Load 51(inF0)
+            1110:          48 DPdy 1109
+                              Store 1108(r014) 1110
+            1112:          48 Load 51(inF0)
+            1113:          48 DPdyCoarse 1112
+                              Store 1111(r015) 1113
+            1115:          48 Load 51(inF0)
+            1116:          48 DPdyFine 1115
+                              Store 1114(r016) 1116
+            1118:          48 Load 51(inF0)
+            1119:          48 ExtInst 1(GLSL.std.450) 12(Degrees) 1118
+                              Store 1117(r017) 1119
+            1121:          48 Load 51(inF0)
+            1122:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1121
+                              Store 1120(r018) 1122
+            1124:          48 Load 51(inF0)
+            1125:          48 ExtInst 1(GLSL.std.450) 27(Exp) 1124
+                              Store 1123(r019) 1125
+            1127:          48 Load 51(inF0)
+            1128:          48 ExtInst 1(GLSL.std.450) 29(Exp2) 1127
+                              Store 1126(R020) 1128
+            1130:          48 Load 51(inF0)
+            1131:          48 ExtInst 1(GLSL.std.450) 8(Floor) 1130
+                              Store 1129(r021) 1131
+            1133:          48 Load 51(inF0)
+            1134:          48 Load 52(inF1)
+            1135:   24(fvec2) CompositeExtract 1133 0
+            1136:   24(fvec2) CompositeExtract 1134 0
+            1137:   24(fvec2) FMod 1135 1136
+            1138:   24(fvec2) CompositeExtract 1133 1
+            1139:   24(fvec2) CompositeExtract 1134 1
+            1140:   24(fvec2) FMod 1138 1139
+            1141:          48 CompositeConstruct 1137 1140
+                              Store 1132(r022) 1141
+            1143:          48 Load 51(inF0)
+            1144:          48 ExtInst 1(GLSL.std.450) 10(Fract) 1143
+                              Store 1142(r023) 1144
+            1146:          48 Load 51(inF0)
+            1148:1147(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1146
+            1149:  342(ivec2) CompositeExtract 1148 1
+                              Store 52(inF1) 1149
+            1150:          48 CompositeExtract 1148 0
+                              Store 1145(r024) 1150
+            1152:          48 Load 51(inF0)
+            1153:          48 Fwidth 1152
+                              Store 1151(r025) 1153
+            1155:          48 Load 51(inF0)
+            1156:          48 Load 52(inF1)
+            1157:          48 ExtInst 1(GLSL.std.450) 53(Ldexp) 1155 1156
+                              Store 1154(r026) 1157
+            1159:          48 Load 51(inF0)
+            1160:          48 Load 52(inF1)
+            1161:          48 Load 53(inF2)
+            1162:          48 ExtInst 1(GLSL.std.450) 46(FMix) 1159 1160 1161
+                              Store 1158(r026a) 1162
+            1164:          48 Load 51(inF0)
+            1165:          48 ExtInst 1(GLSL.std.450) 28(Log) 1164
+                              Store 1163(r027) 1165
+            1167:          48 Load 51(inF0)
+            1168:          48 ExtInst 1(GLSL.std.450) 30(Log2) 1167
+            1169:          48 MatrixTimesScalar 1168 253
+                              Store 1166(r028) 1169
+            1171:          48 Load 51(inF0)
+            1172:          48 ExtInst 1(GLSL.std.450) 30(Log2) 1171
+                              Store 1170(r029) 1172
+            1174:          48 Load 51(inF0)
+            1175:          48 Load 52(inF1)
+            1176:          48 ExtInst 1(GLSL.std.450) 40(FMax) 1174 1175
+                              Store 1173(r030) 1176
+            1178:          48 Load 51(inF0)
+            1179:          48 Load 52(inF1)
+            1180:          48 ExtInst 1(GLSL.std.450) 37(FMin) 1178 1179
+                              Store 1177(r031) 1180
+            1182:          48 Load 51(inF0)
+            1183:          48 Load 52(inF1)
+            1184:          48 ExtInst 1(GLSL.std.450) 26(Pow) 1182 1183
+                              Store 1181(r032) 1184
+            1186:          48 Load 51(inF0)
+            1187:          48 ExtInst 1(GLSL.std.450) 11(Radians) 1186
+                              Store 1185(r033) 1187
+            1189:          48 Load 51(inF0)
+            1190:          48 ExtInst 1(GLSL.std.450) 2(RoundEven) 1189
+                              Store 1188(r034) 1190
+            1192:          48 Load 51(inF0)
+            1193:          48 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1192
+                              Store 1191(r035) 1193
+            1195:          48 Load 51(inF0)
+            1196:   24(fvec2) CompositeConstruct 165 165
+            1197:   24(fvec2) CompositeConstruct 274 274
+            1198:          48 ExtInst 1(GLSL.std.450) 43(FClamp) 1195 1196 1197
+                              Store 1194(r036) 1198
+            1200:          48 Load 51(inF0)
+            1201:          48 ExtInst 1(GLSL.std.450) 6(FSign) 1200
+                              Store 1199(r037) 1201
+            1203:          48 Load 51(inF0)
+            1204:          48 ExtInst 1(GLSL.std.450) 13(Sin) 1203
+                              Store 1202(r038) 1204
+            1205:          48 Load 51(inF0)
+            1206:          48 ExtInst 1(GLSL.std.450) 13(Sin) 1205
+                              Store 52(inF1) 1206
+            1207:          48 Load 51(inF0)
+            1208:          48 ExtInst 1(GLSL.std.450) 14(Cos) 1207
+                              Store 53(inF2) 1208
+            1210:          48 Load 51(inF0)
+            1211:          48 ExtInst 1(GLSL.std.450) 19(Sinh) 1210
+                              Store 1209(r039) 1211
+            1213:          48 Load 51(inF0)
+            1214:          48 Load 52(inF1)
+            1215:          48 Load 53(inF2)
+            1216:          48 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1213 1214 1215
+                              Store 1212(r049) 1216
+            1218:          48 Load 51(inF0)
+            1219:          48 ExtInst 1(GLSL.std.450) 31(Sqrt) 1218
+                              Store 1217(r041) 1219
+            1221:          48 Load 51(inF0)
+            1222:          48 Load 52(inF1)
+            1223:          48 ExtInst 1(GLSL.std.450) 48(Step) 1221 1222
+                              Store 1220(r042) 1223
+            1225:          48 Load 51(inF0)
+            1226:          48 ExtInst 1(GLSL.std.450) 15(Tan) 1225
+                              Store 1224(r043) 1226
+            1228:          48 Load 51(inF0)
+            1229:          48 ExtInst 1(GLSL.std.450) 21(Tanh) 1228
+                              Store 1227(r044) 1229
+            1230:          48 Load 51(inF0)
+            1231:          48 Transpose 1230
+            1233:          48 Load 51(inF0)
+            1234:          48 ExtInst 1(GLSL.std.450) 3(Trunc) 1233
+                              Store 1232(r046) 1234
+                              ReturnValue 1236
+                              FunctionEnd
+62(PixelShaderFunction3x3(mf33;mf33;mf33;):          56 Function None 58
+        59(inF0):     57(ptr) FunctionParameter
+        60(inF1):     57(ptr) FunctionParameter
+        61(inF2):     57(ptr) FunctionParameter
+              63:             Label
+      1239(r000):    122(ptr) Variable Function
+      1242(r001):     57(ptr) Variable Function
+      1247(r003):    122(ptr) Variable Function
+      1250(r004):     57(ptr) Variable Function
+      1253(r005):     57(ptr) Variable Function
+      1256(r006):     57(ptr) Variable Function
+      1260(r007):     57(ptr) Variable Function
+      1271(r008):     57(ptr) Variable Function
+      1276(r009):     57(ptr) Variable Function
+      1279(r010):     57(ptr) Variable Function
+      1282(r011):     57(ptr) Variable Function
+      1285(r012):     57(ptr) Variable Function
+      1288(r013):     57(ptr) Variable Function
+      1291(r014):     57(ptr) Variable Function
+      1294(r015):     57(ptr) Variable Function
+      1297(r016):     57(ptr) Variable Function
+      1300(r017):     57(ptr) Variable Function
+      1303(r018):      7(ptr) Variable Function
+      1306(r019):     57(ptr) Variable Function
+      1309(R020):     57(ptr) Variable Function
+      1312(r021):     57(ptr) Variable Function
+      1315(r022):     57(ptr) Variable Function
+      1328(r023):     57(ptr) Variable Function
+      1331(r024):     57(ptr) Variable Function
+      1337(r025):     57(ptr) Variable Function
+      1340(r026):     57(ptr) Variable Function
+     1344(r026a):     57(ptr) Variable Function
+      1349(r027):     57(ptr) Variable Function
+      1352(r028):     57(ptr) Variable Function
+      1356(r029):     57(ptr) Variable Function
+      1359(r030):     57(ptr) Variable Function
+      1363(r031):     57(ptr) Variable Function
+      1367(r032):     57(ptr) Variable Function
+      1371(r033):     57(ptr) Variable Function
+      1374(r034):     57(ptr) Variable Function
+      1377(r035):     57(ptr) Variable Function
+      1380(r036):     57(ptr) Variable Function
+      1385(r037):     57(ptr) Variable Function
+      1388(r038):     57(ptr) Variable Function
+      1395(r039):     57(ptr) Variable Function
+      1398(r049):     57(ptr) Variable Function
+      1403(r041):     57(ptr) Variable Function
+      1406(r042):     57(ptr) Variable Function
+      1410(r043):     57(ptr) Variable Function
+      1413(r044):     57(ptr) Variable Function
+      1418(r046):     57(ptr) Variable Function
+            1240:          56 Load 59(inF0)
+            1241:   121(bool) All 1240
+                              Store 1239(r000) 1241
+            1243:          56 Load 59(inF0)
+            1244:          56 ExtInst 1(GLSL.std.450) 4(FAbs) 1243
+                              Store 1242(r001) 1244
+            1245:          56 Load 59(inF0)
+            1246:          56 ExtInst 1(GLSL.std.450) 17(Acos) 1245
+            1248:          56 Load 59(inF0)
+            1249:   121(bool) Any 1248
+                              Store 1247(r003) 1249
+            1251:          56 Load 59(inF0)
+            1252:          56 ExtInst 1(GLSL.std.450) 16(Asin) 1251
+                              Store 1250(r004) 1252
+            1254:          56 Load 59(inF0)
+            1255:          56 ExtInst 1(GLSL.std.450) 18(Atan) 1254
+                              Store 1253(r005) 1255
+            1257:          56 Load 59(inF0)
+            1258:          56 Load 60(inF1)
+            1259:          56 ExtInst 1(GLSL.std.450) 25(Atan2) 1257 1258
+                              Store 1256(r006) 1259
+            1261:          56 Load 59(inF0)
+            1262:          56 ExtInst 1(GLSL.std.450) 9(Ceil) 1261
+                              Store 1260(r007) 1262
+            1263:          56 Load 59(inF0)
+            1266:        1265 FOrdLessThan 1263 1264
+            1267:   121(bool) Any 1266
+                              SelectionMerge 1269 None
+                              BranchConditional 1267 1268 1269
+            1268:               Label
+                                Kill
+            1269:             Label
+            1272:          56 Load 59(inF0)
+            1273:          56 Load 60(inF1)
+            1274:          56 Load 61(inF2)
+            1275:          56 ExtInst 1(GLSL.std.450) 43(FClamp) 1272 1273 1274
+                              Store 1271(r008) 1275
+            1277:          56 Load 59(inF0)
+            1278:          56 ExtInst 1(GLSL.std.450) 14(Cos) 1277
+                              Store 1276(r009) 1278
+            1280:          56 Load 59(inF0)
+            1281:          56 ExtInst 1(GLSL.std.450) 20(Cosh) 1280
+                              Store 1279(r010) 1281
+            1283:          56 Load 59(inF0)
+            1284:          56 DPdx 1283
+                              Store 1282(r011) 1284
+            1286:          56 Load 59(inF0)
+            1287:          56 DPdxCoarse 1286
+                              Store 1285(r012) 1287
+            1289:          56 Load 59(inF0)
+            1290:          56 DPdxFine 1289
+                              Store 1288(r013) 1290
+            1292:          56 Load 59(inF0)
+            1293:          56 DPdy 1292
+                              Store 1291(r014) 1293
+            1295:          56 Load 59(inF0)
+            1296:          56 DPdyCoarse 1295
+                              Store 1294(r015) 1296
+            1298:          56 Load 59(inF0)
+            1299:          56 DPdyFine 1298
+                              Store 1297(r016) 1299
+            1301:          56 Load 59(inF0)
+            1302:          56 ExtInst 1(GLSL.std.450) 12(Degrees) 1301
+                              Store 1300(r017) 1302
+            1304:          56 Load 59(inF0)
+            1305:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1304
+                              Store 1303(r018) 1305
+            1307:          56 Load 59(inF0)
+            1308:          56 ExtInst 1(GLSL.std.450) 27(Exp) 1307
+                              Store 1306(r019) 1308
+            1310:          56 Load 59(inF0)
+            1311:          56 ExtInst 1(GLSL.std.450) 29(Exp2) 1310
+                              Store 1309(R020) 1311
+            1313:          56 Load 59(inF0)
+            1314:          56 ExtInst 1(GLSL.std.450) 8(Floor) 1313
+                              Store 1312(r021) 1314
+            1316:          56 Load 59(inF0)
+            1317:          56 Load 60(inF1)
+            1318:   36(fvec3) CompositeExtract 1316 0
+            1319:   36(fvec3) CompositeExtract 1317 0
+            1320:   36(fvec3) FMod 1318 1319
+            1321:   36(fvec3) CompositeExtract 1316 1
+            1322:   36(fvec3) CompositeExtract 1317 1
+            1323:   36(fvec3) FMod 1321 1322
+            1324:   36(fvec3) CompositeExtract 1316 2
+            1325:   36(fvec3) CompositeExtract 1317 2
+            1326:   36(fvec3) FMod 1324 1325
+            1327:          56 CompositeConstruct 1320 1323 1326
+                              Store 1315(r022) 1327
+            1329:          56 Load 59(inF0)
+            1330:          56 ExtInst 1(GLSL.std.450) 10(Fract) 1329
+                              Store 1328(r023) 1330
+            1332:          56 Load 59(inF0)
+            1334:1333(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1332
+            1335:  578(ivec3) CompositeExtract 1334 1
+                              Store 60(inF1) 1335
+            1336:          56 CompositeExtract 1334 0
+                              Store 1331(r024) 1336
+            1338:          56 Load 59(inF0)
+            1339:          56 Fwidth 1338
+                              Store 1337(r025) 1339
+            1341:          56 Load 59(inF0)
+            1342:          56 Load 60(inF1)
+            1343:          56 ExtInst 1(GLSL.std.450) 53(Ldexp) 1341 1342
+                              Store 1340(r026) 1343
+            1345:          56 Load 59(inF0)
+            1346:          56 Load 60(inF1)
+            1347:          56 Load 61(inF2)
+            1348:          56 ExtInst 1(GLSL.std.450) 46(FMix) 1345 1346 1347
+                              Store 1344(r026a) 1348
+            1350:          56 Load 59(inF0)
+            1351:          56 ExtInst 1(GLSL.std.450) 28(Log) 1350
+                              Store 1349(r027) 1351
+            1353:          56 Load 59(inF0)
+            1354:          56 ExtInst 1(GLSL.std.450) 30(Log2) 1353
+            1355:          56 MatrixTimesScalar 1354 253
+                              Store 1352(r028) 1355
+            1357:          56 Load 59(inF0)
+            1358:          56 ExtInst 1(GLSL.std.450) 30(Log2) 1357
+                              Store 1356(r029) 1358
+            1360:          56 Load 59(inF0)
+            1361:          56 Load 60(inF1)
+            1362:          56 ExtInst 1(GLSL.std.450) 40(FMax) 1360 1361
+                              Store 1359(r030) 1362
+            1364:          56 Load 59(inF0)
+            1365:          56 Load 60(inF1)
+            1366:          56 ExtInst 1(GLSL.std.450) 37(FMin) 1364 1365
+                              Store 1363(r031) 1366
+            1368:          56 Load 59(inF0)
+            1369:          56 Load 60(inF1)
+            1370:          56 ExtInst 1(GLSL.std.450) 26(Pow) 1368 1369
+                              Store 1367(r032) 1370
+            1372:          56 Load 59(inF0)
+            1373:          56 ExtInst 1(GLSL.std.450) 11(Radians) 1372
+                              Store 1371(r033) 1373
+            1375:          56 Load 59(inF0)
+            1376:          56 ExtInst 1(GLSL.std.450) 2(RoundEven) 1375
+                              Store 1374(r034) 1376
+            1378:          56 Load 59(inF0)
+            1379:          56 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1378
+                              Store 1377(r035) 1379
+            1381:          56 Load 59(inF0)
+            1382:   36(fvec3) CompositeConstruct 165 165 165
+            1383:   36(fvec3) CompositeConstruct 274 274 274
+            1384:          56 ExtInst 1(GLSL.std.450) 43(FClamp) 1381 1382 1383
+                              Store 1380(r036) 1384
+            1386:          56 Load 59(inF0)
+            1387:          56 ExtInst 1(GLSL.std.450) 6(FSign) 1386
+                              Store 1385(r037) 1387
+            1389:          56 Load 59(inF0)
+            1390:          56 ExtInst 1(GLSL.std.450) 13(Sin) 1389
+                              Store 1388(r038) 1390
+            1391:          56 Load 59(inF0)
+            1392:          56 ExtInst 1(GLSL.std.450) 13(Sin) 1391
+                              Store 60(inF1) 1392
+            1393:          56 Load 59(inF0)
+            1394:          56 ExtInst 1(GLSL.std.450) 14(Cos) 1393
+                              Store 61(inF2) 1394
+            1396:          56 Load 59(inF0)
+            1397:          56 ExtInst 1(GLSL.std.450) 19(Sinh) 1396
+                              Store 1395(r039) 1397
+            1399:          56 Load 59(inF0)
+            1400:          56 Load 60(inF1)
+            1401:          56 Load 61(inF2)
+            1402:          56 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1399 1400 1401
+                              Store 1398(r049) 1402
+            1404:          56 Load 59(inF0)
+            1405:          56 ExtInst 1(GLSL.std.450) 31(Sqrt) 1404
+                              Store 1403(r041) 1405
+            1407:          56 Load 59(inF0)
+            1408:          56 Load 60(inF1)
+            1409:          56 ExtInst 1(GLSL.std.450) 48(Step) 1407 1408
+                              Store 1406(r042) 1409
+            1411:          56 Load 59(inF0)
+            1412:          56 ExtInst 1(GLSL.std.450) 15(Tan) 1411
+                              Store 1410(r043) 1412
+            1414:          56 Load 59(inF0)
+            1415:          56 ExtInst 1(GLSL.std.450) 21(Tanh) 1414
+                              Store 1413(r044) 1415
+            1416:          56 Load 59(inF0)
+            1417:          56 Transpose 1416
+            1419:          56 Load 59(inF0)
+            1420:          56 ExtInst 1(GLSL.std.450) 3(Trunc) 1419
+                              Store 1418(r046) 1420
+                              ReturnValue 1422
+                              FunctionEnd
+71(PixelShaderFunction4x4(mf44;mf44;mf44;):          65 Function None 67
+        68(inF0):     66(ptr) FunctionParameter
+        69(inF1):     66(ptr) FunctionParameter
+        70(inF2):     66(ptr) FunctionParameter
+              72:             Label
+      1425(r000):    122(ptr) Variable Function
+      1428(r001):     66(ptr) Variable Function
+      1433(r003):    122(ptr) Variable Function
+      1436(r004):     66(ptr) Variable Function
+      1439(r005):     66(ptr) Variable Function
+      1442(r006):     66(ptr) Variable Function
+      1446(r007):     66(ptr) Variable Function
+      1457(r008):     66(ptr) Variable Function
+      1462(r009):     66(ptr) Variable Function
+      1465(r010):     66(ptr) Variable Function
+      1468(r011):     66(ptr) Variable Function
+      1471(r012):     66(ptr) Variable Function
+      1474(r013):     66(ptr) Variable Function
+      1477(r014):     66(ptr) Variable Function
+      1480(r015):     66(ptr) Variable Function
+      1483(r016):     66(ptr) Variable Function
+      1486(r017):     66(ptr) Variable Function
+      1489(r018):      7(ptr) Variable Function
+      1492(r019):     66(ptr) Variable Function
+      1495(R020):     66(ptr) Variable Function
+      1498(r021):     66(ptr) Variable Function
+      1501(r022):     66(ptr) Variable Function
+      1517(r023):     66(ptr) Variable Function
+      1520(r024):     66(ptr) Variable Function
+      1526(r025):     66(ptr) Variable Function
+      1529(r026):     66(ptr) Variable Function
+     1533(r026a):     66(ptr) Variable Function
+      1538(r027):     66(ptr) Variable Function
+      1541(r028):     66(ptr) Variable Function
+      1545(r029):     66(ptr) Variable Function
+      1548(r030):     66(ptr) Variable Function
+      1552(r031):     66(ptr) Variable Function
+      1556(r032):     66(ptr) Variable Function
+      1560(r033):     66(ptr) Variable Function
+      1563(r034):     66(ptr) Variable Function
+      1566(r035):     66(ptr) Variable Function
+      1569(r036):     66(ptr) Variable Function
+      1574(r037):     66(ptr) Variable Function
+      1577(r038):     66(ptr) Variable Function
+      1584(r039):     66(ptr) Variable Function
+      1587(r049):     66(ptr) Variable Function
+      1592(r041):     66(ptr) Variable Function
+      1595(r042):     66(ptr) Variable Function
+      1599(r043):     66(ptr) Variable Function
+      1602(r044):     66(ptr) Variable Function
+      1607(r046):     66(ptr) Variable Function
+            1426:          65 Load 68(inF0)
+            1427:   121(bool) All 1426
+                              Store 1425(r000) 1427
+            1429:          65 Load 68(inF0)
+            1430:          65 ExtInst 1(GLSL.std.450) 4(FAbs) 1429
+                              Store 1428(r001) 1430
+            1431:          65 Load 68(inF0)
+            1432:          65 ExtInst 1(GLSL.std.450) 17(Acos) 1431
+            1434:          65 Load 68(inF0)
+            1435:   121(bool) Any 1434
+                              Store 1433(r003) 1435
+            1437:          65 Load 68(inF0)
+            1438:          65 ExtInst 1(GLSL.std.450) 16(Asin) 1437
+                              Store 1436(r004) 1438
+            1440:          65 Load 68(inF0)
+            1441:          65 ExtInst 1(GLSL.std.450) 18(Atan) 1440
+                              Store 1439(r005) 1441
+            1443:          65 Load 68(inF0)
+            1444:          65 Load 69(inF1)
+            1445:          65 ExtInst 1(GLSL.std.450) 25(Atan2) 1443 1444
+                              Store 1442(r006) 1445
+            1447:          65 Load 68(inF0)
+            1448:          65 ExtInst 1(GLSL.std.450) 9(Ceil) 1447
+                              Store 1446(r007) 1448
+            1449:          65 Load 68(inF0)
+            1452:        1451 FOrdLessThan 1449 1450
+            1453:   121(bool) Any 1452
+                              SelectionMerge 1455 None
+                              BranchConditional 1453 1454 1455
+            1454:               Label
+                                Kill
+            1455:             Label
+            1458:          65 Load 68(inF0)
+            1459:          65 Load 69(inF1)
+            1460:          65 Load 70(inF2)
+            1461:          65 ExtInst 1(GLSL.std.450) 43(FClamp) 1458 1459 1460
+                              Store 1457(r008) 1461
+            1463:          65 Load 68(inF0)
+            1464:          65 ExtInst 1(GLSL.std.450) 14(Cos) 1463
+                              Store 1462(r009) 1464
+            1466:          65 Load 68(inF0)
+            1467:          65 ExtInst 1(GLSL.std.450) 20(Cosh) 1466
+                              Store 1465(r010) 1467
+            1469:          65 Load 68(inF0)
+            1470:          65 DPdx 1469
+                              Store 1468(r011) 1470
+            1472:          65 Load 68(inF0)
+            1473:          65 DPdxCoarse 1472
+                              Store 1471(r012) 1473
+            1475:          65 Load 68(inF0)
+            1476:          65 DPdxFine 1475
+                              Store 1474(r013) 1476
+            1478:          65 Load 68(inF0)
+            1479:          65 DPdy 1478
+                              Store 1477(r014) 1479
+            1481:          65 Load 68(inF0)
+            1482:          65 DPdyCoarse 1481
+                              Store 1480(r015) 1482
+            1484:          65 Load 68(inF0)
+            1485:          65 DPdyFine 1484
+                              Store 1483(r016) 1485
+            1487:          65 Load 68(inF0)
+            1488:          65 ExtInst 1(GLSL.std.450) 12(Degrees) 1487
+                              Store 1486(r017) 1488
+            1490:          65 Load 68(inF0)
+            1491:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 1490
+                              Store 1489(r018) 1491
+            1493:          65 Load 68(inF0)
+            1494:          65 ExtInst 1(GLSL.std.450) 27(Exp) 1493
+                              Store 1492(r019) 1494
+            1496:          65 Load 68(inF0)
+            1497:          65 ExtInst 1(GLSL.std.450) 29(Exp2) 1496
+                              Store 1495(R020) 1497
+            1499:          65 Load 68(inF0)
+            1500:          65 ExtInst 1(GLSL.std.450) 8(Floor) 1499
+                              Store 1498(r021) 1500
+            1502:          65 Load 68(inF0)
+            1503:          65 Load 69(inF1)
+            1504:   64(fvec4) CompositeExtract 1502 0
+            1505:   64(fvec4) CompositeExtract 1503 0
+            1506:   64(fvec4) FMod 1504 1505
+            1507:   64(fvec4) CompositeExtract 1502 1
+            1508:   64(fvec4) CompositeExtract 1503 1
+            1509:   64(fvec4) FMod 1507 1508
+            1510:   64(fvec4) CompositeExtract 1502 2
+            1511:   64(fvec4) CompositeExtract 1503 2
+            1512:   64(fvec4) FMod 1510 1511
+            1513:   64(fvec4) CompositeExtract 1502 3
+            1514:   64(fvec4) CompositeExtract 1503 3
+            1515:   64(fvec4) FMod 1513 1514
+            1516:          65 CompositeConstruct 1506 1509 1512 1515
+                              Store 1501(r022) 1516
+            1518:          65 Load 68(inF0)
+            1519:          65 ExtInst 1(GLSL.std.450) 10(Fract) 1518
+                              Store 1517(r023) 1519
+            1521:          65 Load 68(inF0)
+            1523:1522(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 1521
+            1524:  819(ivec4) CompositeExtract 1523 1
+                              Store 69(inF1) 1524
+            1525:          65 CompositeExtract 1523 0
+                              Store 1520(r024) 1525
+            1527:          65 Load 68(inF0)
+            1528:          65 Fwidth 1527
+                              Store 1526(r025) 1528
+            1530:          65 Load 68(inF0)
+            1531:          65 Load 69(inF1)
+            1532:          65 ExtInst 1(GLSL.std.450) 53(Ldexp) 1530 1531
+                              Store 1529(r026) 1532
+            1534:          65 Load 68(inF0)
+            1535:          65 Load 69(inF1)
+            1536:          65 Load 70(inF2)
+            1537:          65 ExtInst 1(GLSL.std.450) 46(FMix) 1534 1535 1536
+                              Store 1533(r026a) 1537
+            1539:          65 Load 68(inF0)
+            1540:          65 ExtInst 1(GLSL.std.450) 28(Log) 1539
+                              Store 1538(r027) 1540
+            1542:          65 Load 68(inF0)
+            1543:          65 ExtInst 1(GLSL.std.450) 30(Log2) 1542
+            1544:          65 MatrixTimesScalar 1543 253
+                              Store 1541(r028) 1544
+            1546:          65 Load 68(inF0)
+            1547:          65 ExtInst 1(GLSL.std.450) 30(Log2) 1546
+                              Store 1545(r029) 1547
+            1549:          65 Load 68(inF0)
+            1550:          65 Load 69(inF1)
+            1551:          65 ExtInst 1(GLSL.std.450) 40(FMax) 1549 1550
+                              Store 1548(r030) 1551
+            1553:          65 Load 68(inF0)
+            1554:          65 Load 69(inF1)
+            1555:          65 ExtInst 1(GLSL.std.450) 37(FMin) 1553 1554
+                              Store 1552(r031) 1555
+            1557:          65 Load 68(inF0)
+            1558:          65 Load 69(inF1)
+            1559:          65 ExtInst 1(GLSL.std.450) 26(Pow) 1557 1558
+                              Store 1556(r032) 1559
+            1561:          65 Load 68(inF0)
+            1562:          65 ExtInst 1(GLSL.std.450) 11(Radians) 1561
+                              Store 1560(r033) 1562
+            1564:          65 Load 68(inF0)
+            1565:          65 ExtInst 1(GLSL.std.450) 2(RoundEven) 1564
+                              Store 1563(r034) 1565
+            1567:          65 Load 68(inF0)
+            1568:          65 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1567
+                              Store 1566(r035) 1568
+            1570:          65 Load 68(inF0)
+            1571:   64(fvec4) CompositeConstruct 165 165 165 165
+            1572:   64(fvec4) CompositeConstruct 274 274 274 274
+            1573:          65 ExtInst 1(GLSL.std.450) 43(FClamp) 1570 1571 1572
+                              Store 1569(r036) 1573
+            1575:          65 Load 68(inF0)
+            1576:          65 ExtInst 1(GLSL.std.450) 6(FSign) 1575
+                              Store 1574(r037) 1576
+            1578:          65 Load 68(inF0)
+            1579:          65 ExtInst 1(GLSL.std.450) 13(Sin) 1578
+                              Store 1577(r038) 1579
+            1580:          65 Load 68(inF0)
+            1581:          65 ExtInst 1(GLSL.std.450) 13(Sin) 1580
+                              Store 69(inF1) 1581
+            1582:          65 Load 68(inF0)
+            1583:          65 ExtInst 1(GLSL.std.450) 14(Cos) 1582
+                              Store 70(inF2) 1583
+            1585:          65 Load 68(inF0)
+            1586:          65 ExtInst 1(GLSL.std.450) 19(Sinh) 1585
+                              Store 1584(r039) 1586
+            1588:          65 Load 68(inF0)
+            1589:          65 Load 69(inF1)
+            1590:          65 Load 70(inF2)
+            1591:          65 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1588 1589 1590
+                              Store 1587(r049) 1591
+            1593:          65 Load 68(inF0)
+            1594:          65 ExtInst 1(GLSL.std.450) 31(Sqrt) 1593
+                              Store 1592(r041) 1594
+            1596:          65 Load 68(inF0)
+            1597:          65 Load 69(inF1)
+            1598:          65 ExtInst 1(GLSL.std.450) 48(Step) 1596 1597
+                              Store 1595(r042) 1598
+            1600:          65 Load 68(inF0)
+            1601:          65 ExtInst 1(GLSL.std.450) 15(Tan) 1600
+                              Store 1599(r043) 1601
+            1603:          65 Load 68(inF0)
+            1604:          65 ExtInst 1(GLSL.std.450) 21(Tanh) 1603
+                              Store 1602(r044) 1604
+            1605:          65 Load 68(inF0)
+            1606:          65 Transpose 1605
+            1608:          65 Load 68(inF0)
+            1609:          65 ExtInst 1(GLSL.std.450) 3(Trunc) 1608
+                              Store 1607(r046) 1609
+                              ReturnValue 1611
+                              FunctionEnd
+80(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 73
+        74(inF0):      7(ptr) FunctionParameter
+        75(inF1):      7(ptr) FunctionParameter
+       76(inFV0):     25(ptr) FunctionParameter
+       77(inFV1):     25(ptr) FunctionParameter
+       78(inFM0):     49(ptr) FunctionParameter
+       79(inFM1):     49(ptr) FunctionParameter
+              81:             Label
+        1614(r0):      7(ptr) Variable Function
+        1618(r1):     25(ptr) Variable Function
+        1622(r2):     25(ptr) Variable Function
+        1626(r3):      7(ptr) Variable Function
+        1630(r4):     25(ptr) Variable Function
+        1634(r5):     25(ptr) Variable Function
+        1638(r6):     49(ptr) Variable Function
+        1642(r7):     49(ptr) Variable Function
+        1646(r8):     49(ptr) Variable Function
+            1615:    6(float) Load 74(inF0)
+            1616:    6(float) Load 75(inF1)
+            1617:    6(float) FMul 1615 1616
+                              Store 1614(r0) 1617
+            1619:   24(fvec2) Load 76(inFV0)
+            1620:    6(float) Load 74(inF0)
+            1621:   24(fvec2) VectorTimesScalar 1619 1620
+                              Store 1618(r1) 1621
+            1623:    6(float) Load 74(inF0)
+            1624:   24(fvec2) Load 76(inFV0)
+            1625:   24(fvec2) VectorTimesScalar 1624 1623
+                              Store 1622(r2) 1625
+            1627:   24(fvec2) Load 76(inFV0)
+            1628:   24(fvec2) Load 77(inFV1)
+            1629:    6(float) Dot 1627 1628
+                              Store 1626(r3) 1629
+            1631:          48 Load 78(inFM0)
+            1632:   24(fvec2) Load 76(inFV0)
+            1633:   24(fvec2) MatrixTimesVector 1631 1632
+                              Store 1630(r4) 1633
+            1635:   24(fvec2) Load 76(inFV0)
+            1636:          48 Load 78(inFM0)
+            1637:   24(fvec2) VectorTimesMatrix 1635 1636
+                              Store 1634(r5) 1637
+            1639:          48 Load 78(inFM0)
+            1640:    6(float) Load 74(inF0)
+            1641:          48 MatrixTimesScalar 1639 1640
+                              Store 1638(r6) 1641
+            1643:    6(float) Load 74(inF0)
+            1644:          48 Load 78(inFM0)
+            1645:          48 MatrixTimesScalar 1644 1643
+                              Store 1642(r7) 1645
+            1647:          48 Load 78(inFM0)
+            1648:          48 Load 79(inFM1)
+            1649:          48 MatrixTimesMatrix 1647 1648
+                              Store 1646(r8) 1649
+                              Return
                               FunctionEnd
-19(TestGenMul(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 12
-        13(inF0):      7(ptr) FunctionParameter
-        14(inF1):      7(ptr) FunctionParameter
-       15(inFV0):      9(ptr) FunctionParameter
-       16(inFV1):      9(ptr) FunctionParameter
-       17(inFM0):     11(ptr) FunctionParameter
-       18(inFM1):     11(ptr) FunctionParameter
-              20:             Label
-        1141(r0):      7(ptr) Variable Function
-        1145(r1):      9(ptr) Variable Function
-        1149(r2):      9(ptr) Variable Function
-        1153(r3):      7(ptr) Variable Function
-        1157(r4):      9(ptr) Variable Function
-        1161(r5):      9(ptr) Variable Function
-        1165(r6):     11(ptr) Variable Function
-        1169(r7):     11(ptr) Variable Function
-        1173(r8):     11(ptr) Variable Function
-            1142:    6(float) Load 13(inF0)
-            1143:    6(float) Load 14(inF1)
-            1144:    6(float) FMul 1142 1143
-                              Store 1141(r0) 1144
-            1146:    8(fvec2) Load 15(inFV0)
-            1147:    6(float) Load 13(inF0)
-            1148:    8(fvec2) VectorTimesScalar 1146 1147
-                              Store 1145(r1) 1148
-            1150:    6(float) Load 13(inF0)
-            1151:    8(fvec2) Load 15(inFV0)
-            1152:    8(fvec2) VectorTimesScalar 1151 1150
-                              Store 1149(r2) 1152
-            1154:    8(fvec2) Load 15(inFV0)
-            1155:    8(fvec2) Load 16(inFV1)
-            1156:    6(float) Dot 1154 1155
-                              Store 1153(r3) 1156
-            1158:          10 Load 17(inFM0)
-            1159:    8(fvec2) Load 15(inFV0)
-            1160:    8(fvec2) MatrixTimesVector 1158 1159
-                              Store 1157(r4) 1160
-            1162:    8(fvec2) Load 15(inFV0)
-            1163:          10 Load 17(inFM0)
-            1164:    8(fvec2) VectorTimesMatrix 1162 1163
-                              Store 1161(r5) 1164
-            1166:          10 Load 17(inFM0)
-            1167:    6(float) Load 13(inF0)
-            1168:          10 MatrixTimesScalar 1166 1167
-                              Store 1165(r6) 1168
-            1170:    6(float) Load 13(inF0)
-            1171:          10 Load 17(inFM0)
-            1172:          10 MatrixTimesScalar 1171 1170
-                              Store 1169(r7) 1172
-            1174:          10 Load 17(inFM0)
-            1175:          10 Load 18(inFM1)
-            1176:          10 MatrixTimesMatrix 1174 1175
-                              Store 1173(r8) 1176
+89(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 82
+        83(inF0):      7(ptr) FunctionParameter
+        84(inF1):      7(ptr) FunctionParameter
+       85(inFV0):     37(ptr) FunctionParameter
+       86(inFV1):     37(ptr) FunctionParameter
+       87(inFM0):     57(ptr) FunctionParameter
+       88(inFM1):     57(ptr) FunctionParameter
+              90:             Label
+        1650(r0):      7(ptr) Variable Function
+        1654(r1):     37(ptr) Variable Function
+        1658(r2):     37(ptr) Variable Function
+        1662(r3):      7(ptr) Variable Function
+        1666(r4):     37(ptr) Variable Function
+        1670(r5):     37(ptr) Variable Function
+        1674(r6):     57(ptr) Variable Function
+        1678(r7):     57(ptr) Variable Function
+        1682(r8):     57(ptr) Variable Function
+            1651:    6(float) Load 83(inF0)
+            1652:    6(float) Load 84(inF1)
+            1653:    6(float) FMul 1651 1652
+                              Store 1650(r0) 1653
+            1655:   36(fvec3) Load 85(inFV0)
+            1656:    6(float) Load 83(inF0)
+            1657:   36(fvec3) VectorTimesScalar 1655 1656
+                              Store 1654(r1) 1657
+            1659:    6(float) Load 83(inF0)
+            1660:   36(fvec3) Load 85(inFV0)
+            1661:   36(fvec3) VectorTimesScalar 1660 1659
+                              Store 1658(r2) 1661
+            1663:   36(fvec3) Load 85(inFV0)
+            1664:   36(fvec3) Load 86(inFV1)
+            1665:    6(float) Dot 1663 1664
+                              Store 1662(r3) 1665
+            1667:          56 Load 87(inFM0)
+            1668:   36(fvec3) Load 85(inFV0)
+            1669:   36(fvec3) MatrixTimesVector 1667 1668
+                              Store 1666(r4) 1669
+            1671:   36(fvec3) Load 85(inFV0)
+            1672:          56 Load 87(inFM0)
+            1673:   36(fvec3) VectorTimesMatrix 1671 1672
+                              Store 1670(r5) 1673
+            1675:          56 Load 87(inFM0)
+            1676:    6(float) Load 83(inF0)
+            1677:          56 MatrixTimesScalar 1675 1676
+                              Store 1674(r6) 1677
+            1679:    6(float) Load 83(inF0)
+            1680:          56 Load 87(inFM0)
+            1681:          56 MatrixTimesScalar 1680 1679
+                              Store 1678(r7) 1681
+            1683:          56 Load 87(inFM0)
+            1684:          56 Load 88(inFM1)
+            1685:          56 MatrixTimesMatrix 1683 1684
+                              Store 1682(r8) 1685
                               Return
                               FunctionEnd
-32(TestGenMul(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 25
-        26(inF0):      7(ptr) FunctionParameter
-        27(inF1):      7(ptr) FunctionParameter
-       28(inFV0):     22(ptr) FunctionParameter
-       29(inFV1):     22(ptr) FunctionParameter
-       30(inFM0):     24(ptr) FunctionParameter
-       31(inFM1):     24(ptr) FunctionParameter
-              33:             Label
-        1177(r0):      7(ptr) Variable Function
-        1181(r1):     22(ptr) Variable Function
-        1185(r2):     22(ptr) Variable Function
-        1189(r3):      7(ptr) Variable Function
-        1193(r4):     22(ptr) Variable Function
-        1197(r5):     22(ptr) Variable Function
-        1201(r6):     24(ptr) Variable Function
-        1205(r7):     24(ptr) Variable Function
-        1209(r8):     24(ptr) Variable Function
-            1178:    6(float) Load 26(inF0)
-            1179:    6(float) Load 27(inF1)
-            1180:    6(float) FMul 1178 1179
-                              Store 1177(r0) 1180
-            1182:   21(fvec3) Load 28(inFV0)
-            1183:    6(float) Load 26(inF0)
-            1184:   21(fvec3) VectorTimesScalar 1182 1183
-                              Store 1181(r1) 1184
-            1186:    6(float) Load 26(inF0)
-            1187:   21(fvec3) Load 28(inFV0)
-            1188:   21(fvec3) VectorTimesScalar 1187 1186
-                              Store 1185(r2) 1188
-            1190:   21(fvec3) Load 28(inFV0)
-            1191:   21(fvec3) Load 29(inFV1)
-            1192:    6(float) Dot 1190 1191
-                              Store 1189(r3) 1192
-            1194:          23 Load 30(inFM0)
-            1195:   21(fvec3) Load 28(inFV0)
-            1196:   21(fvec3) MatrixTimesVector 1194 1195
-                              Store 1193(r4) 1196
-            1198:   21(fvec3) Load 28(inFV0)
-            1199:          23 Load 30(inFM0)
-            1200:   21(fvec3) VectorTimesMatrix 1198 1199
-                              Store 1197(r5) 1200
-            1202:          23 Load 30(inFM0)
-            1203:    6(float) Load 26(inF0)
-            1204:          23 MatrixTimesScalar 1202 1203
-                              Store 1201(r6) 1204
-            1206:    6(float) Load 26(inF0)
-            1207:          23 Load 30(inFM0)
-            1208:          23 MatrixTimesScalar 1207 1206
-                              Store 1205(r7) 1208
-            1210:          23 Load 30(inFM0)
-            1211:          23 Load 31(inFM1)
-            1212:          23 MatrixTimesMatrix 1210 1211
-                              Store 1209(r8) 1212
+99(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 92
+        93(inF0):      7(ptr) FunctionParameter
+        94(inF1):      7(ptr) FunctionParameter
+       95(inFV0):     91(ptr) FunctionParameter
+       96(inFV1):     91(ptr) FunctionParameter
+       97(inFM0):     66(ptr) FunctionParameter
+       98(inFM1):     66(ptr) FunctionParameter
+             100:             Label
+        1686(r0):      7(ptr) Variable Function
+        1690(r1):     91(ptr) Variable Function
+        1694(r2):     91(ptr) Variable Function
+        1698(r3):      7(ptr) Variable Function
+        1702(r4):     91(ptr) Variable Function
+        1706(r5):     91(ptr) Variable Function
+        1710(r6):     66(ptr) Variable Function
+        1714(r7):     66(ptr) Variable Function
+        1718(r8):     66(ptr) Variable Function
+            1687:    6(float) Load 93(inF0)
+            1688:    6(float) Load 94(inF1)
+            1689:    6(float) FMul 1687 1688
+                              Store 1686(r0) 1689
+            1691:   64(fvec4) Load 95(inFV0)
+            1692:    6(float) Load 93(inF0)
+            1693:   64(fvec4) VectorTimesScalar 1691 1692
+                              Store 1690(r1) 1693
+            1695:    6(float) Load 93(inF0)
+            1696:   64(fvec4) Load 95(inFV0)
+            1697:   64(fvec4) VectorTimesScalar 1696 1695
+                              Store 1694(r2) 1697
+            1699:   64(fvec4) Load 95(inFV0)
+            1700:   64(fvec4) Load 96(inFV1)
+            1701:    6(float) Dot 1699 1700
+                              Store 1698(r3) 1701
+            1703:          65 Load 97(inFM0)
+            1704:   64(fvec4) Load 95(inFV0)
+            1705:   64(fvec4) MatrixTimesVector 1703 1704
+                              Store 1702(r4) 1705
+            1707:   64(fvec4) Load 95(inFV0)
+            1708:          65 Load 97(inFM0)
+            1709:   64(fvec4) VectorTimesMatrix 1707 1708
+                              Store 1706(r5) 1709
+            1711:          65 Load 97(inFM0)
+            1712:    6(float) Load 93(inF0)
+            1713:          65 MatrixTimesScalar 1711 1712
+                              Store 1710(r6) 1713
+            1715:    6(float) Load 93(inF0)
+            1716:          65 Load 97(inFM0)
+            1717:          65 MatrixTimesScalar 1716 1715
+                              Store 1714(r7) 1717
+            1719:          65 Load 97(inFM0)
+            1720:          65 Load 98(inFM1)
+            1721:          65 MatrixTimesMatrix 1719 1720
+                              Store 1718(r8) 1721
                               Return
                               FunctionEnd
-45(TestGenMul(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 38
-        39(inF0):      7(ptr) FunctionParameter
-        40(inF1):      7(ptr) FunctionParameter
-       41(inFV0):     35(ptr) FunctionParameter
-       42(inFV1):     35(ptr) FunctionParameter
-       43(inFM0):     37(ptr) FunctionParameter
-       44(inFM1):     37(ptr) FunctionParameter
-              46:             Label
-        1213(r0):      7(ptr) Variable Function
-        1217(r1):     35(ptr) Variable Function
-        1221(r2):     35(ptr) Variable Function
-        1225(r3):      7(ptr) Variable Function
-        1229(r4):     35(ptr) Variable Function
-        1233(r5):     35(ptr) Variable Function
-        1237(r6):     37(ptr) Variable Function
-        1241(r7):     37(ptr) Variable Function
-        1245(r8):     37(ptr) Variable Function
-     1250(gs_ua):   1249(ptr) Variable Function
-     1251(gs_ub):   1249(ptr) Variable Function
-     1252(gs_uc):   1249(ptr) Variable Function
-    1254(gs_ua2):   1253(ptr) Variable Function
-    1255(gs_ub2):   1253(ptr) Variable Function
-    1256(gs_uc2):   1253(ptr) Variable Function
-    1258(gs_ua3):   1257(ptr) Variable Function
-    1259(gs_ub3):   1257(ptr) Variable Function
-    1260(gs_uc3):   1257(ptr) Variable Function
-    1262(gs_ua4):   1261(ptr) Variable Function
-    1263(gs_ub4):   1261(ptr) Variable Function
-    1264(gs_uc4):   1261(ptr) Variable Function
-            1214:    6(float) Load 39(inF0)
-            1215:    6(float) Load 40(inF1)
-            1216:    6(float) FMul 1214 1215
-                              Store 1213(r0) 1216
-            1218:   34(fvec4) Load 41(inFV0)
-            1219:    6(float) Load 39(inF0)
-            1220:   34(fvec4) VectorTimesScalar 1218 1219
-                              Store 1217(r1) 1220
-            1222:    6(float) Load 39(inF0)
-            1223:   34(fvec4) Load 41(inFV0)
-            1224:   34(fvec4) VectorTimesScalar 1223 1222
-                              Store 1221(r2) 1224
-            1226:   34(fvec4) Load 41(inFV0)
-            1227:   34(fvec4) Load 42(inFV1)
-            1228:    6(float) Dot 1226 1227
-                              Store 1225(r3) 1228
-            1230:          36 Load 43(inFM0)
-            1231:   34(fvec4) Load 41(inFV0)
-            1232:   34(fvec4) MatrixTimesVector 1230 1231
-                              Store 1229(r4) 1232
-            1234:   34(fvec4) Load 41(inFV0)
-            1235:          36 Load 43(inFM0)
-            1236:   34(fvec4) VectorTimesMatrix 1234 1235
-                              Store 1233(r5) 1236
-            1238:          36 Load 43(inFM0)
-            1239:    6(float) Load 39(inF0)
-            1240:          36 MatrixTimesScalar 1238 1239
-                              Store 1237(r6) 1240
-            1242:    6(float) Load 39(inF0)
-            1243:          36 Load 43(inFM0)
-            1244:          36 MatrixTimesScalar 1243 1242
-                              Store 1241(r7) 1244
-            1246:          36 Load 43(inFM0)
-            1247:          36 Load 44(inFM1)
-            1248:          36 MatrixTimesMatrix 1246 1247
-                              Store 1245(r8) 1248
+119(TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42;):           2 Function None 109
+       110(inF0):      7(ptr) FunctionParameter
+       111(inF1):      7(ptr) FunctionParameter
+      112(inFV2):     25(ptr) FunctionParameter
+      113(inFV3):     37(ptr) FunctionParameter
+    114(inFM2x3):    102(ptr) FunctionParameter
+    115(inFM3x2):    104(ptr) FunctionParameter
+    116(inFM3x3):     57(ptr) FunctionParameter
+    117(inFM3x4):    106(ptr) FunctionParameter
+    118(inFM2x4):    108(ptr) FunctionParameter
+             120:             Label
+       1722(r00):      7(ptr) Variable Function
+       1726(r01):     25(ptr) Variable Function
+       1730(r02):     37(ptr) Variable Function
+       1734(r03):     25(ptr) Variable Function
+       1738(r04):     37(ptr) Variable Function
+       1742(r05):      7(ptr) Variable Function
+       1746(r06):      7(ptr) Variable Function
+       1750(r07):     37(ptr) Variable Function
+       1754(r08):     25(ptr) Variable Function
+       1758(r09):     25(ptr) Variable Function
+       1762(r10):     37(ptr) Variable Function
+       1766(r11):    102(ptr) Variable Function
+       1770(r12):    104(ptr) Variable Function
+       1774(r13):     49(ptr) Variable Function
+       1778(r14):    102(ptr) Variable Function
+       1782(r15):    108(ptr) Variable Function
+       1786(r16):    106(ptr) Variable Function
+            1723:    6(float) Load 110(inF0)
+            1724:    6(float) Load 111(inF1)
+            1725:    6(float) FMul 1723 1724
+                              Store 1722(r00) 1725
+            1727:   24(fvec2) Load 112(inFV2)
+            1728:    6(float) Load 110(inF0)
+            1729:   24(fvec2) VectorTimesScalar 1727 1728
+                              Store 1726(r01) 1729
+            1731:   36(fvec3) Load 113(inFV3)
+            1732:    6(float) Load 110(inF0)
+            1733:   36(fvec3) VectorTimesScalar 1731 1732
+                              Store 1730(r02) 1733
+            1735:    6(float) Load 110(inF0)
+            1736:   24(fvec2) Load 112(inFV2)
+            1737:   24(fvec2) VectorTimesScalar 1736 1735
+                              Store 1734(r03) 1737
+            1739:    6(float) Load 110(inF0)
+            1740:   36(fvec3) Load 113(inFV3)
+            1741:   36(fvec3) VectorTimesScalar 1740 1739
+                              Store 1738(r04) 1741
+            1743:   24(fvec2) Load 112(inFV2)
+            1744:   24(fvec2) Load 112(inFV2)
+            1745:    6(float) Dot 1743 1744
+                              Store 1742(r05) 1745
+            1747:   36(fvec3) Load 113(inFV3)
+            1748:   36(fvec3) Load 113(inFV3)
+            1749:    6(float) Dot 1747 1748
+                              Store 1746(r06) 1749
+            1751:   24(fvec2) Load 112(inFV2)
+            1752:         101 Load 114(inFM2x3)
+            1753:   36(fvec3) VectorTimesMatrix 1751 1752
+                              Store 1750(r07) 1753
+            1755:   36(fvec3) Load 113(inFV3)
+            1756:         103 Load 115(inFM3x2)
+            1757:   24(fvec2) VectorTimesMatrix 1755 1756
+                              Store 1754(r08) 1757
+            1759:         101 Load 114(inFM2x3)
+            1760:   36(fvec3) Load 113(inFV3)
+            1761:   24(fvec2) MatrixTimesVector 1759 1760
+                              Store 1758(r09) 1761
+            1763:         103 Load 115(inFM3x2)
+            1764:   24(fvec2) Load 112(inFV2)
+            1765:   36(fvec3) MatrixTimesVector 1763 1764
+                              Store 1762(r10) 1765
+            1767:         101 Load 114(inFM2x3)
+            1768:    6(float) Load 110(inF0)
+            1769:         101 MatrixTimesScalar 1767 1768
+                              Store 1766(r11) 1769
+            1771:         103 Load 115(inFM3x2)
+            1772:    6(float) Load 110(inF0)
+            1773:         103 MatrixTimesScalar 1771 1772
+                              Store 1770(r12) 1773
+            1775:         101 Load 114(inFM2x3)
+            1776:         103 Load 115(inFM3x2)
+            1777:          48 MatrixTimesMatrix 1775 1776
+                              Store 1774(r13) 1777
+            1779:         101 Load 114(inFM2x3)
+            1780:          56 Load 116(inFM3x3)
+            1781:         101 MatrixTimesMatrix 1779 1780
+                              Store 1778(r14) 1781
+            1783:         101 Load 114(inFM2x3)
+            1784:         105 Load 117(inFM3x4)
+            1785:         107 MatrixTimesMatrix 1783 1784
+                              Store 1782(r15) 1785
+            1787:         103 Load 115(inFM3x2)
+            1788:         107 Load 118(inFM2x4)
+            1789:         105 MatrixTimesMatrix 1787 1788
+                              Store 1786(r16) 1789
                               Return
                               FunctionEnd
index 3a6becf..fe6f93c 100644 (file)
@@ -2,38 +2,39 @@ hlsl.intrinsics.lit.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(f1;f1;f1; (temp void)
+0:5  Function Definition: PixelShaderFunction(f1;f1;f1; (global void)
 0:2    Function Parameters: 
 0:2      'n_dot_l' (in float)
 0:2      'n_dot_h' (in float)
 0:2      'm' (in float)
 0:?     Sequence
-0:3      move second child to first child (temp 4-component vector of float)
-0:3        'r0' (temp 4-component vector of float)
-0:3        Construct vec4 (temp 4-component vector of float)
-0:3          Constant:
-0:3            1.000000
-0:3          max (temp float)
-0:3            'n_dot_l' (in float)
+0:3      Sequence
+0:3        move second child to first child (temp 4-component vector of float)
+0:3          'r0' (temp 4-component vector of float)
+0:3          Construct vec4 (temp 4-component vector of float)
 0:3            Constant:
-0:3              0.000000
-0:3          Test condition and select (temp float)
-0:3            Condition
-0:3            Compare Less Than (temp bool)
-0:3              min (temp float)
-0:3                'n_dot_l' (in float)
-0:3                'n_dot_h' (in float)
+0:3              1.000000
+0:3            max (temp float)
+0:3              'n_dot_l' (in float)
+0:3              Constant:
+0:3                0.000000
+0:3            Test condition and select (temp float)
+0:3              Condition
+0:3              Compare Less Than (temp bool)
+0:3                min (temp float)
+0:3                  'n_dot_l' (in float)
+0:3                  'n_dot_h' (in float)
+0:3                Constant:
+0:3                  0.000000
+0:3              true case
 0:3              Constant:
 0:3                0.000000
-0:3            true case
+0:3              false case
+0:3              component-wise multiply (temp float)
+0:3                'n_dot_h' (in float)
+0:3                'm' (in float)
 0:3            Constant:
-0:3              0.000000
-0:3            false case
-0:3            component-wise multiply (temp float)
-0:3              'n_dot_h' (in float)
-0:3              'm' (in float)
-0:3          Constant:
-0:3            1.000000
+0:3              1.000000
 0:?   Linker Objects
 
 
@@ -43,38 +44,39 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(f1;f1;f1; (temp void)
+0:5  Function Definition: PixelShaderFunction(f1;f1;f1; (global void)
 0:2    Function Parameters: 
 0:2      'n_dot_l' (in float)
 0:2      'n_dot_h' (in float)
 0:2      'm' (in float)
 0:?     Sequence
-0:3      move second child to first child (temp 4-component vector of float)
-0:3        'r0' (temp 4-component vector of float)
-0:3        Construct vec4 (temp 4-component vector of float)
-0:3          Constant:
-0:3            1.000000
-0:3          max (temp float)
-0:3            'n_dot_l' (in float)
+0:3      Sequence
+0:3        move second child to first child (temp 4-component vector of float)
+0:3          'r0' (temp 4-component vector of float)
+0:3          Construct vec4 (temp 4-component vector of float)
 0:3            Constant:
-0:3              0.000000
-0:3          Test condition and select (temp float)
-0:3            Condition
-0:3            Compare Less Than (temp bool)
-0:3              min (temp float)
-0:3                'n_dot_l' (in float)
-0:3                'n_dot_h' (in float)
+0:3              1.000000
+0:3            max (temp float)
+0:3              'n_dot_l' (in float)
+0:3              Constant:
+0:3                0.000000
+0:3            Test condition and select (temp float)
+0:3              Condition
+0:3              Compare Less Than (temp bool)
+0:3                min (temp float)
+0:3                  'n_dot_l' (in float)
+0:3                  'n_dot_h' (in float)
+0:3                Constant:
+0:3                  0.000000
+0:3              true case
 0:3              Constant:
 0:3                0.000000
-0:3            true case
+0:3              false case
+0:3              component-wise multiply (temp float)
+0:3                'n_dot_h' (in float)
+0:3                'm' (in float)
 0:3            Constant:
-0:3              0.000000
-0:3            false case
-0:3            component-wise multiply (temp float)
-0:3              'n_dot_h' (in float)
-0:3              'm' (in float)
-0:3          Constant:
-0:3            1.000000
+0:3              1.000000
 0:?   Linker Objects
 
 // Module Version 10000
index 336f70d..043fa82 100644 (file)
@@ -18,7 +18,6 @@ ERROR: 0:22: 'EvaluateAttributeSnapped' : no matching overloaded function found
 ERROR: 0:23: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:24: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:25: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:26: 'fma' : no matching overloaded function found 
 ERROR: 0:27: 'fwidth' : no matching overloaded function found 
 ERROR: 0:28: 'InterlockedAdd' : no matching overloaded function found 
 ERROR: 0:29: 'InterlockedAdd' : no matching overloaded function found 
@@ -61,7 +60,6 @@ ERROR: 0:83: 'EvaluateAttributeSnapped' : no matching overloaded function found
 ERROR: 0:84: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:85: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:86: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:87: 'fma' : no matching overloaded function found 
 ERROR: 0:88: 'fwidth' : no matching overloaded function found 
 ERROR: 0:89: 'InterlockedAdd' : no matching overloaded function found 
 ERROR: 0:90: 'InterlockedAdd' : no matching overloaded function found 
@@ -96,7 +94,6 @@ ERROR: 0:128: 'EvaluateAttributeSnapped' : no matching overloaded function found
 ERROR: 0:129: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:130: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:131: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:132: 'fma' : no matching overloaded function found 
 ERROR: 0:133: 'fwidth' : no matching overloaded function found 
 ERROR: 0:134: 'InterlockedAdd' : no matching overloaded function found 
 ERROR: 0:135: 'InterlockedAdd' : no matching overloaded function found 
@@ -131,7 +128,6 @@ ERROR: 0:173: 'EvaluateAttributeSnapped' : no matching overloaded function found
 ERROR: 0:174: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:175: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:176: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:177: 'fma' : no matching overloaded function found 
 ERROR: 0:178: 'fwidth' : no matching overloaded function found 
 ERROR: 0:179: 'InterlockedAdd' : no matching overloaded function found 
 ERROR: 0:180: 'InterlockedAdd' : no matching overloaded function found 
@@ -150,13 +146,13 @@ ERROR: 0:192: 'InterlockedXor' : no matching overloaded function found
 ERROR: 0:193: 'noise' : no matching overloaded function found 
 ERROR: 0:194: 'reversebits' : no matching overloaded function found 
 ERROR: 0:195: 'transpose' : no matching overloaded function found 
-ERROR: 151 compilation errors.  No code generated.
+ERROR: 147 compilation errors.  No code generated.
 
 
 Shader version: 450
 local_size = (1, 1, 1)
 ERROR: node is still EOpNull!
-0:56  Function Definition: ComputeShaderFunction(f1;f1;f1;i1; (temp float)
+0:56  Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; (global float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -201,8 +197,6 @@ ERROR: node is still EOpNull!
 0:24        0.000000
 0:25      Constant:
 0:25        0.000000
-0:26      Constant:
-0:26        0.000000
 0:27      Constant:
 0:27        0.000000
 0:28      Constant:
@@ -252,7 +246,7 @@ ERROR: node is still EOpNull!
 0:53      Branch: Return with expression
 0:53        Constant:
 0:53          0.000000
-0:65  Function Definition: ComputeShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
+0:65  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
 0:57    Function Parameters: 
 0:57      'inF0' (in 1-component vector of float)
 0:57      'inF1' (in 1-component vector of float)
@@ -264,7 +258,7 @@ ERROR: node is still EOpNull!
 0:62      Branch: Return with expression
 0:62        Constant:
 0:62          0.000000
-0:112  Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
+0:112  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
 0:66    Function Parameters: 
 0:66      'inF0' (in 2-component vector of float)
 0:66      'inF1' (in 2-component vector of float)
@@ -307,8 +301,6 @@ ERROR: node is still EOpNull!
 0:85        0.000000
 0:86      Constant:
 0:86        0.000000
-0:87      Constant:
-0:87        0.000000
 0:88      Constant:
 0:88        0.000000
 0:89      Constant:
@@ -349,7 +341,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:157  Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
+0:157  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
 0:113    Function Parameters: 
 0:113      'inF0' (in 3-component vector of float)
 0:113      'inF1' (in 3-component vector of float)
@@ -388,8 +380,6 @@ ERROR: node is still EOpNull!
 0:130        0.000000
 0:131      Constant:
 0:131        0.000000
-0:132      Constant:
-0:132        0.000000
 0:133      Constant:
 0:133        0.000000
 0:134      Constant:
@@ -431,7 +421,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:202  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:202  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (global 4-component vector of float)
 0:158    Function Parameters: 
 0:158      'inF0' (in 4-component vector of float)
 0:158      'inF1' (in 4-component vector of float)
@@ -470,8 +460,6 @@ ERROR: node is still EOpNull!
 0:175        0.000000
 0:176      Constant:
 0:176        0.000000
-0:177      Constant:
-0:177        0.000000
 0:178      Constant:
 0:178        0.000000
 0:179      Constant:
@@ -523,7 +511,7 @@ Linked compute stage:
 Shader version: 450
 local_size = (1, 1, 1)
 ERROR: node is still EOpNull!
-0:56  Function Definition: ComputeShaderFunction(f1;f1;f1;i1; (temp float)
+0:56  Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; (global float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -568,8 +556,6 @@ ERROR: node is still EOpNull!
 0:24        0.000000
 0:25      Constant:
 0:25        0.000000
-0:26      Constant:
-0:26        0.000000
 0:27      Constant:
 0:27        0.000000
 0:28      Constant:
@@ -619,7 +605,7 @@ ERROR: node is still EOpNull!
 0:53      Branch: Return with expression
 0:53        Constant:
 0:53          0.000000
-0:65  Function Definition: ComputeShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
+0:65  Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
 0:57    Function Parameters: 
 0:57      'inF0' (in 1-component vector of float)
 0:57      'inF1' (in 1-component vector of float)
@@ -631,7 +617,7 @@ ERROR: node is still EOpNull!
 0:62      Branch: Return with expression
 0:62        Constant:
 0:62          0.000000
-0:112  Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
+0:112  Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
 0:66    Function Parameters: 
 0:66      'inF0' (in 2-component vector of float)
 0:66      'inF1' (in 2-component vector of float)
@@ -674,8 +660,6 @@ ERROR: node is still EOpNull!
 0:85        0.000000
 0:86      Constant:
 0:86        0.000000
-0:87      Constant:
-0:87        0.000000
 0:88      Constant:
 0:88        0.000000
 0:89      Constant:
@@ -716,7 +700,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:157  Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
+0:157  Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
 0:113    Function Parameters: 
 0:113      'inF0' (in 3-component vector of float)
 0:113      'inF1' (in 3-component vector of float)
@@ -755,8 +739,6 @@ ERROR: node is still EOpNull!
 0:130        0.000000
 0:131      Constant:
 0:131        0.000000
-0:132      Constant:
-0:132        0.000000
 0:133      Constant:
 0:133        0.000000
 0:134      Constant:
@@ -798,7 +780,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:202  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:202  Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (global 4-component vector of float)
 0:158    Function Parameters: 
 0:158      'inF0' (in 4-component vector of float)
 0:158      'inF1' (in 4-component vector of float)
@@ -837,8 +819,6 @@ ERROR: node is still EOpNull!
 0:175        0.000000
 0:176      Constant:
 0:176        0.000000
-0:177      Constant:
-0:177        0.000000
 0:178      Constant:
 0:178        0.000000
 0:179      Constant:
index ebb651e..829b699 100644 (file)
@@ -8,7 +8,6 @@ ERROR: 0:10: 'determinant' : no matching overloaded function found
 ERROR: 0:12: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:13: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:14: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:15: 'fma' : no matching overloaded function found 
 ERROR: 0:23: 'length' : no matching overloaded function found 
 ERROR: 0:24: 'msad4' : no matching overloaded function found 
 ERROR: 0:25: 'normalize' : no matching overloaded function found 
@@ -27,7 +26,6 @@ ERROR: 0:51: 'determinant' : no matching overloaded function found
 ERROR: 0:52: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:53: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:54: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:55: 'fma' : no matching overloaded function found 
 ERROR: 0:56: 'reversebits' : no matching overloaded function found 
 ERROR: 0:57: 'transpose' : no matching overloaded function found 
 ERROR: 0:64: 'CheckAccessFullyMapped' : no matching overloaded function found 
@@ -37,7 +35,6 @@ ERROR: 0:67: 'determinant' : no matching overloaded function found
 ERROR: 0:68: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:69: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:70: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:71: 'fma' : no matching overloaded function found 
 ERROR: 0:72: 'reversebits' : no matching overloaded function found 
 ERROR: 0:73: 'transpose' : no matching overloaded function found 
 ERROR: 0:81: 'CheckAccessFullyMapped' : no matching overloaded function found 
@@ -47,58 +44,54 @@ ERROR: 0:84: 'determinant' : no matching overloaded function found
 ERROR: 0:85: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:86: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:87: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:88: 'fma' : no matching overloaded function found 
 ERROR: 0:89: 'reversebits' : no matching overloaded function found 
 ERROR: 0:90: 'transpose' : no matching overloaded function found 
-ERROR: 0:118: 'countbits' : no matching overloaded function found 
-ERROR: 0:118: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
-ERROR: 0:118: 'cross' : no matching overloaded function found 
-ERROR: 0:118: 'f16tof32' : no matching overloaded function found 
-ERROR: 0:118: 'firstbithigh' : no matching overloaded function found 
-ERROR: 0:118: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:118: 'fma' : no matching overloaded function found 
-ERROR: 0:118: 'reversebits' : no matching overloaded function found 
-ERROR: 0:118: 'length' : no matching overloaded function found 
-ERROR: 0:118: 'noise' : no matching overloaded function found 
-ERROR: 0:118: 'normalize' : no matching overloaded function found 
-ERROR: 0:118: 'reflect' : no matching overloaded function found 
-ERROR: 0:118: 'refract' : no matching overloaded function found 
-ERROR: 0:118: 'reversebits' : no matching overloaded function found 
-ERROR: 0:126: 'countbits' : no matching overloaded function found 
-ERROR: 0:126: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
-ERROR: 0:126: 'cross' : no matching overloaded function found 
-ERROR: 0:126: 'f16tof32' : no matching overloaded function found 
-ERROR: 0:126: 'firstbithigh' : no matching overloaded function found 
-ERROR: 0:126: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:126: 'fma' : no matching overloaded function found 
-ERROR: 0:126: 'reversebits' : no matching overloaded function found 
-ERROR: 0:126: 'length' : no matching overloaded function found 
-ERROR: 0:126: 'noise' : no matching overloaded function found 
-ERROR: 0:126: 'normalize' : no matching overloaded function found 
-ERROR: 0:126: 'reflect' : no matching overloaded function found 
-ERROR: 0:126: 'refract' : no matching overloaded function found 
-ERROR: 0:126: 'reversebits' : no matching overloaded function found 
-ERROR: 0:134: 'countbits' : no matching overloaded function found 
-ERROR: 0:134: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
-ERROR: 0:134: 'cross' : no matching overloaded function found 
-ERROR: 0:134: 'f16tof32' : no matching overloaded function found 
-ERROR: 0:134: 'firstbithigh' : no matching overloaded function found 
-ERROR: 0:134: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:134: 'fma' : no matching overloaded function found 
-ERROR: 0:134: 'reversebits' : no matching overloaded function found 
-ERROR: 0:134: 'length' : no matching overloaded function found 
-ERROR: 0:134: 'noise' : no matching overloaded function found 
-ERROR: 0:134: 'normalize' : no matching overloaded function found 
-ERROR: 0:134: 'reflect' : no matching overloaded function found 
-ERROR: 0:134: 'refract' : no matching overloaded function found 
-ERROR: 0:134: 'reversebits' : no matching overloaded function found 
-ERROR: 93 compilation errors.  No code generated.
+ERROR: 0:117: 'countbits' : no matching overloaded function found 
+ERROR: 0:117: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
+ERROR: 0:117: 'cross' : no matching overloaded function found 
+ERROR: 0:117: 'f16tof32' : no matching overloaded function found 
+ERROR: 0:117: 'firstbithigh' : no matching overloaded function found 
+ERROR: 0:117: 'firstbitlow' : no matching overloaded function found 
+ERROR: 0:117: 'reversebits' : no matching overloaded function found 
+ERROR: 0:117: 'length' : no matching overloaded function found 
+ERROR: 0:117: 'noise' : no matching overloaded function found 
+ERROR: 0:117: 'normalize' : no matching overloaded function found 
+ERROR: 0:117: 'reflect' : no matching overloaded function found 
+ERROR: 0:117: 'refract' : no matching overloaded function found 
+ERROR: 0:117: 'reversebits' : no matching overloaded function found 
+ERROR: 0:125: 'countbits' : no matching overloaded function found 
+ERROR: 0:125: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
+ERROR: 0:125: 'cross' : no matching overloaded function found 
+ERROR: 0:125: 'f16tof32' : no matching overloaded function found 
+ERROR: 0:125: 'firstbithigh' : no matching overloaded function found 
+ERROR: 0:125: 'firstbitlow' : no matching overloaded function found 
+ERROR: 0:125: 'reversebits' : no matching overloaded function found 
+ERROR: 0:125: 'length' : no matching overloaded function found 
+ERROR: 0:125: 'noise' : no matching overloaded function found 
+ERROR: 0:125: 'normalize' : no matching overloaded function found 
+ERROR: 0:125: 'reflect' : no matching overloaded function found 
+ERROR: 0:125: 'refract' : no matching overloaded function found 
+ERROR: 0:125: 'reversebits' : no matching overloaded function found 
+ERROR: 0:133: 'countbits' : no matching overloaded function found 
+ERROR: 0:133: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
+ERROR: 0:133: 'cross' : no matching overloaded function found 
+ERROR: 0:133: 'f16tof32' : no matching overloaded function found 
+ERROR: 0:133: 'firstbithigh' : no matching overloaded function found 
+ERROR: 0:133: 'firstbitlow' : no matching overloaded function found 
+ERROR: 0:133: 'reversebits' : no matching overloaded function found 
+ERROR: 0:133: 'length' : no matching overloaded function found 
+ERROR: 0:133: 'noise' : no matching overloaded function found 
+ERROR: 0:133: 'normalize' : no matching overloaded function found 
+ERROR: 0:133: 'reflect' : no matching overloaded function found 
+ERROR: 0:133: 'refract' : no matching overloaded function found 
+ERROR: 0:133: 'reversebits' : no matching overloaded function found 
+ERROR: 86 compilation errors.  No code generated.
 
 
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:35  Function Definition: PixelShaderFunction(f1;f1;f1;i1; (temp float)
+0:35  Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; (global float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -123,8 +116,6 @@ ERROR: node is still EOpNull!
 0:13        0.000000
 0:14      Constant:
 0:14        0.000000
-0:15      Constant:
-0:15        0.000000
 0:23      Constant:
 0:23        0.000000
 0:24      Constant:
@@ -144,7 +135,7 @@ ERROR: node is still EOpNull!
 0:32      Branch: Return with expression
 0:32        Constant:
 0:32          0.000000
-0:44  Function Definition: PixelShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
+0:44  Function Definition: PixelShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
 0:36    Function Parameters: 
 0:36      'inF0' (in 1-component vector of float)
 0:36      'inF1' (in 1-component vector of float)
@@ -156,7 +147,7 @@ ERROR: node is still EOpNull!
 0:41      Branch: Return with expression
 0:41        Constant:
 0:41          0.000000
-0:62  Function Definition: PixelShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
+0:62  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
 0:45    Function Parameters: 
 0:45      'inF0' (in 2-component vector of float)
 0:45      'inF1' (in 2-component vector of float)
@@ -181,8 +172,6 @@ ERROR: node is still EOpNull!
 0:53        0.000000
 0:54      Constant:
 0:54        0.000000
-0:55      Constant:
-0:55        0.000000
 0:56      Constant:
 0:56        0.000000
 0:57      Constant:
@@ -191,7 +180,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:79  Function Definition: PixelShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
+0:79  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
 0:63    Function Parameters: 
 0:63      'inF0' (in 3-component vector of float)
 0:63      'inF1' (in 3-component vector of float)
@@ -212,8 +201,6 @@ ERROR: node is still EOpNull!
 0:69        0.000000
 0:70      Constant:
 0:70        0.000000
-0:71      Constant:
-0:71        0.000000
 0:72      Constant:
 0:72        0.000000
 0:73      Constant:
@@ -223,7 +210,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:115  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:114  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (global 4-component vector of float)
 0:80    Function Parameters: 
 0:80      'inF0' (in 4-component vector of float)
 0:80      'inF1' (in 4-component vector of float)
@@ -244,8 +231,6 @@ ERROR: node is still EOpNull!
 0:86        0.000000
 0:87      Constant:
 0:87        0.000000
-0:88      Constant:
-0:88        0.000000
 0:89      Constant:
 0:89        0.000000
 0:90      Constant:
@@ -256,81 +241,77 @@ ERROR: node is still EOpNull!
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:123  Function Definition: PixelShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float)
-0:116    Function Parameters: 
-0:116      'inF0' (in 2X2 matrix of float)
-0:116      'inF1' (in 2X2 matrix of float)
-0:116      'inF2' (in 2X2 matrix of float)
+0:122  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:115    Function Parameters: 
+0:115      'inF0' (in 2X2 matrix of float)
+0:115      'inF1' (in 2X2 matrix of float)
+0:115      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:120      Branch: Return with expression
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:119      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:131  Function Definition: PixelShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float)
-0:124    Function Parameters: 
-0:124      'inF0' (in 3X3 matrix of float)
-0:124      'inF1' (in 3X3 matrix of float)
-0:124      'inF2' (in 3X3 matrix of float)
+0:130  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:123    Function Parameters: 
+0:123      'inF0' (in 3X3 matrix of float)
+0:123      'inF1' (in 3X3 matrix of float)
+0:123      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:128      Branch: Return with expression
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:127      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -341,41 +322,39 @@ ERROR: node is still EOpNull!
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:138  Function Definition: PixelShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float)
-0:132    Function Parameters: 
-0:132      'inF0' (in 4X4 matrix of float)
-0:132      'inF1' (in 4X4 matrix of float)
-0:132      'inF2' (in 4X4 matrix of float)
+0:137  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:131    Function Parameters: 
+0:131      'inF0' (in 4X4 matrix of float)
+0:131      'inF1' (in 4X4 matrix of float)
+0:131      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:136      Branch: Return with expression
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:135      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -402,7 +381,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:35  Function Definition: PixelShaderFunction(f1;f1;f1;i1; (temp float)
+0:35  Function Definition: PixelShaderFunctionS(f1;f1;f1;i1; (global float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -427,8 +406,6 @@ ERROR: node is still EOpNull!
 0:13        0.000000
 0:14      Constant:
 0:14        0.000000
-0:15      Constant:
-0:15        0.000000
 0:23      Constant:
 0:23        0.000000
 0:24      Constant:
@@ -448,7 +425,7 @@ ERROR: node is still EOpNull!
 0:32      Branch: Return with expression
 0:32        Constant:
 0:32          0.000000
-0:44  Function Definition: PixelShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
+0:44  Function Definition: PixelShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
 0:36    Function Parameters: 
 0:36      'inF0' (in 1-component vector of float)
 0:36      'inF1' (in 1-component vector of float)
@@ -460,7 +437,7 @@ ERROR: node is still EOpNull!
 0:41      Branch: Return with expression
 0:41        Constant:
 0:41          0.000000
-0:62  Function Definition: PixelShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
+0:62  Function Definition: PixelShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
 0:45    Function Parameters: 
 0:45      'inF0' (in 2-component vector of float)
 0:45      'inF1' (in 2-component vector of float)
@@ -485,8 +462,6 @@ ERROR: node is still EOpNull!
 0:53        0.000000
 0:54      Constant:
 0:54        0.000000
-0:55      Constant:
-0:55        0.000000
 0:56      Constant:
 0:56        0.000000
 0:57      Constant:
@@ -495,7 +470,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:79  Function Definition: PixelShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
+0:79  Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
 0:63    Function Parameters: 
 0:63      'inF0' (in 3-component vector of float)
 0:63      'inF1' (in 3-component vector of float)
@@ -516,8 +491,6 @@ ERROR: node is still EOpNull!
 0:69        0.000000
 0:70      Constant:
 0:70        0.000000
-0:71      Constant:
-0:71        0.000000
 0:72      Constant:
 0:72        0.000000
 0:73      Constant:
@@ -527,7 +500,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:115  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:114  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (global 4-component vector of float)
 0:80    Function Parameters: 
 0:80      'inF0' (in 4-component vector of float)
 0:80      'inF1' (in 4-component vector of float)
@@ -548,8 +521,6 @@ ERROR: node is still EOpNull!
 0:86        0.000000
 0:87      Constant:
 0:87        0.000000
-0:88      Constant:
-0:88        0.000000
 0:89      Constant:
 0:89        0.000000
 0:90      Constant:
@@ -560,81 +531,77 @@ ERROR: node is still EOpNull!
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:123  Function Definition: PixelShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float)
-0:116    Function Parameters: 
-0:116      'inF0' (in 2X2 matrix of float)
-0:116      'inF1' (in 2X2 matrix of float)
-0:116      'inF2' (in 2X2 matrix of float)
+0:122  Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:115    Function Parameters: 
+0:115      'inF0' (in 2X2 matrix of float)
+0:115      'inF1' (in 2X2 matrix of float)
+0:115      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:118      Constant:
-0:118        0.000000
-0:120      Branch: Return with expression
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:117      Constant:
+0:117        0.000000
+0:119      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:131  Function Definition: PixelShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float)
-0:124    Function Parameters: 
-0:124      'inF0' (in 3X3 matrix of float)
-0:124      'inF1' (in 3X3 matrix of float)
-0:124      'inF2' (in 3X3 matrix of float)
+0:130  Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:123    Function Parameters: 
+0:123      'inF0' (in 3X3 matrix of float)
+0:123      'inF1' (in 3X3 matrix of float)
+0:123      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:126      Constant:
-0:126        0.000000
-0:128      Branch: Return with expression
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:125      Constant:
+0:125        0.000000
+0:127      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -645,41 +612,39 @@ ERROR: node is still EOpNull!
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:138  Function Definition: PixelShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float)
-0:132    Function Parameters: 
-0:132      'inF0' (in 4X4 matrix of float)
-0:132      'inF1' (in 4X4 matrix of float)
-0:132      'inF2' (in 4X4 matrix of float)
+0:137  Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:131    Function Parameters: 
+0:131      'inF0' (in 4X4 matrix of float)
+0:131      'inF1' (in 4X4 matrix of float)
+0:131      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:134      Constant:
-0:134        0.000000
-0:136      Branch: Return with expression
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:133      Constant:
+0:133        0.000000
+0:135      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
index b24ef69..0e974a1 100644 (file)
@@ -23,7 +23,6 @@ ERROR: 0:38: 'EvaluateAttributeSnapped' : no matching overloaded function found
 ERROR: 0:39: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:40: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:41: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:42: 'fma' : no matching overloaded function found 
 ERROR: 0:43: 'fwidth' : no matching overloaded function found 
 ERROR: 0:44: 'InterlockedAdd' : no matching overloaded function found 
 ERROR: 0:45: 'InterlockedAdd' : no matching overloaded function found 
@@ -68,7 +67,6 @@ ERROR: 0:101: 'EvaluateAttributeSnapped' : no matching overloaded function found
 ERROR: 0:102: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:103: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:104: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:105: 'fma' : no matching overloaded function found 
 ERROR: 0:106: 'fwidth' : no matching overloaded function found 
 ERROR: 0:107: 'InterlockedAdd' : no matching overloaded function found 
 ERROR: 0:108: 'InterlockedAdd' : no matching overloaded function found 
@@ -103,7 +101,6 @@ ERROR: 0:146: 'EvaluateAttributeSnapped' : no matching overloaded function found
 ERROR: 0:147: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:148: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:149: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:150: 'fma' : no matching overloaded function found 
 ERROR: 0:151: 'fwidth' : no matching overloaded function found 
 ERROR: 0:152: 'InterlockedAdd' : no matching overloaded function found 
 ERROR: 0:153: 'InterlockedAdd' : no matching overloaded function found 
@@ -138,7 +135,6 @@ ERROR: 0:191: 'EvaluateAttributeSnapped' : no matching overloaded function found
 ERROR: 0:192: 'f16tof32' : no matching overloaded function found 
 ERROR: 0:193: 'firstbithigh' : no matching overloaded function found 
 ERROR: 0:194: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:195: 'fma' : no matching overloaded function found 
 ERROR: 0:196: 'fwidth' : no matching overloaded function found 
 ERROR: 0:197: 'InterlockedAdd' : no matching overloaded function found 
 ERROR: 0:198: 'InterlockedAdd' : no matching overloaded function found 
@@ -157,87 +153,84 @@ ERROR: 0:210: 'InterlockedXor' : no matching overloaded function found
 ERROR: 0:211: 'noise' : no matching overloaded function found 
 ERROR: 0:212: 'reversebits' : no matching overloaded function found 
 ERROR: 0:213: 'transpose' : no matching overloaded function found 
-ERROR: 0:254: 'countbits' : no matching overloaded function found 
-ERROR: 0:254: 'cross' : no matching overloaded function found 
-ERROR: 0:254: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
-ERROR: 0:254: 'ddx' : no matching overloaded function found 
-ERROR: 0:254: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:254: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:254: 'ddy' : no matching overloaded function found 
-ERROR: 0:254: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:254: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:254: 'EvaluateAttributeAtCentroid' : no matching overloaded function found 
-ERROR: 0:254: 'EvaluateAttributeAtSample' : no matching overloaded function found 
-ERROR: 0:254: 'EvaluateAttributeSnapped' : no matching overloaded function found 
-ERROR: 0:254: 'f16tof32' : no matching overloaded function found 
-ERROR: 0:254: 'firstbithigh' : no matching overloaded function found 
-ERROR: 0:254: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:254: 'fma' : no matching overloaded function found 
-ERROR: 0:254: 'fwidth' : no matching overloaded function found 
-ERROR: 0:254: 'noise' : no matching overloaded function found 
-ERROR: 0:254: 'reversebits' : no matching overloaded function found 
-ERROR: 0:254: 'length' : no matching overloaded function found 
-ERROR: 0:254: 'noise' : no matching overloaded function found 
-ERROR: 0:254: 'normalize' : no matching overloaded function found 
-ERROR: 0:254: 'reflect' : no matching overloaded function found 
-ERROR: 0:254: 'refract' : no matching overloaded function found 
-ERROR: 0:254: 'reversebits' : no matching overloaded function found 
-ERROR: 0:262: 'countbits' : no matching overloaded function found 
-ERROR: 0:262: 'cross' : no matching overloaded function found 
-ERROR: 0:262: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
-ERROR: 0:262: 'ddx' : no matching overloaded function found 
-ERROR: 0:262: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:262: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:262: 'ddy' : no matching overloaded function found 
-ERROR: 0:262: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:262: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:262: 'EvaluateAttributeAtCentroid' : no matching overloaded function found 
-ERROR: 0:262: 'EvaluateAttributeAtSample' : no matching overloaded function found 
-ERROR: 0:262: 'EvaluateAttributeSnapped' : no matching overloaded function found 
-ERROR: 0:262: 'f16tof32' : no matching overloaded function found 
-ERROR: 0:262: 'firstbithigh' : no matching overloaded function found 
-ERROR: 0:262: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:262: 'fma' : no matching overloaded function found 
-ERROR: 0:262: 'fwidth' : no matching overloaded function found 
-ERROR: 0:262: 'noise' : no matching overloaded function found 
-ERROR: 0:262: 'reversebits' : no matching overloaded function found 
-ERROR: 0:262: 'length' : no matching overloaded function found 
-ERROR: 0:262: 'noise' : no matching overloaded function found 
-ERROR: 0:262: 'normalize' : no matching overloaded function found 
-ERROR: 0:262: 'reflect' : no matching overloaded function found 
-ERROR: 0:262: 'refract' : no matching overloaded function found 
-ERROR: 0:262: 'reversebits' : no matching overloaded function found 
-ERROR: 0:270: 'countbits' : no matching overloaded function found 
-ERROR: 0:270: 'cross' : no matching overloaded function found 
-ERROR: 0:270: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
-ERROR: 0:270: 'ddx' : no matching overloaded function found 
-ERROR: 0:270: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:270: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:270: 'ddy' : no matching overloaded function found 
-ERROR: 0:270: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:270: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:270: 'EvaluateAttributeAtCentroid' : no matching overloaded function found 
-ERROR: 0:270: 'EvaluateAttributeAtSample' : no matching overloaded function found 
-ERROR: 0:270: 'EvaluateAttributeSnapped' : no matching overloaded function found 
-ERROR: 0:270: 'f16tof32' : no matching overloaded function found 
-ERROR: 0:270: 'firstbithigh' : no matching overloaded function found 
-ERROR: 0:270: 'firstbitlow' : no matching overloaded function found 
-ERROR: 0:270: 'fma' : no matching overloaded function found 
-ERROR: 0:270: 'fwidth' : no matching overloaded function found 
-ERROR: 0:270: 'noise' : no matching overloaded function found 
-ERROR: 0:270: 'reversebits' : no matching overloaded function found 
-ERROR: 0:270: 'length' : no matching overloaded function found 
-ERROR: 0:270: 'noise' : no matching overloaded function found 
-ERROR: 0:270: 'normalize' : no matching overloaded function found 
-ERROR: 0:270: 'reflect' : no matching overloaded function found 
-ERROR: 0:270: 'refract' : no matching overloaded function found 
-ERROR: 0:270: 'reversebits' : no matching overloaded function found 
-ERROR: 233 compilation errors.  No code generated.
+ERROR: 0:253: 'countbits' : no matching overloaded function found 
+ERROR: 0:253: 'cross' : no matching overloaded function found 
+ERROR: 0:253: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
+ERROR: 0:253: 'ddx' : no matching overloaded function found 
+ERROR: 0:253: 'ddx_coarse' : no matching overloaded function found 
+ERROR: 0:253: 'ddx_fine' : no matching overloaded function found 
+ERROR: 0:253: 'ddy' : no matching overloaded function found 
+ERROR: 0:253: 'ddy_coarse' : no matching overloaded function found 
+ERROR: 0:253: 'ddy_fine' : no matching overloaded function found 
+ERROR: 0:253: 'EvaluateAttributeAtCentroid' : no matching overloaded function found 
+ERROR: 0:253: 'EvaluateAttributeAtSample' : no matching overloaded function found 
+ERROR: 0:253: 'EvaluateAttributeSnapped' : no matching overloaded function found 
+ERROR: 0:253: 'f16tof32' : no matching overloaded function found 
+ERROR: 0:253: 'firstbithigh' : no matching overloaded function found 
+ERROR: 0:253: 'firstbitlow' : no matching overloaded function found 
+ERROR: 0:253: 'fwidth' : no matching overloaded function found 
+ERROR: 0:253: 'noise' : no matching overloaded function found 
+ERROR: 0:253: 'reversebits' : no matching overloaded function found 
+ERROR: 0:253: 'length' : no matching overloaded function found 
+ERROR: 0:253: 'noise' : no matching overloaded function found 
+ERROR: 0:253: 'normalize' : no matching overloaded function found 
+ERROR: 0:253: 'reflect' : no matching overloaded function found 
+ERROR: 0:253: 'refract' : no matching overloaded function found 
+ERROR: 0:253: 'reversebits' : no matching overloaded function found 
+ERROR: 0:261: 'countbits' : no matching overloaded function found 
+ERROR: 0:261: 'cross' : no matching overloaded function found 
+ERROR: 0:261: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
+ERROR: 0:261: 'ddx' : no matching overloaded function found 
+ERROR: 0:261: 'ddx_coarse' : no matching overloaded function found 
+ERROR: 0:261: 'ddx_fine' : no matching overloaded function found 
+ERROR: 0:261: 'ddy' : no matching overloaded function found 
+ERROR: 0:261: 'ddy_coarse' : no matching overloaded function found 
+ERROR: 0:261: 'ddy_fine' : no matching overloaded function found 
+ERROR: 0:261: 'EvaluateAttributeAtCentroid' : no matching overloaded function found 
+ERROR: 0:261: 'EvaluateAttributeAtSample' : no matching overloaded function found 
+ERROR: 0:261: 'EvaluateAttributeSnapped' : no matching overloaded function found 
+ERROR: 0:261: 'f16tof32' : no matching overloaded function found 
+ERROR: 0:261: 'firstbithigh' : no matching overloaded function found 
+ERROR: 0:261: 'firstbitlow' : no matching overloaded function found 
+ERROR: 0:261: 'fwidth' : no matching overloaded function found 
+ERROR: 0:261: 'noise' : no matching overloaded function found 
+ERROR: 0:261: 'reversebits' : no matching overloaded function found 
+ERROR: 0:261: 'length' : no matching overloaded function found 
+ERROR: 0:261: 'noise' : no matching overloaded function found 
+ERROR: 0:261: 'normalize' : no matching overloaded function found 
+ERROR: 0:261: 'reflect' : no matching overloaded function found 
+ERROR: 0:261: 'refract' : no matching overloaded function found 
+ERROR: 0:261: 'reversebits' : no matching overloaded function found 
+ERROR: 0:269: 'countbits' : no matching overloaded function found 
+ERROR: 0:269: 'cross' : no matching overloaded function found 
+ERROR: 0:269: 'D3DCOLORtoUBYTE4' : no matching overloaded function found 
+ERROR: 0:269: 'ddx' : no matching overloaded function found 
+ERROR: 0:269: 'ddx_coarse' : no matching overloaded function found 
+ERROR: 0:269: 'ddx_fine' : no matching overloaded function found 
+ERROR: 0:269: 'ddy' : no matching overloaded function found 
+ERROR: 0:269: 'ddy_coarse' : no matching overloaded function found 
+ERROR: 0:269: 'ddy_fine' : no matching overloaded function found 
+ERROR: 0:269: 'EvaluateAttributeAtCentroid' : no matching overloaded function found 
+ERROR: 0:269: 'EvaluateAttributeAtSample' : no matching overloaded function found 
+ERROR: 0:269: 'EvaluateAttributeSnapped' : no matching overloaded function found 
+ERROR: 0:269: 'f16tof32' : no matching overloaded function found 
+ERROR: 0:269: 'firstbithigh' : no matching overloaded function found 
+ERROR: 0:269: 'firstbitlow' : no matching overloaded function found 
+ERROR: 0:269: 'fwidth' : no matching overloaded function found 
+ERROR: 0:269: 'noise' : no matching overloaded function found 
+ERROR: 0:269: 'reversebits' : no matching overloaded function found 
+ERROR: 0:269: 'length' : no matching overloaded function found 
+ERROR: 0:269: 'noise' : no matching overloaded function found 
+ERROR: 0:269: 'normalize' : no matching overloaded function found 
+ERROR: 0:269: 'reflect' : no matching overloaded function found 
+ERROR: 0:269: 'refract' : no matching overloaded function found 
+ERROR: 0:269: 'reversebits' : no matching overloaded function found 
+ERROR: 226 compilation errors.  No code generated.
 
 
 Shader version: 450
 ERROR: node is still EOpNull!
-0:74  Function Definition: VertexShaderFunction(f1;f1;f1;i1; (temp float)
+0:74  Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; (global float)
 0:15    Function Parameters: 
 0:15      'inF0' (in float)
 0:15      'inF1' (in float)
@@ -292,8 +285,6 @@ ERROR: node is still EOpNull!
 0:40        0.000000
 0:41      Constant:
 0:41        0.000000
-0:42      Constant:
-0:42        0.000000
 0:43      Constant:
 0:43        0.000000
 0:44      Constant:
@@ -347,7 +338,7 @@ ERROR: node is still EOpNull!
 0:71      Branch: Return with expression
 0:71        Constant:
 0:71          0.000000
-0:83  Function Definition: VertexShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
+0:83  Function Definition: VertexShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
 0:75    Function Parameters: 
 0:75      'inF0' (in 1-component vector of float)
 0:75      'inF1' (in 1-component vector of float)
@@ -359,7 +350,7 @@ ERROR: node is still EOpNull!
 0:80      Branch: Return with expression
 0:80        Constant:
 0:80          0.000000
-0:130  Function Definition: VertexShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
+0:130  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
 0:84    Function Parameters: 
 0:84      'inF0' (in 2-component vector of float)
 0:84      'inF1' (in 2-component vector of float)
@@ -402,8 +393,6 @@ ERROR: node is still EOpNull!
 0:103        0.000000
 0:104      Constant:
 0:104        0.000000
-0:105      Constant:
-0:105        0.000000
 0:106      Constant:
 0:106        0.000000
 0:107      Constant:
@@ -444,7 +433,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:175  Function Definition: VertexShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
+0:175  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
 0:131    Function Parameters: 
 0:131      'inF0' (in 3-component vector of float)
 0:131      'inF1' (in 3-component vector of float)
@@ -483,8 +472,6 @@ ERROR: node is still EOpNull!
 0:148        0.000000
 0:149      Constant:
 0:149        0.000000
-0:150      Constant:
-0:150        0.000000
 0:151      Constant:
 0:151        0.000000
 0:152      Constant:
@@ -526,7 +513,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:251  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:250  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (global 4-component vector of float)
 0:176    Function Parameters: 
 0:176      'inF0' (in 4-component vector of float)
 0:176      'inF1' (in 4-component vector of float)
@@ -565,8 +552,6 @@ ERROR: node is still EOpNull!
 0:193        0.000000
 0:194      Constant:
 0:194        0.000000
-0:195      Constant:
-0:195        0.000000
 0:196      Constant:
 0:196        0.000000
 0:197      Constant:
@@ -609,125 +594,121 @@ ERROR: node is still EOpNull!
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:259  Function Definition: VertexShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float)
-0:252    Function Parameters: 
-0:252      'inF0' (in 2X2 matrix of float)
-0:252      'inF1' (in 2X2 matrix of float)
-0:252      'inF2' (in 2X2 matrix of float)
+0:258  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:251    Function Parameters: 
+0:251      'inF0' (in 2X2 matrix of float)
+0:251      'inF1' (in 2X2 matrix of float)
+0:251      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:256      Branch: Return with expression
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:255      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:267  Function Definition: VertexShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float)
-0:260    Function Parameters: 
-0:260      'inF0' (in 3X3 matrix of float)
-0:260      'inF1' (in 3X3 matrix of float)
-0:260      'inF2' (in 3X3 matrix of float)
+0:266  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:259    Function Parameters: 
+0:259      'inF0' (in 3X3 matrix of float)
+0:259      'inF1' (in 3X3 matrix of float)
+0:259      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:264      Branch: Return with expression
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:263      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -738,63 +719,61 @@ ERROR: node is still EOpNull!
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:274  Function Definition: VertexShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float)
-0:268    Function Parameters: 
-0:268      'inF0' (in 4X4 matrix of float)
-0:268      'inF1' (in 4X4 matrix of float)
-0:268      'inF2' (in 4X4 matrix of float)
+0:273  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:267    Function Parameters: 
+0:267      'inF0' (in 4X4 matrix of float)
+0:267      'inF1' (in 4X4 matrix of float)
+0:267      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:272      Branch: Return with expression
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:271      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -813,18 +792,18 @@ ERROR: node is still EOpNull!
 0:?           4.000000
 0:?           4.000000
 0:?   Linker Objects
-0:?     'gs_ua' (temp uint)
-0:?     'gs_ub' (temp uint)
-0:?     'gs_uc' (temp uint)
-0:?     'gs_ua2' (temp 2-component vector of uint)
-0:?     'gs_ub2' (temp 2-component vector of uint)
-0:?     'gs_uc2' (temp 2-component vector of uint)
-0:?     'gs_ua3' (temp 3-component vector of uint)
-0:?     'gs_ub3' (temp 3-component vector of uint)
-0:?     'gs_uc3' (temp 3-component vector of uint)
-0:?     'gs_ua4' (temp 4-component vector of uint)
-0:?     'gs_ub4' (temp 4-component vector of uint)
-0:?     'gs_uc4' (temp 4-component vector of uint)
+0:?     'gs_ua' (global uint)
+0:?     'gs_ub' (global uint)
+0:?     'gs_uc' (global uint)
+0:?     'gs_ua2' (global 2-component vector of uint)
+0:?     'gs_ub2' (global 2-component vector of uint)
+0:?     'gs_uc2' (global 2-component vector of uint)
+0:?     'gs_ua3' (global 3-component vector of uint)
+0:?     'gs_ub3' (global 3-component vector of uint)
+0:?     'gs_uc3' (global 3-component vector of uint)
+0:?     'gs_ua4' (global 4-component vector of uint)
+0:?     'gs_ub4' (global 4-component vector of uint)
+0:?     'gs_uc4' (global 4-component vector of uint)
 
 
 Linked vertex stage:
@@ -832,7 +811,7 @@ Linked vertex stage:
 
 Shader version: 450
 ERROR: node is still EOpNull!
-0:74  Function Definition: VertexShaderFunction(f1;f1;f1;i1; (temp float)
+0:74  Function Definition: VertexShaderFunctionS(f1;f1;f1;i1; (global float)
 0:15    Function Parameters: 
 0:15      'inF0' (in float)
 0:15      'inF1' (in float)
@@ -887,8 +866,6 @@ ERROR: node is still EOpNull!
 0:40        0.000000
 0:41      Constant:
 0:41        0.000000
-0:42      Constant:
-0:42        0.000000
 0:43      Constant:
 0:43        0.000000
 0:44      Constant:
@@ -942,7 +919,7 @@ ERROR: node is still EOpNull!
 0:71      Branch: Return with expression
 0:71        Constant:
 0:71          0.000000
-0:83  Function Definition: VertexShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float)
+0:83  Function Definition: VertexShaderFunction1(vf1;vf1;vf1;vi1; (global 1-component vector of float)
 0:75    Function Parameters: 
 0:75      'inF0' (in 1-component vector of float)
 0:75      'inF1' (in 1-component vector of float)
@@ -954,7 +931,7 @@ ERROR: node is still EOpNull!
 0:80      Branch: Return with expression
 0:80        Constant:
 0:80          0.000000
-0:130  Function Definition: VertexShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float)
+0:130  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vi2; (global 2-component vector of float)
 0:84    Function Parameters: 
 0:84      'inF0' (in 2-component vector of float)
 0:84      'inF1' (in 2-component vector of float)
@@ -997,8 +974,6 @@ ERROR: node is still EOpNull!
 0:103        0.000000
 0:104      Constant:
 0:104        0.000000
-0:105      Constant:
-0:105        0.000000
 0:106      Constant:
 0:106        0.000000
 0:107      Constant:
@@ -1039,7 +1014,7 @@ ERROR: node is still EOpNull!
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:175  Function Definition: VertexShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float)
+0:175  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; (global 3-component vector of float)
 0:131    Function Parameters: 
 0:131      'inF0' (in 3-component vector of float)
 0:131      'inF1' (in 3-component vector of float)
@@ -1078,8 +1053,6 @@ ERROR: node is still EOpNull!
 0:148        0.000000
 0:149      Constant:
 0:149        0.000000
-0:150      Constant:
-0:150        0.000000
 0:151      Constant:
 0:151        0.000000
 0:152      Constant:
@@ -1121,7 +1094,7 @@ ERROR: node is still EOpNull!
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:251  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float)
+0:250  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (global 4-component vector of float)
 0:176    Function Parameters: 
 0:176      'inF0' (in 4-component vector of float)
 0:176      'inF1' (in 4-component vector of float)
@@ -1160,8 +1133,6 @@ ERROR: node is still EOpNull!
 0:193        0.000000
 0:194      Constant:
 0:194        0.000000
-0:195      Constant:
-0:195        0.000000
 0:196      Constant:
 0:196        0.000000
 0:197      Constant:
@@ -1204,125 +1175,121 @@ ERROR: node is still EOpNull!
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:259  Function Definition: VertexShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float)
-0:252    Function Parameters: 
-0:252      'inF0' (in 2X2 matrix of float)
-0:252      'inF1' (in 2X2 matrix of float)
-0:252      'inF2' (in 2X2 matrix of float)
+0:258  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:251    Function Parameters: 
+0:251      'inF0' (in 2X2 matrix of float)
+0:251      'inF1' (in 2X2 matrix of float)
+0:251      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:254      Constant:
-0:254        0.000000
-0:256      Branch: Return with expression
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:253      Constant:
+0:253        0.000000
+0:255      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:267  Function Definition: VertexShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float)
-0:260    Function Parameters: 
-0:260      'inF0' (in 3X3 matrix of float)
-0:260      'inF1' (in 3X3 matrix of float)
-0:260      'inF2' (in 3X3 matrix of float)
+0:266  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:259    Function Parameters: 
+0:259      'inF0' (in 3X3 matrix of float)
+0:259      'inF1' (in 3X3 matrix of float)
+0:259      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:262      Constant:
-0:262        0.000000
-0:264      Branch: Return with expression
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:261      Constant:
+0:261        0.000000
+0:263      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -1333,63 +1300,61 @@ ERROR: node is still EOpNull!
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:274  Function Definition: VertexShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float)
-0:268    Function Parameters: 
-0:268      'inF0' (in 4X4 matrix of float)
-0:268      'inF1' (in 4X4 matrix of float)
-0:268      'inF2' (in 4X4 matrix of float)
+0:273  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:267    Function Parameters: 
+0:267      'inF0' (in 4X4 matrix of float)
+0:267      'inF1' (in 4X4 matrix of float)
+0:267      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:270      Constant:
-0:270        0.000000
-0:272      Branch: Return with expression
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:269      Constant:
+0:269        0.000000
+0:271      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -1408,17 +1373,17 @@ ERROR: node is still EOpNull!
 0:?           4.000000
 0:?           4.000000
 0:?   Linker Objects
-0:?     'gs_ua' (temp uint)
-0:?     'gs_ub' (temp uint)
-0:?     'gs_uc' (temp uint)
-0:?     'gs_ua2' (temp 2-component vector of uint)
-0:?     'gs_ub2' (temp 2-component vector of uint)
-0:?     'gs_uc2' (temp 2-component vector of uint)
-0:?     'gs_ua3' (temp 3-component vector of uint)
-0:?     'gs_ub3' (temp 3-component vector of uint)
-0:?     'gs_uc3' (temp 3-component vector of uint)
-0:?     'gs_ua4' (temp 4-component vector of uint)
-0:?     'gs_ub4' (temp 4-component vector of uint)
-0:?     'gs_uc4' (temp 4-component vector of uint)
+0:?     'gs_ua' (global uint)
+0:?     'gs_ub' (global uint)
+0:?     'gs_uc' (global uint)
+0:?     'gs_ua2' (global 2-component vector of uint)
+0:?     'gs_ub2' (global 2-component vector of uint)
+0:?     'gs_uc2' (global 2-component vector of uint)
+0:?     'gs_ua3' (global 3-component vector of uint)
+0:?     'gs_ub3' (global 3-component vector of uint)
+0:?     'gs_uc3' (global 3-component vector of uint)
+0:?     'gs_ua4' (global 4-component vector of uint)
+0:?     'gs_ub4' (global 4-component vector of uint)
+0:?     'gs_uc4' (global 4-component vector of uint)
 
 SPIR-V is not generated for failed compile or link
index d4c9706..926501e 100644 (file)
@@ -1,7 +1,7 @@
 hlsl.intrinsics.vert
 Shader version: 450
 0:? Sequence
-0:62  Function Definition: VertexShaderFunction(f1;f1;f1;u1;u1; (temp float)
+0:63  Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; (global float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -72,846 +72,870 @@ Shader version: 450
 0:34      ldexp (global float)
 0:34        'inF0' (in float)
 0:34        'inF1' (in float)
-0:35      log (global float)
+0:35      mix (global float)
 0:35        'inF0' (in float)
-0:36      component-wise multiply (temp float)
-0:36        log2 (temp float)
-0:36          'inF0' (in float)
-0:36        Constant:
-0:36          0.301030
-0:37      log2 (global float)
-0:37        'inF0' (in float)
-0:38      max (global float)
+0:35        'inF1' (in float)
+0:35        'inF2' (in float)
+0:36      log (global float)
+0:36        'inF0' (in float)
+0:37      component-wise multiply (temp float)
+0:37        log2 (temp float)
+0:37          'inF0' (in float)
+0:37        Constant:
+0:37          0.301030
+0:38      log2 (global float)
 0:38        'inF0' (in float)
-0:38        'inF1' (in float)
-0:39      min (global float)
+0:39      max (global float)
 0:39        'inF0' (in float)
 0:39        'inF1' (in float)
-0:41      pow (global float)
-0:41        'inF0' (in float)
-0:41        'inF1' (in float)
-0:42      radians (global float)
+0:40      min (global float)
+0:40        'inF0' (in float)
+0:40        'inF1' (in float)
+0:42      pow (global float)
 0:42        'inF0' (in float)
-0:43      bitFieldReverse (global uint)
-0:43        Constant:
-0:43          2 (const uint)
-0:44      roundEven (global float)
-0:44        'inF0' (in float)
-0:45      inverse sqrt (global float)
+0:42        'inF1' (in float)
+0:43      radians (global float)
+0:43        'inF0' (in float)
+0:44      bitFieldReverse (global uint)
+0:44        Constant:
+0:44          2 (const uint)
+0:45      roundEven (global float)
 0:45        'inF0' (in float)
-0:46      clamp (temp float)
+0:46      inverse sqrt (global float)
 0:46        'inF0' (in float)
-0:46        Constant:
-0:46          0.000000
-0:46        Constant:
-0:46          1.000000
-0:47      Sign (global float)
+0:47      clamp (temp float)
 0:47        'inF0' (in float)
-0:48      sine (global float)
+0:47        Constant:
+0:47          0.000000
+0:47        Constant:
+0:47          1.000000
+0:48      Sign (global float)
 0:48        'inF0' (in float)
-0:49      Sequence
-0:49        move second child to first child (temp float)
-0:49          'inF1' (in float)
-0:49          sine (temp float)
-0:49            'inF0' (in float)
-0:49        move second child to first child (temp float)
-0:49          'inF2' (in float)
-0:49          cosine (temp float)
-0:49            'inF0' (in float)
-0:50      hyp. sine (global float)
-0:50        'inF0' (in float)
-0:51      smoothstep (global float)
+0:49      sine (global float)
+0:49        'inF0' (in float)
+0:50      Sequence
+0:50        move second child to first child (temp float)
+0:50          'inF1' (in float)
+0:50          sine (temp float)
+0:50            'inF0' (in float)
+0:50        move second child to first child (temp float)
+0:50          'inF2' (in float)
+0:50          cosine (temp float)
+0:50            'inF0' (in float)
+0:51      hyp. sine (global float)
 0:51        'inF0' (in float)
-0:51        'inF1' (in float)
-0:51        'inF2' (in float)
-0:52      sqrt (global float)
+0:52      smoothstep (global float)
 0:52        'inF0' (in float)
-0:53      step (global float)
+0:52        'inF1' (in float)
+0:52        'inF2' (in float)
+0:53      sqrt (global float)
 0:53        'inF0' (in float)
-0:53        'inF1' (in float)
-0:54      tangent (global float)
+0:54      step (global float)
 0:54        'inF0' (in float)
-0:55      hyp. tangent (global float)
+0:54        'inF1' (in float)
+0:55      tangent (global float)
 0:55        'inF0' (in float)
-0:57      trunc (global float)
-0:57        'inF0' (in float)
-0:59      Branch: Return with expression
-0:59        Constant:
-0:59          0.000000
-0:68  Function Definition: VertexShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float)
-0:63    Function Parameters: 
-0:63      'inF0' (in 1-component vector of float)
-0:63      'inF1' (in 1-component vector of float)
-0:63      'inF2' (in 1-component vector of float)
+0:56      hyp. tangent (global float)
+0:56        'inF0' (in float)
+0:58      trunc (global float)
+0:58        'inF0' (in float)
+0:60      Branch: Return with expression
+0:60        Constant:
+0:60          0.000000
+0:69  Function Definition: VertexShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
+0:64    Function Parameters: 
+0:64      'inF0' (in 1-component vector of float)
+0:64      'inF1' (in 1-component vector of float)
+0:64      'inF2' (in 1-component vector of float)
 0:?     Sequence
-0:65      Branch: Return with expression
-0:65        Constant:
-0:65          0.000000
-0:137  Function Definition: VertexShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
-0:69    Function Parameters: 
-0:69      'inF0' (in 2-component vector of float)
-0:69      'inF1' (in 2-component vector of float)
-0:69      'inF2' (in 2-component vector of float)
-0:69      'inU0' (in 2-component vector of uint)
-0:69      'inU1' (in 2-component vector of uint)
+0:66      Branch: Return with expression
+0:66        Constant:
+0:66          0.000000
+0:139  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
+0:70    Function Parameters: 
+0:70      'inF0' (in 2-component vector of float)
+0:70      'inF1' (in 2-component vector of float)
+0:70      'inF2' (in 2-component vector of float)
+0:70      'inU0' (in 2-component vector of uint)
+0:70      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:70      all (global bool)
-0:70        'inF0' (in 2-component vector of float)
-0:71      Absolute value (global 2-component vector of float)
+0:71      all (global bool)
 0:71        'inF0' (in 2-component vector of float)
-0:72      arc cosine (global 2-component vector of float)
+0:72      Absolute value (global 2-component vector of float)
 0:72        'inF0' (in 2-component vector of float)
-0:73      any (global bool)
+0:73      arc cosine (global 2-component vector of float)
 0:73        'inF0' (in 2-component vector of float)
-0:74      arc sine (global 2-component vector of float)
+0:74      any (global bool)
 0:74        'inF0' (in 2-component vector of float)
-0:75      floatBitsToInt (global 2-component vector of int)
+0:75      arc sine (global 2-component vector of float)
 0:75        'inF0' (in 2-component vector of float)
-0:76      floatBitsToUint (global 2-component vector of uint)
+0:76      floatBitsToInt (global 2-component vector of int)
 0:76        'inF0' (in 2-component vector of float)
-0:77      intBitsToFloat (global 2-component vector of float)
-0:77        'inU0' (in 2-component vector of uint)
-0:79      arc tangent (global 2-component vector of float)
-0:79        'inF0' (in 2-component vector of float)
+0:77      floatBitsToUint (global 2-component vector of uint)
+0:77        'inF0' (in 2-component vector of float)
+0:78      intBitsToFloat (global 2-component vector of float)
+0:78        'inU0' (in 2-component vector of uint)
 0:80      arc tangent (global 2-component vector of float)
 0:80        'inF0' (in 2-component vector of float)
-0:80        'inF1' (in 2-component vector of float)
-0:81      Ceiling (global 2-component vector of float)
+0:81      arc tangent (global 2-component vector of float)
 0:81        'inF0' (in 2-component vector of float)
-0:82      clamp (global 2-component vector of float)
+0:81        'inF1' (in 2-component vector of float)
+0:82      Ceiling (global 2-component vector of float)
 0:82        'inF0' (in 2-component vector of float)
-0:82        'inF1' (in 2-component vector of float)
-0:82        'inF2' (in 2-component vector of float)
-0:83      cosine (global 2-component vector of float)
+0:83      clamp (global 2-component vector of float)
 0:83        'inF0' (in 2-component vector of float)
-0:84      hyp. cosine (global 2-component vector of float)
+0:83        'inF1' (in 2-component vector of float)
+0:83        'inF2' (in 2-component vector of float)
+0:84      cosine (global 2-component vector of float)
 0:84        'inF0' (in 2-component vector of float)
+0:85      hyp. cosine (global 2-component vector of float)
+0:85        'inF0' (in 2-component vector of float)
 0:?       bitCount (global 2-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
-0:86      degrees (global 2-component vector of float)
-0:86        'inF0' (in 2-component vector of float)
-0:87      distance (global float)
+0:87      degrees (global 2-component vector of float)
 0:87        'inF0' (in 2-component vector of float)
-0:87        'inF1' (in 2-component vector of float)
-0:88      dot-product (global float)
+0:88      distance (global float)
 0:88        'inF0' (in 2-component vector of float)
 0:88        'inF1' (in 2-component vector of float)
-0:92      exp (global 2-component vector of float)
-0:92        'inF0' (in 2-component vector of float)
-0:93      exp2 (global 2-component vector of float)
+0:89      dot-product (global float)
+0:89        'inF0' (in 2-component vector of float)
+0:89        'inF1' (in 2-component vector of float)
+0:93      exp (global 2-component vector of float)
 0:93        'inF0' (in 2-component vector of float)
-0:94      face-forward (global 2-component vector of float)
+0:94      exp2 (global 2-component vector of float)
 0:94        'inF0' (in 2-component vector of float)
-0:94        'inF1' (in 2-component vector of float)
-0:94        'inF2' (in 2-component vector of float)
-0:95      findMSB (global int)
-0:95        Constant:
-0:95          7 (const int)
-0:96      findLSB (global int)
+0:95      face-forward (global 2-component vector of float)
+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:96      findMSB (global int)
 0:96        Constant:
 0:96          7 (const int)
-0:97      Floor (global 2-component vector of float)
-0:97        'inF0' (in 2-component vector of float)
-0:99      mod (global 2-component vector of float)
-0:99        'inF0' (in 2-component vector of float)
-0:99        'inF1' (in 2-component vector of float)
-0:100      Fraction (global 2-component vector of float)
+0:97      findLSB (global int)
+0:97        Constant:
+0:97          7 (const int)
+0:98      Floor (global 2-component vector of float)
+0:98        'inF0' (in 2-component vector of float)
+0:100      mod (global 2-component vector of float)
 0:100        'inF0' (in 2-component vector of float)
-0:101      frexp (global 2-component vector of float)
+0:100        'inF1' (in 2-component vector of float)
+0:101      Fraction (global 2-component vector of float)
 0:101        'inF0' (in 2-component vector of float)
-0:101        'inF1' (in 2-component vector of float)
-0:102      isinf (global 2-component vector of bool)
+0:102      frexp (global 2-component vector of float)
 0:102        'inF0' (in 2-component vector of float)
-0:103      isnan (global 2-component vector of bool)
+0:102        'inF1' (in 2-component vector of float)
+0:103      isinf (global 2-component vector of bool)
 0:103        'inF0' (in 2-component vector of float)
-0:104      ldexp (global 2-component vector of float)
+0:104      isnan (global 2-component vector of bool)
 0:104        'inF0' (in 2-component vector of float)
-0:104        'inF1' (in 2-component vector of float)
-0:105      length (global float)
+0:105      ldexp (global 2-component vector of float)
 0:105        'inF0' (in 2-component vector of float)
-0:106      log (global 2-component vector of float)
+0:105        'inF1' (in 2-component vector of float)
+0:106      mix (global 2-component vector of float)
 0:106        'inF0' (in 2-component vector of float)
-0:107      vector-scale (temp 2-component vector of float)
-0:107        log2 (temp 2-component vector of float)
-0:107          'inF0' (in 2-component vector of float)
-0:107        Constant:
-0:107          0.301030
-0:108      log2 (global 2-component vector of float)
+0:106        'inF1' (in 2-component vector of float)
+0:106        'inF2' (in 2-component vector of float)
+0:107      length (global float)
+0:107        'inF0' (in 2-component vector of float)
+0:108      log (global 2-component vector of float)
 0:108        'inF0' (in 2-component vector of float)
-0:109      max (global 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      min (global 2-component vector of float)
+0:109      vector-scale (temp 2-component vector of float)
+0:109        log2 (temp 2-component vector of float)
+0:109          'inF0' (in 2-component vector of float)
+0:109        Constant:
+0:109          0.301030
+0:110      log2 (global 2-component vector of float)
 0:110        'inF0' (in 2-component vector of float)
-0:110        'inF1' (in 2-component vector of float)
-0:112      normalize (global 2-component vector of float)
+0:111      max (global 2-component vector of float)
+0:111        'inF0' (in 2-component vector of float)
+0:111        'inF1' (in 2-component vector of float)
+0:112      min (global 2-component vector of float)
 0:112        'inF0' (in 2-component vector of float)
-0:113      pow (global 2-component vector of float)
-0:113        'inF0' (in 2-component vector of float)
-0:113        'inF1' (in 2-component vector of float)
-0:114      radians (global 2-component vector of float)
+0:112        'inF1' (in 2-component vector of float)
+0:114      normalize (global 2-component vector of float)
 0:114        'inF0' (in 2-component vector of float)
-0:115      reflect (global 2-component vector of float)
+0:115      pow (global 2-component vector of float)
 0:115        'inF0' (in 2-component vector of float)
 0:115        'inF1' (in 2-component vector of float)
-0:116      refract (global 2-component vector of float)
+0:116      radians (global 2-component vector of float)
 0:116        'inF0' (in 2-component vector of float)
-0:116        'inF1' (in 2-component vector of float)
-0:116        Constant:
-0:116          2.000000
+0:117      reflect (global 2-component vector of float)
+0:117        'inF0' (in 2-component vector of float)
+0:117        'inF1' (in 2-component vector of float)
+0:118      refract (global 2-component vector of float)
+0:118        'inF0' (in 2-component vector of float)
+0:118        'inF1' (in 2-component vector of float)
+0:118        Constant:
+0:118          2.000000
 0:?       bitFieldReverse (global 2-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
-0:118      roundEven (global 2-component vector of float)
-0:118        'inF0' (in 2-component vector of float)
-0:119      inverse sqrt (global 2-component vector of float)
-0:119        'inF0' (in 2-component vector of float)
-0:120      clamp (temp 2-component vector of float)
+0:120      roundEven (global 2-component vector of float)
 0:120        'inF0' (in 2-component vector of float)
-0:120        Constant:
-0:120          0.000000
-0:120        Constant:
-0:120          1.000000
-0:121      Sign (global 2-component vector of float)
+0:121      inverse sqrt (global 2-component vector of float)
 0:121        'inF0' (in 2-component vector of float)
-0:122      sine (global 2-component vector of float)
+0:122      clamp (temp 2-component vector of float)
 0:122        'inF0' (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          'inF1' (in 2-component vector of float)
-0:123          sine (temp 2-component vector of float)
-0:123            'inF0' (in 2-component vector of float)
-0:123        move second child to first child (temp 2-component vector of float)
-0:123          'inF2' (in 2-component vector of float)
-0:123          cosine (temp 2-component vector of float)
-0:123            'inF0' (in 2-component vector of float)
-0:124      hyp. sine (global 2-component vector of float)
+0:122        Constant:
+0:122          0.000000
+0:122        Constant:
+0:122          1.000000
+0:123      Sign (global 2-component vector of float)
+0:123        'inF0' (in 2-component vector of float)
+0:124      sine (global 2-component vector of float)
 0:124        'inF0' (in 2-component vector of float)
-0:125      smoothstep (global 2-component vector of float)
-0:125        'inF0' (in 2-component vector of float)
-0:125        'inF1' (in 2-component vector of float)
-0:125        'inF2' (in 2-component vector of float)
-0:126      sqrt (global 2-component vector of float)
+0:125      Sequence
+0:125        move second child to first child (temp 2-component vector of float)
+0:125          'inF1' (in 2-component vector of float)
+0:125          sine (temp 2-component vector of float)
+0:125            'inF0' (in 2-component vector of float)
+0:125        move second child to first child (temp 2-component vector of float)
+0:125          'inF2' (in 2-component vector of float)
+0:125          cosine (temp 2-component vector of float)
+0:125            'inF0' (in 2-component vector of float)
+0:126      hyp. sine (global 2-component vector of float)
 0:126        'inF0' (in 2-component vector of float)
-0:127      step (global 2-component vector of float)
+0:127      smoothstep (global 2-component vector of float)
 0:127        'inF0' (in 2-component vector of float)
 0:127        'inF1' (in 2-component vector of float)
-0:128      tangent (global 2-component vector of float)
+0:127        'inF2' (in 2-component vector of float)
+0:128      sqrt (global 2-component vector of float)
 0:128        'inF0' (in 2-component vector of float)
-0:129      hyp. tangent (global 2-component vector of float)
+0:129      step (global 2-component vector of float)
 0:129        'inF0' (in 2-component vector of float)
-0:131      trunc (global 2-component vector of float)
+0:129        'inF1' (in 2-component vector of float)
+0:130      tangent (global 2-component vector of float)
+0:130        'inF0' (in 2-component vector of float)
+0:131      hyp. tangent (global 2-component vector of float)
 0:131        'inF0' (in 2-component vector of float)
-0:134      Branch: Return with expression
+0:133      trunc (global 2-component vector of float)
+0:133        'inF0' (in 2-component vector of float)
+0:136      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:207  Function Definition: VertexShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
-0:138    Function Parameters: 
-0:138      'inF0' (in 3-component vector of float)
-0:138      'inF1' (in 3-component vector of float)
-0:138      'inF2' (in 3-component vector of float)
-0:138      'inU0' (in 3-component vector of uint)
-0:138      'inU1' (in 3-component vector of uint)
+0:210  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:140    Function Parameters: 
+0:140      'inF0' (in 3-component vector of float)
+0:140      'inF1' (in 3-component vector of float)
+0:140      'inF2' (in 3-component vector of float)
+0:140      'inU0' (in 3-component vector of uint)
+0:140      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:139      all (global bool)
-0:139        'inF0' (in 3-component vector of float)
-0:140      Absolute value (global 3-component vector of float)
-0:140        'inF0' (in 3-component vector of float)
-0:141      arc cosine (global 3-component vector of float)
+0:141      all (global bool)
 0:141        'inF0' (in 3-component vector of float)
-0:142      any (global bool)
+0:142      Absolute value (global 3-component vector of float)
 0:142        'inF0' (in 3-component vector of float)
-0:143      arc sine (global 3-component vector of float)
+0:143      arc cosine (global 3-component vector of float)
 0:143        'inF0' (in 3-component vector of float)
-0:144      floatBitsToInt (global 3-component vector of int)
+0:144      any (global bool)
 0:144        'inF0' (in 3-component vector of float)
-0:145      floatBitsToUint (global 3-component vector of uint)
+0:145      arc sine (global 3-component vector of float)
 0:145        'inF0' (in 3-component vector of float)
-0:146      intBitsToFloat (global 3-component vector of float)
-0:146        'inU0' (in 3-component vector of uint)
-0:148      arc tangent (global 3-component vector of float)
-0:148        'inF0' (in 3-component vector of float)
-0:149      arc tangent (global 3-component vector of float)
-0:149        'inF0' (in 3-component vector of float)
-0:149        'inF1' (in 3-component vector of float)
-0:150      Ceiling (global 3-component vector of float)
+0:146      floatBitsToInt (global 3-component vector of int)
+0:146        'inF0' (in 3-component vector of float)
+0:147      floatBitsToUint (global 3-component vector of uint)
+0:147        'inF0' (in 3-component vector of float)
+0:148      intBitsToFloat (global 3-component vector of float)
+0:148        'inU0' (in 3-component vector of uint)
+0:150      arc tangent (global 3-component vector of float)
 0:150        'inF0' (in 3-component vector of float)
-0:151      clamp (global 3-component vector of float)
+0:151      arc tangent (global 3-component vector of float)
 0:151        'inF0' (in 3-component vector of float)
 0:151        'inF1' (in 3-component vector of float)
-0:151        'inF2' (in 3-component vector of float)
-0:152      cosine (global 3-component vector of float)
+0:152      Ceiling (global 3-component vector of float)
 0:152        'inF0' (in 3-component vector of float)
-0:153      hyp. cosine (global 3-component vector of float)
+0:153      clamp (global 3-component vector of float)
 0:153        'inF0' (in 3-component vector of float)
+0:153        'inF1' (in 3-component vector of float)
+0:153        'inF2' (in 3-component vector of float)
+0:154      cosine (global 3-component vector of float)
+0:154        'inF0' (in 3-component vector of float)
+0:155      hyp. cosine (global 3-component vector of float)
+0:155        'inF0' (in 3-component vector of float)
 0:?       bitCount (global 3-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
 0:?           5 (const uint)
-0:155      cross-product (global 3-component vector of float)
-0:155        'inF0' (in 3-component vector of float)
-0:155        'inF1' (in 3-component vector of float)
-0:156      degrees (global 3-component vector of float)
-0:156        'inF0' (in 3-component vector of float)
-0:157      distance (global float)
+0:157      cross-product (global 3-component vector of float)
 0:157        'inF0' (in 3-component vector of float)
 0:157        'inF1' (in 3-component vector of float)
-0:158      dot-product (global float)
+0:158      degrees (global 3-component vector of float)
 0:158        'inF0' (in 3-component vector of float)
-0:158        'inF1' (in 3-component vector of float)
-0:162      exp (global 3-component vector of float)
-0:162        'inF0' (in 3-component vector of float)
-0:163      exp2 (global 3-component vector of float)
-0:163        'inF0' (in 3-component vector of float)
-0:164      face-forward (global 3-component vector of float)
+0:159      distance (global float)
+0:159        'inF0' (in 3-component vector of float)
+0:159        'inF1' (in 3-component vector of float)
+0:160      dot-product (global float)
+0:160        'inF0' (in 3-component vector of float)
+0:160        'inF1' (in 3-component vector of float)
+0:164      exp (global 3-component vector of float)
 0:164        'inF0' (in 3-component vector of float)
-0:164        'inF1' (in 3-component vector of float)
-0:164        'inF2' (in 3-component vector of float)
-0:165      findMSB (global int)
-0:165        Constant:
-0:165          7 (const int)
-0:166      findLSB (global int)
-0:166        Constant:
-0:166          7 (const int)
-0:167      Floor (global 3-component vector of float)
-0:167        'inF0' (in 3-component vector of float)
-0:169      mod (global 3-component vector of float)
+0:165      exp2 (global 3-component vector of float)
+0:165        'inF0' (in 3-component vector of float)
+0:166      face-forward (global 3-component vector of float)
+0:166        'inF0' (in 3-component vector of float)
+0:166        'inF1' (in 3-component vector of float)
+0:166        'inF2' (in 3-component vector of float)
+0:167      findMSB (global int)
+0:167        Constant:
+0:167          7 (const int)
+0:168      findLSB (global int)
+0:168        Constant:
+0:168          7 (const int)
+0:169      Floor (global 3-component vector of float)
 0:169        'inF0' (in 3-component vector of float)
-0:169        'inF1' (in 3-component vector of float)
-0:170      Fraction (global 3-component vector of float)
-0:170        'inF0' (in 3-component vector of float)
-0:171      frexp (global 3-component vector of float)
+0:171      mod (global 3-component vector of float)
 0:171        'inF0' (in 3-component vector of float)
 0:171        'inF1' (in 3-component vector of float)
-0:172      isinf (global 3-component vector of bool)
+0:172      Fraction (global 3-component vector of float)
 0:172        'inF0' (in 3-component vector of float)
-0:173      isnan (global 3-component vector of bool)
+0:173      frexp (global 3-component vector of float)
 0:173        'inF0' (in 3-component vector of float)
-0:174      ldexp (global 3-component vector of float)
+0:173        'inF1' (in 3-component vector of float)
+0:174      isinf (global 3-component vector of bool)
 0:174        'inF0' (in 3-component vector of float)
-0:174        'inF1' (in 3-component vector of float)
-0:175      length (global float)
+0:175      isnan (global 3-component vector of bool)
 0:175        'inF0' (in 3-component vector of float)
-0:176      log (global 3-component vector of float)
+0:176      ldexp (global 3-component vector of float)
 0:176        'inF0' (in 3-component vector of float)
-0:177      vector-scale (temp 3-component vector of float)
-0:177        log2 (temp 3-component vector of float)
-0:177          'inF0' (in 3-component vector of float)
-0:177        Constant:
-0:177          0.301030
-0:178      log2 (global 3-component vector of float)
+0:176        'inF1' (in 3-component vector of float)
+0:177      mix (global 3-component vector of float)
+0:177        'inF0' (in 3-component vector of float)
+0:177        'inF1' (in 3-component vector of float)
+0:177        'inF2' (in 3-component vector of float)
+0:178      length (global float)
 0:178        'inF0' (in 3-component vector of float)
-0:179      max (global 3-component vector of float)
+0:179      log (global 3-component vector of float)
 0:179        'inF0' (in 3-component vector of float)
-0:179        'inF1' (in 3-component vector of float)
-0:180      min (global 3-component vector of float)
-0:180        'inF0' (in 3-component vector of float)
-0:180        'inF1' (in 3-component vector of float)
-0:182      normalize (global 3-component vector of float)
+0:180      vector-scale (temp 3-component vector of float)
+0:180        log2 (temp 3-component vector of float)
+0:180          'inF0' (in 3-component vector of float)
+0:180        Constant:
+0:180          0.301030
+0:181      log2 (global 3-component vector of float)
+0:181        'inF0' (in 3-component vector of float)
+0:182      max (global 3-component vector of float)
 0:182        'inF0' (in 3-component vector of float)
-0:183      pow (global 3-component vector of float)
+0:182        'inF1' (in 3-component vector of float)
+0:183      min (global 3-component vector of float)
 0:183        'inF0' (in 3-component vector of float)
 0:183        'inF1' (in 3-component vector of float)
-0:184      radians (global 3-component vector of float)
-0:184        'inF0' (in 3-component vector of float)
-0:185      reflect (global 3-component vector of float)
+0:185      normalize (global 3-component vector of float)
 0:185        'inF0' (in 3-component vector of float)
-0:185        'inF1' (in 3-component vector of float)
-0:186      refract (global 3-component vector of float)
+0:186      pow (global 3-component vector of float)
 0:186        'inF0' (in 3-component vector of float)
 0:186        'inF1' (in 3-component vector of float)
-0:186        Constant:
-0:186          2.000000
+0:187      radians (global 3-component vector of float)
+0:187        'inF0' (in 3-component vector of float)
+0:188      reflect (global 3-component vector of float)
+0:188        'inF0' (in 3-component vector of float)
+0:188        'inF1' (in 3-component vector of float)
+0:189      refract (global 3-component vector of float)
+0:189        'inF0' (in 3-component vector of float)
+0:189        'inF1' (in 3-component vector of float)
+0:189        Constant:
+0:189          2.000000
 0:?       bitFieldReverse (global 3-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
 0:?           3 (const uint)
-0:188      roundEven (global 3-component vector of float)
-0:188        'inF0' (in 3-component vector of float)
-0:189      inverse sqrt (global 3-component vector of float)
-0:189        'inF0' (in 3-component vector of float)
-0:190      clamp (temp 3-component vector of float)
-0:190        'inF0' (in 3-component vector of float)
-0:190        Constant:
-0:190          0.000000
-0:190        Constant:
-0:190          1.000000
-0:191      Sign (global 3-component vector of float)
+0:191      roundEven (global 3-component vector of float)
 0:191        'inF0' (in 3-component vector of float)
-0:192      sine (global 3-component vector of float)
+0:192      inverse sqrt (global 3-component vector of float)
 0:192        'inF0' (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          'inF1' (in 3-component vector of float)
-0:193          sine (temp 3-component vector of float)
-0:193            'inF0' (in 3-component vector of float)
-0:193        move second child to first child (temp 3-component vector of float)
-0:193          'inF2' (in 3-component vector of float)
-0:193          cosine (temp 3-component vector of float)
-0:193            'inF0' (in 3-component vector of float)
-0:194      hyp. sine (global 3-component vector of float)
+0:193      clamp (temp 3-component vector of float)
+0:193        'inF0' (in 3-component vector of float)
+0:193        Constant:
+0:193          0.000000
+0:193        Constant:
+0:193          1.000000
+0:194      Sign (global 3-component vector of float)
 0:194        'inF0' (in 3-component vector of float)
-0:195      smoothstep (global 3-component vector of float)
+0:195      sine (global 3-component vector of float)
 0:195        'inF0' (in 3-component vector of float)
-0:195        'inF1' (in 3-component vector of float)
-0:195        'inF2' (in 3-component vector of float)
-0:196      sqrt (global 3-component vector of float)
-0:196        'inF0' (in 3-component vector of float)
-0:197      step (global 3-component vector of float)
+0:196      Sequence
+0:196        move second child to first child (temp 3-component vector of float)
+0:196          'inF1' (in 3-component vector of float)
+0:196          sine (temp 3-component vector of float)
+0:196            'inF0' (in 3-component vector of float)
+0:196        move second child to first child (temp 3-component vector of float)
+0:196          'inF2' (in 3-component vector of float)
+0:196          cosine (temp 3-component vector of float)
+0:196            'inF0' (in 3-component vector of float)
+0:197      hyp. sine (global 3-component vector of float)
 0:197        'inF0' (in 3-component vector of float)
-0:197        'inF1' (in 3-component vector of float)
-0:198      tangent (global 3-component vector of float)
+0:198      smoothstep (global 3-component vector of float)
 0:198        'inF0' (in 3-component vector of float)
-0:199      hyp. tangent (global 3-component vector of float)
+0:198        'inF1' (in 3-component vector of float)
+0:198        'inF2' (in 3-component vector of float)
+0:199      sqrt (global 3-component vector of float)
 0:199        'inF0' (in 3-component vector of float)
-0:201      trunc (global 3-component vector of float)
+0:200      step (global 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      tangent (global 3-component vector of float)
 0:201        'inF0' (in 3-component vector of float)
-0:204      Branch: Return with expression
+0:202      hyp. tangent (global 3-component vector of float)
+0:202        'inF0' (in 3-component vector of float)
+0:204      trunc (global 3-component vector of float)
+0:204        'inF0' (in 3-component vector of float)
+0:207      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:330  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
-0:208    Function Parameters: 
-0:208      'inF0' (in 4-component vector of float)
-0:208      'inF1' (in 4-component vector of float)
-0:208      'inF2' (in 4-component vector of float)
-0:208      'inU0' (in 4-component vector of uint)
-0:208      'inU1' (in 4-component vector of uint)
+0:335  Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
+0:211    Function Parameters: 
+0:211      'inF0' (in 4-component vector of float)
+0:211      'inF1' (in 4-component vector of float)
+0:211      'inF2' (in 4-component vector of float)
+0:211      'inU0' (in 4-component vector of uint)
+0:211      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:209      all (global bool)
-0:209        'inF0' (in 4-component vector of float)
-0:210      Absolute value (global 4-component vector of float)
-0:210        'inF0' (in 4-component vector of float)
-0:211      arc cosine (global 4-component vector of float)
-0:211        'inF0' (in 4-component vector of float)
-0:212      any (global bool)
+0:212      all (global bool)
 0:212        'inF0' (in 4-component vector of float)
-0:213      arc sine (global 4-component vector of float)
+0:213      Absolute value (global 4-component vector of float)
 0:213        'inF0' (in 4-component vector of float)
-0:214      floatBitsToInt (global 4-component vector of int)
+0:214      arc cosine (global 4-component vector of float)
 0:214        'inF0' (in 4-component vector of float)
-0:215      floatBitsToUint (global 4-component vector of uint)
+0:215      any (global bool)
 0:215        'inF0' (in 4-component vector of float)
-0:216      intBitsToFloat (global 4-component vector of float)
-0:216        'inU0' (in 4-component vector of uint)
-0:218      arc tangent (global 4-component vector of float)
+0:216      arc sine (global 4-component vector of float)
+0:216        'inF0' (in 4-component vector of float)
+0:217      floatBitsToInt (global 4-component vector of int)
+0:217        'inF0' (in 4-component vector of float)
+0:218      floatBitsToUint (global 4-component vector of uint)
 0:218        'inF0' (in 4-component vector of float)
-0:219      arc tangent (global 4-component vector of float)
-0:219        'inF0' (in 4-component vector of float)
-0:219        'inF1' (in 4-component vector of float)
-0:220      Ceiling (global 4-component vector of float)
-0:220        'inF0' (in 4-component vector of float)
-0:221      clamp (global 4-component vector of float)
+0:219      intBitsToFloat (global 4-component vector of float)
+0:219        'inU0' (in 4-component vector of uint)
+0:221      arc tangent (global 4-component vector of float)
 0:221        'inF0' (in 4-component vector of float)
-0:221        'inF1' (in 4-component vector of float)
-0:221        'inF2' (in 4-component vector of float)
-0:222      cosine (global 4-component vector of float)
+0:222      arc tangent (global 4-component vector of float)
 0:222        'inF0' (in 4-component vector of float)
-0:223      hyp. cosine (global 4-component vector of float)
+0:222        'inF1' (in 4-component vector of float)
+0:223      Ceiling (global 4-component vector of float)
 0:223        'inF0' (in 4-component vector of float)
+0:224      clamp (global 4-component vector of float)
+0:224        'inF0' (in 4-component vector of float)
+0:224        'inF1' (in 4-component vector of float)
+0:224        'inF2' (in 4-component vector of float)
+0:225      cosine (global 4-component vector of float)
+0:225        'inF0' (in 4-component vector of float)
+0:226      hyp. cosine (global 4-component vector of float)
+0:226        'inF0' (in 4-component vector of float)
 0:?       bitCount (global 4-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
 0:?           5 (const uint)
 0:?           2 (const uint)
-0:225      degrees (global 4-component vector of float)
-0:225        'inF0' (in 4-component vector of float)
-0:226      distance (global float)
-0:226        'inF0' (in 4-component vector of float)
-0:226        'inF1' (in 4-component vector of float)
-0:227      dot-product (global float)
-0:227        'inF0' (in 4-component vector of float)
-0:227        'inF1' (in 4-component vector of float)
-0:228      Construct vec4 (temp 4-component vector of float)
-0:228        Constant:
-0:228          1.000000
-0:228        component-wise multiply (temp float)
-0:228          direct index (temp float)
-0:228            'inF0' (in 4-component vector of float)
-0:228            Constant:
-0:228              1 (const int)
-0:228          direct index (temp float)
-0:228            'inF1' (in 4-component vector of float)
-0:228            Constant:
-0:228              1 (const int)
-0:228        direct index (temp float)
-0:228          'inF0' (in 4-component vector of float)
-0:228          Constant:
-0:228            2 (const int)
-0:228        direct index (temp float)
-0:228          'inF1' (in 4-component vector of float)
-0:228          Constant:
-0:228            3 (const int)
-0:232      exp (global 4-component vector of float)
-0:232        'inF0' (in 4-component vector of float)
-0:233      exp2 (global 4-component vector of float)
-0:233        'inF0' (in 4-component vector of float)
-0:234      face-forward (global 4-component vector of float)
-0:234        'inF0' (in 4-component vector of float)
-0:234        'inF1' (in 4-component vector of float)
-0:234        'inF2' (in 4-component vector of float)
-0:235      findMSB (global int)
-0:235        Constant:
-0:235          7 (const int)
-0:236      findLSB (global int)
-0:236        Constant:
-0:236          7 (const int)
-0:237      Floor (global 4-component vector of float)
+0:228      degrees (global 4-component vector of float)
+0:228        'inF0' (in 4-component vector of float)
+0:229      distance (global float)
+0:229        'inF0' (in 4-component vector of float)
+0:229        'inF1' (in 4-component vector of float)
+0:230      dot-product (global float)
+0:230        'inF0' (in 4-component vector of float)
+0:230        'inF1' (in 4-component vector of float)
+0:231      Construct vec4 (temp 4-component vector of float)
+0:231        Constant:
+0:231          1.000000
+0:231        component-wise multiply (temp float)
+0:231          direct index (temp float)
+0:231            'inF0' (in 4-component vector of float)
+0:231            Constant:
+0:231              1 (const int)
+0:231          direct index (temp float)
+0:231            'inF1' (in 4-component vector of float)
+0:231            Constant:
+0:231              1 (const int)
+0:231        direct index (temp float)
+0:231          'inF0' (in 4-component vector of float)
+0:231          Constant:
+0:231            2 (const int)
+0:231        direct index (temp float)
+0:231          'inF1' (in 4-component vector of float)
+0:231          Constant:
+0:231            3 (const int)
+0:235      exp (global 4-component vector of float)
+0:235        'inF0' (in 4-component vector of float)
+0:236      exp2 (global 4-component vector of float)
+0:236        'inF0' (in 4-component vector of float)
+0:237      face-forward (global 4-component vector of float)
 0:237        'inF0' (in 4-component vector of float)
-0:239      mod (global 4-component vector of float)
-0:239        'inF0' (in 4-component vector of float)
-0:239        'inF1' (in 4-component vector of float)
-0:240      Fraction (global 4-component vector of float)
+0:237        'inF1' (in 4-component vector of float)
+0:237        'inF2' (in 4-component vector of float)
+0:238      findMSB (global int)
+0:238        Constant:
+0:238          7 (const int)
+0:239      findLSB (global int)
+0:239        Constant:
+0:239          7 (const int)
+0:240      Floor (global 4-component vector of float)
 0:240        'inF0' (in 4-component vector of float)
-0:241      frexp (global 4-component vector of float)
-0:241        'inF0' (in 4-component vector of float)
-0:241        'inF1' (in 4-component vector of float)
-0:242      isinf (global 4-component vector of bool)
+0:242      mod (global 4-component vector of float)
 0:242        'inF0' (in 4-component vector of float)
-0:243      isnan (global 4-component vector of bool)
+0:242        'inF1' (in 4-component vector of float)
+0:243      Fraction (global 4-component vector of float)
 0:243        'inF0' (in 4-component vector of float)
-0:244      ldexp (global 4-component vector of float)
+0:244      frexp (global 4-component vector of float)
 0:244        'inF0' (in 4-component vector of float)
 0:244        'inF1' (in 4-component vector of float)
-0:245      length (global float)
+0:245      isinf (global 4-component vector of bool)
 0:245        'inF0' (in 4-component vector of float)
-0:246      log (global 4-component vector of float)
+0:246      isnan (global 4-component vector of bool)
 0:246        'inF0' (in 4-component vector of float)
-0:247      vector-scale (temp 4-component vector of float)
-0:247        log2 (temp 4-component vector of float)
-0:247          'inF0' (in 4-component vector of float)
-0:247        Constant:
-0:247          0.301030
-0:248      log2 (global 4-component vector of float)
+0:247      ldexp (global 4-component vector of float)
+0:247        'inF0' (in 4-component vector of float)
+0:247        'inF1' (in 4-component vector of float)
+0:248      mix (global 4-component vector of float)
 0:248        'inF0' (in 4-component vector of float)
-0:249      max (global 4-component vector of float)
+0:248        'inF1' (in 4-component vector of float)
+0:248        'inF2' (in 4-component vector of float)
+0:249      length (global float)
 0:249        'inF0' (in 4-component vector of float)
-0:249        'inF1' (in 4-component vector of float)
-0:250      min (global 4-component vector of float)
+0:250      log (global 4-component vector of float)
 0:250        'inF0' (in 4-component vector of float)
-0:250        'inF1' (in 4-component vector of float)
-0:252      normalize (global 4-component vector of float)
+0:251      vector-scale (temp 4-component vector of float)
+0:251        log2 (temp 4-component vector of float)
+0:251          'inF0' (in 4-component vector of float)
+0:251        Constant:
+0:251          0.301030
+0:252      log2 (global 4-component vector of float)
 0:252        'inF0' (in 4-component vector of float)
-0:253      pow (global 4-component vector of float)
+0:253      max (global 4-component vector of float)
 0:253        'inF0' (in 4-component vector of float)
 0:253        'inF1' (in 4-component vector of float)
-0:254      radians (global 4-component vector of float)
+0:254      min (global 4-component vector of float)
 0:254        'inF0' (in 4-component vector of float)
-0:255      reflect (global 4-component vector of float)
-0:255        'inF0' (in 4-component vector of float)
-0:255        'inF1' (in 4-component vector of float)
-0:256      refract (global 4-component vector of float)
+0:254        'inF1' (in 4-component vector of float)
+0:256      normalize (global 4-component vector of float)
 0:256        'inF0' (in 4-component vector of float)
-0:256        'inF1' (in 4-component vector of float)
-0:256        Constant:
-0:256          2.000000
+0:257      pow (global 4-component vector of float)
+0:257        'inF0' (in 4-component vector of float)
+0:257        'inF1' (in 4-component vector of float)
+0:258      radians (global 4-component vector of float)
+0:258        'inF0' (in 4-component vector of float)
+0:259      reflect (global 4-component vector of float)
+0:259        'inF0' (in 4-component vector of float)
+0:259        'inF1' (in 4-component vector of float)
+0:260      refract (global 4-component vector of float)
+0:260        'inF0' (in 4-component vector of float)
+0:260        'inF1' (in 4-component vector of float)
+0:260        Constant:
+0:260          2.000000
 0:?       bitFieldReverse (global 4-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
 0:?           3 (const uint)
 0:?           4 (const uint)
-0:258      roundEven (global 4-component vector of float)
-0:258        'inF0' (in 4-component vector of float)
-0:259      inverse sqrt (global 4-component vector of float)
-0:259        'inF0' (in 4-component vector of float)
-0:260      clamp (temp 4-component vector of float)
-0:260        'inF0' (in 4-component vector of float)
-0:260        Constant:
-0:260          0.000000
-0:260        Constant:
-0:260          1.000000
-0:261      Sign (global 4-component vector of float)
-0:261        'inF0' (in 4-component vector of float)
-0:262      sine (global 4-component vector of float)
+0:262      roundEven (global 4-component vector of float)
 0:262        'inF0' (in 4-component vector of float)
-0:263      Sequence
-0:263        move second child to first child (temp 4-component vector of float)
-0:263          'inF1' (in 4-component vector of float)
-0:263          sine (temp 4-component vector of float)
-0:263            'inF0' (in 4-component vector of float)
-0:263        move second child to first child (temp 4-component vector of float)
-0:263          'inF2' (in 4-component vector of float)
-0:263          cosine (temp 4-component vector of float)
-0:263            'inF0' (in 4-component vector of float)
-0:264      hyp. sine (global 4-component vector of float)
+0:263      inverse sqrt (global 4-component vector of float)
+0:263        'inF0' (in 4-component vector of float)
+0:264      clamp (temp 4-component vector of float)
 0:264        'inF0' (in 4-component vector of float)
-0:265      smoothstep (global 4-component vector of float)
+0:264        Constant:
+0:264          0.000000
+0:264        Constant:
+0:264          1.000000
+0:265      Sign (global 4-component vector of float)
 0:265        'inF0' (in 4-component vector of float)
-0:265        'inF1' (in 4-component vector of float)
-0:265        'inF2' (in 4-component vector of float)
-0:266      sqrt (global 4-component vector of float)
+0:266      sine (global 4-component vector of float)
 0:266        'inF0' (in 4-component vector of float)
-0:267      step (global 4-component vector of float)
-0:267        'inF0' (in 4-component vector of float)
-0:267        'inF1' (in 4-component vector of float)
-0:268      tangent (global 4-component vector of float)
+0:267      Sequence
+0:267        move second child to first child (temp 4-component vector of float)
+0:267          'inF1' (in 4-component vector of float)
+0:267          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 4-component vector of float)
+0:267          'inF2' (in 4-component vector of float)
+0:267          cosine (temp 4-component vector of float)
+0:267            'inF0' (in 4-component vector of float)
+0:268      hyp. sine (global 4-component vector of float)
 0:268        'inF0' (in 4-component vector of float)
-0:269      hyp. tangent (global 4-component vector of float)
+0:269      smoothstep (global 4-component vector of float)
 0:269        'inF0' (in 4-component vector of float)
-0:271      trunc (global 4-component vector of float)
+0:269        'inF1' (in 4-component vector of float)
+0:269        'inF2' (in 4-component vector of float)
+0:270      sqrt (global 4-component vector of float)
+0:270        'inF0' (in 4-component vector of float)
+0:271      step (global 4-component vector of float)
 0:271        'inF0' (in 4-component vector of float)
-0:274      Branch: Return with expression
+0:271        'inF1' (in 4-component vector of float)
+0:272      tangent (global 4-component vector of float)
+0:272        'inF0' (in 4-component vector of float)
+0:273      hyp. tangent (global 4-component vector of float)
+0:273        'inF0' (in 4-component vector of float)
+0:275      trunc (global 4-component vector of float)
+0:275        'inF0' (in 4-component vector of float)
+0:278      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:339  Function Definition: VertexShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float)
-0:331    Function Parameters: 
-0:331      'inF0' (in 2X2 matrix of float)
-0:331      'inF1' (in 2X2 matrix of float)
-0:331      'inF2' (in 2X2 matrix of float)
+0:344  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:336    Function Parameters: 
+0:336      'inF0' (in 2X2 matrix of float)
+0:336      'inF1' (in 2X2 matrix of float)
+0:336      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:333      all (global bool)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      Absolute value (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      arc cosine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      any (global bool)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      arc sine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      arc tangent (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      arc tangent (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      Ceiling (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      clamp (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333        'inF2' (in 2X2 matrix of float)
-0:333      cosine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      hyp. cosine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      degrees (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      determinant (global float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      exp (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      exp2 (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      findMSB (global int)
-0:333        Constant:
-0:333          7 (const int)
-0:333      findLSB (global int)
-0:333        Constant:
-0:333          7 (const int)
-0:333      Floor (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      mod (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      Fraction (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      frexp (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      ldexp (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      log (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      matrix-scale (temp 2X2 matrix of float)
-0:333        log2 (temp 2X2 matrix of float)
-0:333          'inF0' (in 2X2 matrix of float)
-0:333        Constant:
-0:333          0.301030
-0:333      log2 (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      max (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      min (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      pow (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      radians (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      roundEven (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      inverse sqrt (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      clamp (temp 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        Constant:
-0:333          0.000000
-0:333        Constant:
-0:333          1.000000
-0:333      Sign (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      sine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      Sequence
-0:333        move second child to first child (temp 2X2 matrix of float)
-0:333          'inF1' (in 2X2 matrix of float)
-0:333          sine (temp 2X2 matrix of float)
-0:333            'inF0' (in 2X2 matrix of float)
-0:333        move second child to first child (temp 2X2 matrix of float)
-0:333          'inF2' (in 2X2 matrix of float)
-0:333          cosine (temp 2X2 matrix of float)
-0:333            'inF0' (in 2X2 matrix of float)
-0:333      hyp. sine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      smoothstep (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333        'inF2' (in 2X2 matrix of float)
-0:333      sqrt (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      step (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      tangent (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      hyp. tangent (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      transpose (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      trunc (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:336      Branch: Return with expression
+0:338      all (global bool)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      Absolute value (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      arc cosine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      any (global bool)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      arc sine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      arc tangent (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      arc tangent (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      Ceiling (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      clamp (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338        'inF2' (in 2X2 matrix of float)
+0:338      cosine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      hyp. cosine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      degrees (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      determinant (global float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      exp (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      exp2 (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      findMSB (global int)
+0:338        Constant:
+0:338          7 (const int)
+0:338      findLSB (global int)
+0:338        Constant:
+0:338          7 (const int)
+0:338      Floor (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      mod (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      Fraction (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      frexp (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      ldexp (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      mix (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338        'inF2' (in 2X2 matrix of float)
+0:338      log (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      matrix-scale (temp 2X2 matrix of float)
+0:338        log2 (temp 2X2 matrix of float)
+0:338          'inF0' (in 2X2 matrix of float)
+0:338        Constant:
+0:338          0.301030
+0:338      log2 (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      max (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      min (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      pow (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      radians (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      roundEven (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      inverse sqrt (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      clamp (temp 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        Constant:
+0:338          0.000000
+0:338        Constant:
+0:338          1.000000
+0:338      Sign (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      sine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      Sequence
+0:338        move second child to first child (temp 2X2 matrix of float)
+0:338          'inF1' (in 2X2 matrix of float)
+0:338          sine (temp 2X2 matrix of float)
+0:338            'inF0' (in 2X2 matrix of float)
+0:338        move second child to first child (temp 2X2 matrix of float)
+0:338          'inF2' (in 2X2 matrix of float)
+0:338          cosine (temp 2X2 matrix of float)
+0:338            'inF0' (in 2X2 matrix of float)
+0:338      hyp. sine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      smoothstep (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338        'inF2' (in 2X2 matrix of float)
+0:338      sqrt (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      step (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      tangent (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      hyp. tangent (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      transpose (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      trunc (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:341      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:348  Function Definition: VertexShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float)
-0:340    Function Parameters: 
-0:340      'inF0' (in 3X3 matrix of float)
-0:340      'inF1' (in 3X3 matrix of float)
-0:340      'inF2' (in 3X3 matrix of float)
+0:353  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:345    Function Parameters: 
+0:345      'inF0' (in 3X3 matrix of float)
+0:345      'inF1' (in 3X3 matrix of float)
+0:345      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:342      all (global bool)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      Absolute value (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      arc cosine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      any (global bool)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      arc sine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      arc tangent (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      arc tangent (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      Ceiling (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      clamp (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342        'inF2' (in 3X3 matrix of float)
-0:342      cosine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      hyp. cosine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      degrees (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      determinant (global float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      exp (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      exp2 (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      findMSB (global int)
-0:342        Constant:
-0:342          7 (const int)
-0:342      findLSB (global int)
-0:342        Constant:
-0:342          7 (const int)
-0:342      Floor (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      mod (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      Fraction (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      frexp (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      ldexp (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      log (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      matrix-scale (temp 3X3 matrix of float)
-0:342        log2 (temp 3X3 matrix of float)
-0:342          'inF0' (in 3X3 matrix of float)
-0:342        Constant:
-0:342          0.301030
-0:342      log2 (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      max (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      min (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      pow (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      radians (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      roundEven (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      inverse sqrt (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      clamp (temp 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        Constant:
-0:342          0.000000
-0:342        Constant:
-0:342          1.000000
-0:342      Sign (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      sine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      Sequence
-0:342        move second child to first child (temp 3X3 matrix of float)
-0:342          'inF1' (in 3X3 matrix of float)
-0:342          sine (temp 3X3 matrix of float)
-0:342            'inF0' (in 3X3 matrix of float)
-0:342        move second child to first child (temp 3X3 matrix of float)
-0:342          'inF2' (in 3X3 matrix of float)
-0:342          cosine (temp 3X3 matrix of float)
-0:342            'inF0' (in 3X3 matrix of float)
-0:342      hyp. sine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      smoothstep (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342        'inF2' (in 3X3 matrix of float)
-0:342      sqrt (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      step (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      tangent (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      hyp. tangent (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      transpose (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      trunc (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:345      Branch: Return with expression
+0:347      all (global bool)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      Absolute value (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      arc cosine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      any (global bool)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      arc sine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      arc tangent (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      arc tangent (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      Ceiling (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      clamp (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347        'inF2' (in 3X3 matrix of float)
+0:347      cosine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      hyp. cosine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      degrees (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      determinant (global float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      exp (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      exp2 (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      findMSB (global int)
+0:347        Constant:
+0:347          7 (const int)
+0:347      findLSB (global int)
+0:347        Constant:
+0:347          7 (const int)
+0:347      Floor (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      mod (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      Fraction (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      frexp (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      ldexp (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      mix (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347        'inF2' (in 3X3 matrix of float)
+0:347      log (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      matrix-scale (temp 3X3 matrix of float)
+0:347        log2 (temp 3X3 matrix of float)
+0:347          'inF0' (in 3X3 matrix of float)
+0:347        Constant:
+0:347          0.301030
+0:347      log2 (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      max (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      min (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      pow (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      radians (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      roundEven (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      inverse sqrt (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      clamp (temp 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        Constant:
+0:347          0.000000
+0:347        Constant:
+0:347          1.000000
+0:347      Sign (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      sine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      Sequence
+0:347        move second child to first child (temp 3X3 matrix of float)
+0:347          'inF1' (in 3X3 matrix of float)
+0:347          sine (temp 3X3 matrix of float)
+0:347            'inF0' (in 3X3 matrix of float)
+0:347        move second child to first child (temp 3X3 matrix of float)
+0:347          'inF2' (in 3X3 matrix of float)
+0:347          cosine (temp 3X3 matrix of float)
+0:347            'inF0' (in 3X3 matrix of float)
+0:347      hyp. sine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      smoothstep (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347        'inF2' (in 3X3 matrix of float)
+0:347      sqrt (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      step (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      tangent (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      hyp. tangent (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      transpose (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      trunc (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:350      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -922,127 +946,131 @@ Shader version: 450
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:369  Function Definition: VertexShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float)
-0:349    Function Parameters: 
-0:349      'inF0' (in 4X4 matrix of float)
-0:349      'inF1' (in 4X4 matrix of float)
-0:349      'inF2' (in 4X4 matrix of float)
+0:374  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:354    Function Parameters: 
+0:354      'inF0' (in 4X4 matrix of float)
+0:354      'inF1' (in 4X4 matrix of float)
+0:354      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:351      all (global bool)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      Absolute value (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      arc cosine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      any (global bool)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      arc sine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      arc tangent (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      arc tangent (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      Ceiling (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      clamp (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351        'inF2' (in 4X4 matrix of float)
-0:351      cosine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      hyp. cosine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      degrees (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      determinant (global float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      exp (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      exp2 (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      findMSB (global int)
-0:351        Constant:
-0:351          7 (const int)
-0:351      findLSB (global int)
-0:351        Constant:
-0:351          7 (const int)
-0:351      Floor (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      mod (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      Fraction (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      frexp (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      ldexp (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      log (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      matrix-scale (temp 4X4 matrix of float)
-0:351        log2 (temp 4X4 matrix of float)
-0:351          'inF0' (in 4X4 matrix of float)
-0:351        Constant:
-0:351          0.301030
-0:351      log2 (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      max (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      min (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      pow (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      radians (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      roundEven (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      inverse sqrt (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      clamp (temp 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        Constant:
-0:351          0.000000
-0:351        Constant:
-0:351          1.000000
-0:351      Sign (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      sine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      Sequence
-0:351        move second child to first child (temp 4X4 matrix of float)
-0:351          'inF1' (in 4X4 matrix of float)
-0:351          sine (temp 4X4 matrix of float)
-0:351            'inF0' (in 4X4 matrix of float)
-0:351        move second child to first child (temp 4X4 matrix of float)
-0:351          'inF2' (in 4X4 matrix of float)
-0:351          cosine (temp 4X4 matrix of float)
-0:351            'inF0' (in 4X4 matrix of float)
-0:351      hyp. sine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      smoothstep (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351        'inF2' (in 4X4 matrix of float)
-0:351      sqrt (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      step (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      tangent (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      hyp. tangent (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      transpose (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      trunc (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:354      Branch: Return with expression
+0:356      all (global bool)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      Absolute value (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      arc cosine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      any (global bool)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      arc sine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      arc tangent (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      arc tangent (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      Ceiling (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      clamp (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356        'inF2' (in 4X4 matrix of float)
+0:356      cosine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      hyp. cosine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      degrees (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      determinant (global float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      exp (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      exp2 (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      findMSB (global int)
+0:356        Constant:
+0:356          7 (const int)
+0:356      findLSB (global int)
+0:356        Constant:
+0:356          7 (const int)
+0:356      Floor (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      mod (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      Fraction (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      frexp (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      ldexp (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      mix (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356        'inF2' (in 4X4 matrix of float)
+0:356      log (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      matrix-scale (temp 4X4 matrix of float)
+0:356        log2 (temp 4X4 matrix of float)
+0:356          'inF0' (in 4X4 matrix of float)
+0:356        Constant:
+0:356          0.301030
+0:356      log2 (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      max (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      min (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      pow (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      radians (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      roundEven (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      inverse sqrt (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      clamp (temp 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        Constant:
+0:356          0.000000
+0:356        Constant:
+0:356          1.000000
+0:356      Sign (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      sine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      Sequence
+0:356        move second child to first child (temp 4X4 matrix of float)
+0:356          'inF1' (in 4X4 matrix of float)
+0:356          sine (temp 4X4 matrix of float)
+0:356            'inF0' (in 4X4 matrix of float)
+0:356        move second child to first child (temp 4X4 matrix of float)
+0:356          'inF2' (in 4X4 matrix of float)
+0:356          cosine (temp 4X4 matrix of float)
+0:356            'inF0' (in 4X4 matrix of float)
+0:356      hyp. sine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      smoothstep (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356        'inF2' (in 4X4 matrix of float)
+0:356      sqrt (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      step (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      tangent (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      hyp. tangent (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      transpose (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      trunc (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:359      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -1060,168 +1088,309 @@ Shader version: 450
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:376  Function Definition: TestGenMul(f1;f1;vf2;vf2;mf22;mf22; (temp void)
-0:372    Function Parameters: 
-0:372      'inF0' (in float)
-0:372      'inF1' (in float)
-0:372      'inFV0' (in 2-component vector of float)
-0:372      'inFV1' (in 2-component vector of float)
-0:372      'inFM0' (in 2X2 matrix of float)
-0:372      'inFM1' (in 2X2 matrix of float)
+0:381  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
+0:377    Function Parameters: 
+0:377      'inF0' (in float)
+0:377      'inF1' (in float)
+0:377      'inFV0' (in 2-component vector of float)
+0:377      'inFV1' (in 2-component vector of float)
+0:377      'inFM0' (in 2X2 matrix of float)
+0:377      'inFM1' (in 2X2 matrix of float)
 0:?     Sequence
-0:373      move second child to first child (temp float)
-0:373        'r0' (temp float)
-0:373        component-wise multiply (temp float)
-0:373          'inF0' (in float)
-0:373          'inF1' (in float)
-0:373      move second child to first child (temp 2-component vector of float)
-0:373        'r1' (temp 2-component vector of float)
-0:373        vector-scale (temp 2-component vector of float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373          'inF0' (in float)
-0:373      move second child to first child (temp 2-component vector of float)
-0:373        'r2' (temp 2-component vector of float)
-0:373        vector-scale (temp 2-component vector of float)
-0:373          'inF0' (in float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373      move second child to first child (temp float)
-0:373        'r3' (temp float)
-0:373        dot-product (global float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373          'inFV1' (in 2-component vector of float)
-0:373      move second child to first child (temp 2-component vector of float)
-0:373        'r4' (temp 2-component vector of float)
-0:373        matrix-times-vector (temp 2-component vector of float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373      move second child to first child (temp 2-component vector of float)
-0:373        'r5' (temp 2-component vector of float)
-0:373        vector-times-matrix (temp 2-component vector of float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373      move second child to first child (temp 2X2 matrix of float)
-0:373        'r6' (temp 2X2 matrix of float)
-0:373        matrix-scale (temp 2X2 matrix of float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373          'inF0' (in float)
-0:373      move second child to first child (temp 2X2 matrix of float)
-0:373        'r7' (temp 2X2 matrix of float)
-0:373        matrix-scale (temp 2X2 matrix of float)
-0:373          'inF0' (in float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373      move second child to first child (temp 2X2 matrix of float)
-0:373        'r8' (temp 2X2 matrix of float)
-0:373        matrix-multiply (temp 2X2 matrix of float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373          'inFM1' (in 2X2 matrix of float)
-0:383  Function Definition: TestGenMul(f1;f1;vf3;vf3;mf33;mf33; (temp void)
-0:379    Function Parameters: 
-0:379      'inF0' (in float)
-0:379      'inF1' (in float)
-0:379      'inFV0' (in 3-component vector of float)
-0:379      'inFV1' (in 3-component vector of float)
-0:379      'inFM0' (in 3X3 matrix of float)
-0:379      'inFM1' (in 3X3 matrix of float)
+0:378      Sequence
+0:378        move second child to first child (temp float)
+0:378          'r0' (temp float)
+0:378          component-wise multiply (temp float)
+0:378            'inF0' (in float)
+0:378            'inF1' (in float)
+0:378      Sequence
+0:378        move second child to first child (temp 2-component vector of float)
+0:378          'r1' (temp 2-component vector of float)
+0:378          vector-scale (temp 2-component vector of float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378            'inF0' (in float)
+0:378      Sequence
+0:378        move second child to first child (temp 2-component vector of float)
+0:378          'r2' (temp 2-component vector of float)
+0:378          vector-scale (temp 2-component vector of float)
+0:378            'inF0' (in float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378      Sequence
+0:378        move second child to first child (temp float)
+0:378          'r3' (temp float)
+0:378          dot-product (global float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378            'inFV1' (in 2-component vector of float)
+0:378      Sequence
+0:378        move second child to first child (temp 2-component vector of float)
+0:378          'r4' (temp 2-component vector of float)
+0:378          matrix-times-vector (temp 2-component vector of float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378      Sequence
+0:378        move second child to first child (temp 2-component vector of float)
+0:378          'r5' (temp 2-component vector of float)
+0:378          vector-times-matrix (temp 2-component vector of float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378      Sequence
+0:378        move second child to first child (temp 2X2 matrix of float)
+0:378          'r6' (temp 2X2 matrix of float)
+0:378          matrix-scale (temp 2X2 matrix of float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378            'inF0' (in float)
+0:378      Sequence
+0:378        move second child to first child (temp 2X2 matrix of float)
+0:378          'r7' (temp 2X2 matrix of float)
+0:378          matrix-scale (temp 2X2 matrix of float)
+0:378            'inF0' (in float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378      Sequence
+0:378        move second child to first child (temp 2X2 matrix of float)
+0:378          'r8' (temp 2X2 matrix of float)
+0:378          matrix-multiply (temp 2X2 matrix of float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378            'inFM1' (in 2X2 matrix of float)
+0:388  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
+0:384    Function Parameters: 
+0:384      'inF0' (in float)
+0:384      'inF1' (in float)
+0:384      'inFV0' (in 3-component vector of float)
+0:384      'inFV1' (in 3-component vector of float)
+0:384      'inFM0' (in 3X3 matrix of float)
+0:384      'inFM1' (in 3X3 matrix of float)
 0:?     Sequence
-0:380      move second child to first child (temp float)
-0:380        'r0' (temp float)
-0:380        component-wise multiply (temp float)
-0:380          'inF0' (in float)
-0:380          'inF1' (in float)
-0:380      move second child to first child (temp 3-component vector of float)
-0:380        'r1' (temp 3-component vector of float)
-0:380        vector-scale (temp 3-component vector of float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380          'inF0' (in float)
-0:380      move second child to first child (temp 3-component vector of float)
-0:380        'r2' (temp 3-component vector of float)
-0:380        vector-scale (temp 3-component vector of float)
-0:380          'inF0' (in float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380      move second child to first child (temp float)
-0:380        'r3' (temp float)
-0:380        dot-product (global float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380          'inFV1' (in 3-component vector of float)
-0:380      move second child to first child (temp 3-component vector of float)
-0:380        'r4' (temp 3-component vector of float)
-0:380        matrix-times-vector (temp 3-component vector of float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380      move second child to first child (temp 3-component vector of float)
-0:380        'r5' (temp 3-component vector of float)
-0:380        vector-times-matrix (temp 3-component vector of float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380      move second child to first child (temp 3X3 matrix of float)
-0:380        'r6' (temp 3X3 matrix of float)
-0:380        matrix-scale (temp 3X3 matrix of float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380          'inF0' (in float)
-0:380      move second child to first child (temp 3X3 matrix of float)
-0:380        'r7' (temp 3X3 matrix of float)
-0:380        matrix-scale (temp 3X3 matrix of float)
-0:380          'inF0' (in float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380      move second child to first child (temp 3X3 matrix of float)
-0:380        'r8' (temp 3X3 matrix of float)
-0:380        matrix-multiply (temp 3X3 matrix of float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380          'inFM1' (in 3X3 matrix of float)
-0:389  Function Definition: TestGenMul(f1;f1;vf4;vf4;mf44;mf44; (temp void)
-0:386    Function Parameters: 
-0:386      'inF0' (in float)
-0:386      'inF1' (in float)
-0:386      'inFV0' (in 4-component vector of float)
-0:386      'inFV1' (in 4-component vector of float)
-0:386      'inFM0' (in 4X4 matrix of float)
-0:386      'inFM1' (in 4X4 matrix of float)
+0:385      Sequence
+0:385        move second child to first child (temp float)
+0:385          'r0' (temp float)
+0:385          component-wise multiply (temp float)
+0:385            'inF0' (in float)
+0:385            'inF1' (in float)
+0:385      Sequence
+0:385        move second child to first child (temp 3-component vector of float)
+0:385          'r1' (temp 3-component vector of float)
+0:385          vector-scale (temp 3-component vector of float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385            'inF0' (in float)
+0:385      Sequence
+0:385        move second child to first child (temp 3-component vector of float)
+0:385          'r2' (temp 3-component vector of float)
+0:385          vector-scale (temp 3-component vector of float)
+0:385            'inF0' (in float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385      Sequence
+0:385        move second child to first child (temp float)
+0:385          'r3' (temp float)
+0:385          dot-product (global float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385            'inFV1' (in 3-component vector of float)
+0:385      Sequence
+0:385        move second child to first child (temp 3-component vector of float)
+0:385          'r4' (temp 3-component vector of float)
+0:385          matrix-times-vector (temp 3-component vector of float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385      Sequence
+0:385        move second child to first child (temp 3-component vector of float)
+0:385          'r5' (temp 3-component vector of float)
+0:385          vector-times-matrix (temp 3-component vector of float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385      Sequence
+0:385        move second child to first child (temp 3X3 matrix of float)
+0:385          'r6' (temp 3X3 matrix of float)
+0:385          matrix-scale (temp 3X3 matrix of float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385            'inF0' (in float)
+0:385      Sequence
+0:385        move second child to first child (temp 3X3 matrix of float)
+0:385          'r7' (temp 3X3 matrix of float)
+0:385          matrix-scale (temp 3X3 matrix of float)
+0:385            'inF0' (in float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385      Sequence
+0:385        move second child to first child (temp 3X3 matrix of float)
+0:385          'r8' (temp 3X3 matrix of float)
+0:385          matrix-multiply (temp 3X3 matrix of float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385            'inFM1' (in 3X3 matrix of float)
+0:396  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
+0:391    Function Parameters: 
+0:391      'inF0' (in float)
+0:391      'inF1' (in float)
+0:391      'inFV0' (in 4-component vector of float)
+0:391      'inFV1' (in 4-component vector of float)
+0:391      'inFM0' (in 4X4 matrix of float)
+0:391      'inFM1' (in 4X4 matrix of float)
 0:?     Sequence
-0:387      move second child to first child (temp float)
-0:387        'r0' (temp float)
-0:387        component-wise multiply (temp float)
-0:387          'inF0' (in float)
-0:387          'inF1' (in float)
-0:387      move second child to first child (temp 4-component vector of float)
-0:387        'r1' (temp 4-component vector of float)
-0:387        vector-scale (temp 4-component vector of float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387          'inF0' (in float)
-0:387      move second child to first child (temp 4-component vector of float)
-0:387        'r2' (temp 4-component vector of float)
-0:387        vector-scale (temp 4-component vector of float)
-0:387          'inF0' (in float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387      move second child to first child (temp float)
-0:387        'r3' (temp float)
-0:387        dot-product (global float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387          'inFV1' (in 4-component vector of float)
-0:387      move second child to first child (temp 4-component vector of float)
-0:387        'r4' (temp 4-component vector of float)
-0:387        matrix-times-vector (temp 4-component vector of float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387      move second child to first child (temp 4-component vector of float)
-0:387        'r5' (temp 4-component vector of float)
-0:387        vector-times-matrix (temp 4-component vector of float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387      move second child to first child (temp 4X4 matrix of float)
-0:387        'r6' (temp 4X4 matrix of float)
-0:387        matrix-scale (temp 4X4 matrix of float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387          'inF0' (in float)
-0:387      move second child to first child (temp 4X4 matrix of float)
-0:387        'r7' (temp 4X4 matrix of float)
-0:387        matrix-scale (temp 4X4 matrix of float)
-0:387          'inF0' (in float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387      move second child to first child (temp 4X4 matrix of float)
-0:387        'r8' (temp 4X4 matrix of float)
-0:387        matrix-multiply (temp 4X4 matrix of float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387          'inFM1' (in 4X4 matrix of float)
+0:392      Sequence
+0:392        move second child to first child (temp float)
+0:392          'r0' (temp float)
+0:392          component-wise multiply (temp float)
+0:392            'inF0' (in float)
+0:392            'inF1' (in float)
+0:392      Sequence
+0:392        move second child to first child (temp 4-component vector of float)
+0:392          'r1' (temp 4-component vector of float)
+0:392          vector-scale (temp 4-component vector of float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392            'inF0' (in float)
+0:392      Sequence
+0:392        move second child to first child (temp 4-component vector of float)
+0:392          'r2' (temp 4-component vector of float)
+0:392          vector-scale (temp 4-component vector of float)
+0:392            'inF0' (in float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392      Sequence
+0:392        move second child to first child (temp float)
+0:392          'r3' (temp float)
+0:392          dot-product (global float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392            'inFV1' (in 4-component vector of float)
+0:392      Sequence
+0:392        move second child to first child (temp 4-component vector of float)
+0:392          'r4' (temp 4-component vector of float)
+0:392          matrix-times-vector (temp 4-component vector of float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392      Sequence
+0:392        move second child to first child (temp 4-component vector of float)
+0:392          'r5' (temp 4-component vector of float)
+0:392          vector-times-matrix (temp 4-component vector of float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392      Sequence
+0:392        move second child to first child (temp 4X4 matrix of float)
+0:392          'r6' (temp 4X4 matrix of float)
+0:392          matrix-scale (temp 4X4 matrix of float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392            'inF0' (in float)
+0:392      Sequence
+0:392        move second child to first child (temp 4X4 matrix of float)
+0:392          'r7' (temp 4X4 matrix of float)
+0:392          matrix-scale (temp 4X4 matrix of float)
+0:392            'inF0' (in float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392      Sequence
+0:392        move second child to first child (temp 4X4 matrix of float)
+0:392          'r8' (temp 4X4 matrix of float)
+0:392          matrix-multiply (temp 4X4 matrix of float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392            'inFM1' (in 4X4 matrix of float)
+0:420  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42; (global void)
+0:401    Function Parameters: 
+0:401      'inF0' (in float)
+0:401      'inF1' (in float)
+0:401      'inFV2' (in 2-component vector of float)
+0:401      'inFV3' (in 3-component vector of float)
+0:401      'inFM2x3' (in 3X2 matrix of float)
+0:401      'inFM3x2' (in 2X3 matrix of float)
+0:401      'inFM3x3' (in 3X3 matrix of float)
+0:401      'inFM3x4' (in 4X3 matrix of float)
+0:401      'inFM2x4' (in 4X2 matrix of float)
+0:?     Sequence
+0:402      Sequence
+0:402        move second child to first child (temp float)
+0:402          'r00' (temp float)
+0:402          component-wise multiply (temp float)
+0:402            'inF0' (in float)
+0:402            'inF1' (in float)
+0:403      Sequence
+0:403        move second child to first child (temp 2-component vector of float)
+0:403          'r01' (temp 2-component vector of float)
+0:403          vector-scale (temp 2-component vector of float)
+0:403            'inFV2' (in 2-component vector of float)
+0:403            'inF0' (in float)
+0:404      Sequence
+0:404        move second child to first child (temp 3-component vector of float)
+0:404          'r02' (temp 3-component vector of float)
+0:404          vector-scale (temp 3-component vector of float)
+0:404            'inFV3' (in 3-component vector of float)
+0:404            'inF0' (in float)
+0:405      Sequence
+0:405        move second child to first child (temp 2-component vector of float)
+0:405          'r03' (temp 2-component vector of float)
+0:405          vector-scale (temp 2-component vector of float)
+0:405            'inF0' (in float)
+0:405            'inFV2' (in 2-component vector of float)
+0:406      Sequence
+0:406        move second child to first child (temp 3-component vector of float)
+0:406          'r04' (temp 3-component vector of float)
+0:406          vector-scale (temp 3-component vector of float)
+0:406            'inF0' (in float)
+0:406            'inFV3' (in 3-component vector of float)
+0:407      Sequence
+0:407        move second child to first child (temp float)
+0:407          'r05' (temp float)
+0:407          dot-product (global float)
+0:407            'inFV2' (in 2-component vector of float)
+0:407            'inFV2' (in 2-component vector of float)
+0:408      Sequence
+0:408        move second child to first child (temp float)
+0:408          'r06' (temp float)
+0:408          dot-product (global float)
+0:408            'inFV3' (in 3-component vector of float)
+0:408            'inFV3' (in 3-component vector of float)
+0:409      Sequence
+0:409        move second child to first child (temp 3-component vector of float)
+0:409          'r07' (temp 3-component vector of float)
+0:409          vector-times-matrix (temp 3-component vector of float)
+0:409            'inFV2' (in 2-component vector of float)
+0:409            'inFM2x3' (in 3X2 matrix of float)
+0:410      Sequence
+0:410        move second child to first child (temp 2-component vector of float)
+0:410          'r08' (temp 2-component vector of float)
+0:410          vector-times-matrix (temp 2-component vector of float)
+0:410            'inFV3' (in 3-component vector of float)
+0:410            'inFM3x2' (in 2X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child (temp 2-component vector of float)
+0:411          'r09' (temp 2-component vector of float)
+0:411          matrix-times-vector (temp 2-component vector of float)
+0:411            'inFM2x3' (in 3X2 matrix of float)
+0:411            'inFV3' (in 3-component vector of float)
+0:412      Sequence
+0:412        move second child to first child (temp 3-component vector of float)
+0:412          'r10' (temp 3-component vector of float)
+0:412          matrix-times-vector (temp 3-component vector of float)
+0:412            'inFM3x2' (in 2X3 matrix of float)
+0:412            'inFV2' (in 2-component vector of float)
+0:413      Sequence
+0:413        move second child to first child (temp 3X2 matrix of float)
+0:413          'r11' (temp 3X2 matrix of float)
+0:413          matrix-scale (temp 3X2 matrix of float)
+0:413            'inFM2x3' (in 3X2 matrix of float)
+0:413            'inF0' (in float)
+0:414      Sequence
+0:414        move second child to first child (temp 2X3 matrix of float)
+0:414          'r12' (temp 2X3 matrix of float)
+0:414          matrix-scale (temp 2X3 matrix of float)
+0:414            'inFM3x2' (in 2X3 matrix of float)
+0:414            'inF0' (in float)
+0:415      Sequence
+0:415        move second child to first child (temp 2X2 matrix of float)
+0:415          'r13' (temp 2X2 matrix of float)
+0:415          matrix-multiply (temp 2X2 matrix of float)
+0:415            'inFM2x3' (in 3X2 matrix of float)
+0:415            'inFM3x2' (in 2X3 matrix of float)
+0:416      Sequence
+0:416        move second child to first child (temp 3X2 matrix of float)
+0:416          'r14' (temp 3X2 matrix of float)
+0:416          matrix-multiply (temp 3X2 matrix of float)
+0:416            'inFM2x3' (in 3X2 matrix of float)
+0:416            'inFM3x3' (in 3X3 matrix of float)
+0:417      Sequence
+0:417        move second child to first child (temp 4X2 matrix of float)
+0:417          'r15' (temp 4X2 matrix of float)
+0:417          matrix-multiply (temp 4X2 matrix of float)
+0:417            'inFM2x3' (in 3X2 matrix of float)
+0:417            'inFM3x4' (in 4X3 matrix of float)
+0:418      Sequence
+0:418        move second child to first child (temp 4X3 matrix of float)
+0:418          'r16' (temp 4X3 matrix of float)
+0:418          matrix-multiply (temp 4X3 matrix of float)
+0:418            'inFM3x2' (in 2X3 matrix of float)
+0:418            'inFM2x4' (in 4X2 matrix of float)
 0:?   Linker Objects
 
 
@@ -1230,7 +1399,7 @@ Linked vertex stage:
 
 Shader version: 450
 0:? Sequence
-0:62  Function Definition: VertexShaderFunction(f1;f1;f1;u1;u1; (temp float)
+0:63  Function Definition: VertexShaderFunctionS(f1;f1;f1;u1;u1; (global float)
 0:2    Function Parameters: 
 0:2      'inF0' (in float)
 0:2      'inF1' (in float)
@@ -1301,846 +1470,870 @@ Shader version: 450
 0:34      ldexp (global float)
 0:34        'inF0' (in float)
 0:34        'inF1' (in float)
-0:35      log (global float)
+0:35      mix (global float)
 0:35        'inF0' (in float)
-0:36      component-wise multiply (temp float)
-0:36        log2 (temp float)
-0:36          'inF0' (in float)
-0:36        Constant:
-0:36          0.301030
-0:37      log2 (global float)
-0:37        'inF0' (in float)
-0:38      max (global float)
+0:35        'inF1' (in float)
+0:35        'inF2' (in float)
+0:36      log (global float)
+0:36        'inF0' (in float)
+0:37      component-wise multiply (temp float)
+0:37        log2 (temp float)
+0:37          'inF0' (in float)
+0:37        Constant:
+0:37          0.301030
+0:38      log2 (global float)
 0:38        'inF0' (in float)
-0:38        'inF1' (in float)
-0:39      min (global float)
+0:39      max (global float)
 0:39        'inF0' (in float)
 0:39        'inF1' (in float)
-0:41      pow (global float)
-0:41        'inF0' (in float)
-0:41        'inF1' (in float)
-0:42      radians (global float)
+0:40      min (global float)
+0:40        'inF0' (in float)
+0:40        'inF1' (in float)
+0:42      pow (global float)
 0:42        'inF0' (in float)
-0:43      bitFieldReverse (global uint)
-0:43        Constant:
-0:43          2 (const uint)
-0:44      roundEven (global float)
-0:44        'inF0' (in float)
-0:45      inverse sqrt (global float)
+0:42        'inF1' (in float)
+0:43      radians (global float)
+0:43        'inF0' (in float)
+0:44      bitFieldReverse (global uint)
+0:44        Constant:
+0:44          2 (const uint)
+0:45      roundEven (global float)
 0:45        'inF0' (in float)
-0:46      clamp (temp float)
+0:46      inverse sqrt (global float)
 0:46        'inF0' (in float)
-0:46        Constant:
-0:46          0.000000
-0:46        Constant:
-0:46          1.000000
-0:47      Sign (global float)
+0:47      clamp (temp float)
 0:47        'inF0' (in float)
-0:48      sine (global float)
+0:47        Constant:
+0:47          0.000000
+0:47        Constant:
+0:47          1.000000
+0:48      Sign (global float)
 0:48        'inF0' (in float)
-0:49      Sequence
-0:49        move second child to first child (temp float)
-0:49          'inF1' (in float)
-0:49          sine (temp float)
-0:49            'inF0' (in float)
-0:49        move second child to first child (temp float)
-0:49          'inF2' (in float)
-0:49          cosine (temp float)
-0:49            'inF0' (in float)
-0:50      hyp. sine (global float)
-0:50        'inF0' (in float)
-0:51      smoothstep (global float)
+0:49      sine (global float)
+0:49        'inF0' (in float)
+0:50      Sequence
+0:50        move second child to first child (temp float)
+0:50          'inF1' (in float)
+0:50          sine (temp float)
+0:50            'inF0' (in float)
+0:50        move second child to first child (temp float)
+0:50          'inF2' (in float)
+0:50          cosine (temp float)
+0:50            'inF0' (in float)
+0:51      hyp. sine (global float)
 0:51        'inF0' (in float)
-0:51        'inF1' (in float)
-0:51        'inF2' (in float)
-0:52      sqrt (global float)
+0:52      smoothstep (global float)
 0:52        'inF0' (in float)
-0:53      step (global float)
+0:52        'inF1' (in float)
+0:52        'inF2' (in float)
+0:53      sqrt (global float)
 0:53        'inF0' (in float)
-0:53        'inF1' (in float)
-0:54      tangent (global float)
+0:54      step (global float)
 0:54        'inF0' (in float)
-0:55      hyp. tangent (global float)
+0:54        'inF1' (in float)
+0:55      tangent (global float)
 0:55        'inF0' (in float)
-0:57      trunc (global float)
-0:57        'inF0' (in float)
-0:59      Branch: Return with expression
-0:59        Constant:
-0:59          0.000000
-0:68  Function Definition: VertexShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float)
-0:63    Function Parameters: 
-0:63      'inF0' (in 1-component vector of float)
-0:63      'inF1' (in 1-component vector of float)
-0:63      'inF2' (in 1-component vector of float)
+0:56      hyp. tangent (global float)
+0:56        'inF0' (in float)
+0:58      trunc (global float)
+0:58        'inF0' (in float)
+0:60      Branch: Return with expression
+0:60        Constant:
+0:60          0.000000
+0:69  Function Definition: VertexShaderFunction1(vf1;vf1;vf1; (global 1-component vector of float)
+0:64    Function Parameters: 
+0:64      'inF0' (in 1-component vector of float)
+0:64      'inF1' (in 1-component vector of float)
+0:64      'inF2' (in 1-component vector of float)
 0:?     Sequence
-0:65      Branch: Return with expression
-0:65        Constant:
-0:65          0.000000
-0:137  Function Definition: VertexShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float)
-0:69    Function Parameters: 
-0:69      'inF0' (in 2-component vector of float)
-0:69      'inF1' (in 2-component vector of float)
-0:69      'inF2' (in 2-component vector of float)
-0:69      'inU0' (in 2-component vector of uint)
-0:69      'inU1' (in 2-component vector of uint)
+0:66      Branch: Return with expression
+0:66        Constant:
+0:66          0.000000
+0:139  Function Definition: VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2; (global 2-component vector of float)
+0:70    Function Parameters: 
+0:70      'inF0' (in 2-component vector of float)
+0:70      'inF1' (in 2-component vector of float)
+0:70      'inF2' (in 2-component vector of float)
+0:70      'inU0' (in 2-component vector of uint)
+0:70      'inU1' (in 2-component vector of uint)
 0:?     Sequence
-0:70      all (global bool)
-0:70        'inF0' (in 2-component vector of float)
-0:71      Absolute value (global 2-component vector of float)
+0:71      all (global bool)
 0:71        'inF0' (in 2-component vector of float)
-0:72      arc cosine (global 2-component vector of float)
+0:72      Absolute value (global 2-component vector of float)
 0:72        'inF0' (in 2-component vector of float)
-0:73      any (global bool)
+0:73      arc cosine (global 2-component vector of float)
 0:73        'inF0' (in 2-component vector of float)
-0:74      arc sine (global 2-component vector of float)
+0:74      any (global bool)
 0:74        'inF0' (in 2-component vector of float)
-0:75      floatBitsToInt (global 2-component vector of int)
+0:75      arc sine (global 2-component vector of float)
 0:75        'inF0' (in 2-component vector of float)
-0:76      floatBitsToUint (global 2-component vector of uint)
+0:76      floatBitsToInt (global 2-component vector of int)
 0:76        'inF0' (in 2-component vector of float)
-0:77      intBitsToFloat (global 2-component vector of float)
-0:77        'inU0' (in 2-component vector of uint)
-0:79      arc tangent (global 2-component vector of float)
-0:79        'inF0' (in 2-component vector of float)
+0:77      floatBitsToUint (global 2-component vector of uint)
+0:77        'inF0' (in 2-component vector of float)
+0:78      intBitsToFloat (global 2-component vector of float)
+0:78        'inU0' (in 2-component vector of uint)
 0:80      arc tangent (global 2-component vector of float)
 0:80        'inF0' (in 2-component vector of float)
-0:80        'inF1' (in 2-component vector of float)
-0:81      Ceiling (global 2-component vector of float)
+0:81      arc tangent (global 2-component vector of float)
 0:81        'inF0' (in 2-component vector of float)
-0:82      clamp (global 2-component vector of float)
+0:81        'inF1' (in 2-component vector of float)
+0:82      Ceiling (global 2-component vector of float)
 0:82        'inF0' (in 2-component vector of float)
-0:82        'inF1' (in 2-component vector of float)
-0:82        'inF2' (in 2-component vector of float)
-0:83      cosine (global 2-component vector of float)
+0:83      clamp (global 2-component vector of float)
 0:83        'inF0' (in 2-component vector of float)
-0:84      hyp. cosine (global 2-component vector of float)
+0:83        'inF1' (in 2-component vector of float)
+0:83        'inF2' (in 2-component vector of float)
+0:84      cosine (global 2-component vector of float)
 0:84        'inF0' (in 2-component vector of float)
+0:85      hyp. cosine (global 2-component vector of float)
+0:85        'inF0' (in 2-component vector of float)
 0:?       bitCount (global 2-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
-0:86      degrees (global 2-component vector of float)
-0:86        'inF0' (in 2-component vector of float)
-0:87      distance (global float)
+0:87      degrees (global 2-component vector of float)
 0:87        'inF0' (in 2-component vector of float)
-0:87        'inF1' (in 2-component vector of float)
-0:88      dot-product (global float)
+0:88      distance (global float)
 0:88        'inF0' (in 2-component vector of float)
 0:88        'inF1' (in 2-component vector of float)
-0:92      exp (global 2-component vector of float)
-0:92        'inF0' (in 2-component vector of float)
-0:93      exp2 (global 2-component vector of float)
+0:89      dot-product (global float)
+0:89        'inF0' (in 2-component vector of float)
+0:89        'inF1' (in 2-component vector of float)
+0:93      exp (global 2-component vector of float)
 0:93        'inF0' (in 2-component vector of float)
-0:94      face-forward (global 2-component vector of float)
+0:94      exp2 (global 2-component vector of float)
 0:94        'inF0' (in 2-component vector of float)
-0:94        'inF1' (in 2-component vector of float)
-0:94        'inF2' (in 2-component vector of float)
-0:95      findMSB (global int)
-0:95        Constant:
-0:95          7 (const int)
-0:96      findLSB (global int)
+0:95      face-forward (global 2-component vector of float)
+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:96      findMSB (global int)
 0:96        Constant:
 0:96          7 (const int)
-0:97      Floor (global 2-component vector of float)
-0:97        'inF0' (in 2-component vector of float)
-0:99      mod (global 2-component vector of float)
-0:99        'inF0' (in 2-component vector of float)
-0:99        'inF1' (in 2-component vector of float)
-0:100      Fraction (global 2-component vector of float)
+0:97      findLSB (global int)
+0:97        Constant:
+0:97          7 (const int)
+0:98      Floor (global 2-component vector of float)
+0:98        'inF0' (in 2-component vector of float)
+0:100      mod (global 2-component vector of float)
 0:100        'inF0' (in 2-component vector of float)
-0:101      frexp (global 2-component vector of float)
+0:100        'inF1' (in 2-component vector of float)
+0:101      Fraction (global 2-component vector of float)
 0:101        'inF0' (in 2-component vector of float)
-0:101        'inF1' (in 2-component vector of float)
-0:102      isinf (global 2-component vector of bool)
+0:102      frexp (global 2-component vector of float)
 0:102        'inF0' (in 2-component vector of float)
-0:103      isnan (global 2-component vector of bool)
+0:102        'inF1' (in 2-component vector of float)
+0:103      isinf (global 2-component vector of bool)
 0:103        'inF0' (in 2-component vector of float)
-0:104      ldexp (global 2-component vector of float)
+0:104      isnan (global 2-component vector of bool)
 0:104        'inF0' (in 2-component vector of float)
-0:104        'inF1' (in 2-component vector of float)
-0:105      length (global float)
+0:105      ldexp (global 2-component vector of float)
 0:105        'inF0' (in 2-component vector of float)
-0:106      log (global 2-component vector of float)
+0:105        'inF1' (in 2-component vector of float)
+0:106      mix (global 2-component vector of float)
 0:106        'inF0' (in 2-component vector of float)
-0:107      vector-scale (temp 2-component vector of float)
-0:107        log2 (temp 2-component vector of float)
-0:107          'inF0' (in 2-component vector of float)
-0:107        Constant:
-0:107          0.301030
-0:108      log2 (global 2-component vector of float)
+0:106        'inF1' (in 2-component vector of float)
+0:106        'inF2' (in 2-component vector of float)
+0:107      length (global float)
+0:107        'inF0' (in 2-component vector of float)
+0:108      log (global 2-component vector of float)
 0:108        'inF0' (in 2-component vector of float)
-0:109      max (global 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      min (global 2-component vector of float)
+0:109      vector-scale (temp 2-component vector of float)
+0:109        log2 (temp 2-component vector of float)
+0:109          'inF0' (in 2-component vector of float)
+0:109        Constant:
+0:109          0.301030
+0:110      log2 (global 2-component vector of float)
 0:110        'inF0' (in 2-component vector of float)
-0:110        'inF1' (in 2-component vector of float)
-0:112      normalize (global 2-component vector of float)
+0:111      max (global 2-component vector of float)
+0:111        'inF0' (in 2-component vector of float)
+0:111        'inF1' (in 2-component vector of float)
+0:112      min (global 2-component vector of float)
 0:112        'inF0' (in 2-component vector of float)
-0:113      pow (global 2-component vector of float)
-0:113        'inF0' (in 2-component vector of float)
-0:113        'inF1' (in 2-component vector of float)
-0:114      radians (global 2-component vector of float)
+0:112        'inF1' (in 2-component vector of float)
+0:114      normalize (global 2-component vector of float)
 0:114        'inF0' (in 2-component vector of float)
-0:115      reflect (global 2-component vector of float)
+0:115      pow (global 2-component vector of float)
 0:115        'inF0' (in 2-component vector of float)
 0:115        'inF1' (in 2-component vector of float)
-0:116      refract (global 2-component vector of float)
+0:116      radians (global 2-component vector of float)
 0:116        'inF0' (in 2-component vector of float)
-0:116        'inF1' (in 2-component vector of float)
-0:116        Constant:
-0:116          2.000000
+0:117      reflect (global 2-component vector of float)
+0:117        'inF0' (in 2-component vector of float)
+0:117        'inF1' (in 2-component vector of float)
+0:118      refract (global 2-component vector of float)
+0:118        'inF0' (in 2-component vector of float)
+0:118        'inF1' (in 2-component vector of float)
+0:118        Constant:
+0:118          2.000000
 0:?       bitFieldReverse (global 2-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
-0:118      roundEven (global 2-component vector of float)
-0:118        'inF0' (in 2-component vector of float)
-0:119      inverse sqrt (global 2-component vector of float)
-0:119        'inF0' (in 2-component vector of float)
-0:120      clamp (temp 2-component vector of float)
+0:120      roundEven (global 2-component vector of float)
 0:120        'inF0' (in 2-component vector of float)
-0:120        Constant:
-0:120          0.000000
-0:120        Constant:
-0:120          1.000000
-0:121      Sign (global 2-component vector of float)
+0:121      inverse sqrt (global 2-component vector of float)
 0:121        'inF0' (in 2-component vector of float)
-0:122      sine (global 2-component vector of float)
+0:122      clamp (temp 2-component vector of float)
 0:122        'inF0' (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          'inF1' (in 2-component vector of float)
-0:123          sine (temp 2-component vector of float)
-0:123            'inF0' (in 2-component vector of float)
-0:123        move second child to first child (temp 2-component vector of float)
-0:123          'inF2' (in 2-component vector of float)
-0:123          cosine (temp 2-component vector of float)
-0:123            'inF0' (in 2-component vector of float)
-0:124      hyp. sine (global 2-component vector of float)
+0:122        Constant:
+0:122          0.000000
+0:122        Constant:
+0:122          1.000000
+0:123      Sign (global 2-component vector of float)
+0:123        'inF0' (in 2-component vector of float)
+0:124      sine (global 2-component vector of float)
 0:124        'inF0' (in 2-component vector of float)
-0:125      smoothstep (global 2-component vector of float)
-0:125        'inF0' (in 2-component vector of float)
-0:125        'inF1' (in 2-component vector of float)
-0:125        'inF2' (in 2-component vector of float)
-0:126      sqrt (global 2-component vector of float)
+0:125      Sequence
+0:125        move second child to first child (temp 2-component vector of float)
+0:125          'inF1' (in 2-component vector of float)
+0:125          sine (temp 2-component vector of float)
+0:125            'inF0' (in 2-component vector of float)
+0:125        move second child to first child (temp 2-component vector of float)
+0:125          'inF2' (in 2-component vector of float)
+0:125          cosine (temp 2-component vector of float)
+0:125            'inF0' (in 2-component vector of float)
+0:126      hyp. sine (global 2-component vector of float)
 0:126        'inF0' (in 2-component vector of float)
-0:127      step (global 2-component vector of float)
+0:127      smoothstep (global 2-component vector of float)
 0:127        'inF0' (in 2-component vector of float)
 0:127        'inF1' (in 2-component vector of float)
-0:128      tangent (global 2-component vector of float)
+0:127        'inF2' (in 2-component vector of float)
+0:128      sqrt (global 2-component vector of float)
 0:128        'inF0' (in 2-component vector of float)
-0:129      hyp. tangent (global 2-component vector of float)
+0:129      step (global 2-component vector of float)
 0:129        'inF0' (in 2-component vector of float)
-0:131      trunc (global 2-component vector of float)
+0:129        'inF1' (in 2-component vector of float)
+0:130      tangent (global 2-component vector of float)
+0:130        'inF0' (in 2-component vector of float)
+0:131      hyp. tangent (global 2-component vector of float)
 0:131        'inF0' (in 2-component vector of float)
-0:134      Branch: Return with expression
+0:133      trunc (global 2-component vector of float)
+0:133        'inF0' (in 2-component vector of float)
+0:136      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
-0:207  Function Definition: VertexShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float)
-0:138    Function Parameters: 
-0:138      'inF0' (in 3-component vector of float)
-0:138      'inF1' (in 3-component vector of float)
-0:138      'inF2' (in 3-component vector of float)
-0:138      'inU0' (in 3-component vector of uint)
-0:138      'inU1' (in 3-component vector of uint)
+0:210  Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; (global 3-component vector of float)
+0:140    Function Parameters: 
+0:140      'inF0' (in 3-component vector of float)
+0:140      'inF1' (in 3-component vector of float)
+0:140      'inF2' (in 3-component vector of float)
+0:140      'inU0' (in 3-component vector of uint)
+0:140      'inU1' (in 3-component vector of uint)
 0:?     Sequence
-0:139      all (global bool)
-0:139        'inF0' (in 3-component vector of float)
-0:140      Absolute value (global 3-component vector of float)
-0:140        'inF0' (in 3-component vector of float)
-0:141      arc cosine (global 3-component vector of float)
+0:141      all (global bool)
 0:141        'inF0' (in 3-component vector of float)
-0:142      any (global bool)
+0:142      Absolute value (global 3-component vector of float)
 0:142        'inF0' (in 3-component vector of float)
-0:143      arc sine (global 3-component vector of float)
+0:143      arc cosine (global 3-component vector of float)
 0:143        'inF0' (in 3-component vector of float)
-0:144      floatBitsToInt (global 3-component vector of int)
+0:144      any (global bool)
 0:144        'inF0' (in 3-component vector of float)
-0:145      floatBitsToUint (global 3-component vector of uint)
+0:145      arc sine (global 3-component vector of float)
 0:145        'inF0' (in 3-component vector of float)
-0:146      intBitsToFloat (global 3-component vector of float)
-0:146        'inU0' (in 3-component vector of uint)
-0:148      arc tangent (global 3-component vector of float)
-0:148        'inF0' (in 3-component vector of float)
-0:149      arc tangent (global 3-component vector of float)
-0:149        'inF0' (in 3-component vector of float)
-0:149        'inF1' (in 3-component vector of float)
-0:150      Ceiling (global 3-component vector of float)
+0:146      floatBitsToInt (global 3-component vector of int)
+0:146        'inF0' (in 3-component vector of float)
+0:147      floatBitsToUint (global 3-component vector of uint)
+0:147        'inF0' (in 3-component vector of float)
+0:148      intBitsToFloat (global 3-component vector of float)
+0:148        'inU0' (in 3-component vector of uint)
+0:150      arc tangent (global 3-component vector of float)
 0:150        'inF0' (in 3-component vector of float)
-0:151      clamp (global 3-component vector of float)
+0:151      arc tangent (global 3-component vector of float)
 0:151        'inF0' (in 3-component vector of float)
 0:151        'inF1' (in 3-component vector of float)
-0:151        'inF2' (in 3-component vector of float)
-0:152      cosine (global 3-component vector of float)
+0:152      Ceiling (global 3-component vector of float)
 0:152        'inF0' (in 3-component vector of float)
-0:153      hyp. cosine (global 3-component vector of float)
+0:153      clamp (global 3-component vector of float)
 0:153        'inF0' (in 3-component vector of float)
+0:153        'inF1' (in 3-component vector of float)
+0:153        'inF2' (in 3-component vector of float)
+0:154      cosine (global 3-component vector of float)
+0:154        'inF0' (in 3-component vector of float)
+0:155      hyp. cosine (global 3-component vector of float)
+0:155        'inF0' (in 3-component vector of float)
 0:?       bitCount (global 3-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
 0:?           5 (const uint)
-0:155      cross-product (global 3-component vector of float)
-0:155        'inF0' (in 3-component vector of float)
-0:155        'inF1' (in 3-component vector of float)
-0:156      degrees (global 3-component vector of float)
-0:156        'inF0' (in 3-component vector of float)
-0:157      distance (global float)
+0:157      cross-product (global 3-component vector of float)
 0:157        'inF0' (in 3-component vector of float)
 0:157        'inF1' (in 3-component vector of float)
-0:158      dot-product (global float)
+0:158      degrees (global 3-component vector of float)
 0:158        'inF0' (in 3-component vector of float)
-0:158        'inF1' (in 3-component vector of float)
-0:162      exp (global 3-component vector of float)
-0:162        'inF0' (in 3-component vector of float)
-0:163      exp2 (global 3-component vector of float)
-0:163        'inF0' (in 3-component vector of float)
-0:164      face-forward (global 3-component vector of float)
+0:159      distance (global float)
+0:159        'inF0' (in 3-component vector of float)
+0:159        'inF1' (in 3-component vector of float)
+0:160      dot-product (global float)
+0:160        'inF0' (in 3-component vector of float)
+0:160        'inF1' (in 3-component vector of float)
+0:164      exp (global 3-component vector of float)
 0:164        'inF0' (in 3-component vector of float)
-0:164        'inF1' (in 3-component vector of float)
-0:164        'inF2' (in 3-component vector of float)
-0:165      findMSB (global int)
-0:165        Constant:
-0:165          7 (const int)
-0:166      findLSB (global int)
-0:166        Constant:
-0:166          7 (const int)
-0:167      Floor (global 3-component vector of float)
-0:167        'inF0' (in 3-component vector of float)
-0:169      mod (global 3-component vector of float)
+0:165      exp2 (global 3-component vector of float)
+0:165        'inF0' (in 3-component vector of float)
+0:166      face-forward (global 3-component vector of float)
+0:166        'inF0' (in 3-component vector of float)
+0:166        'inF1' (in 3-component vector of float)
+0:166        'inF2' (in 3-component vector of float)
+0:167      findMSB (global int)
+0:167        Constant:
+0:167          7 (const int)
+0:168      findLSB (global int)
+0:168        Constant:
+0:168          7 (const int)
+0:169      Floor (global 3-component vector of float)
 0:169        'inF0' (in 3-component vector of float)
-0:169        'inF1' (in 3-component vector of float)
-0:170      Fraction (global 3-component vector of float)
-0:170        'inF0' (in 3-component vector of float)
-0:171      frexp (global 3-component vector of float)
+0:171      mod (global 3-component vector of float)
 0:171        'inF0' (in 3-component vector of float)
 0:171        'inF1' (in 3-component vector of float)
-0:172      isinf (global 3-component vector of bool)
+0:172      Fraction (global 3-component vector of float)
 0:172        'inF0' (in 3-component vector of float)
-0:173      isnan (global 3-component vector of bool)
+0:173      frexp (global 3-component vector of float)
 0:173        'inF0' (in 3-component vector of float)
-0:174      ldexp (global 3-component vector of float)
+0:173        'inF1' (in 3-component vector of float)
+0:174      isinf (global 3-component vector of bool)
 0:174        'inF0' (in 3-component vector of float)
-0:174        'inF1' (in 3-component vector of float)
-0:175      length (global float)
+0:175      isnan (global 3-component vector of bool)
 0:175        'inF0' (in 3-component vector of float)
-0:176      log (global 3-component vector of float)
+0:176      ldexp (global 3-component vector of float)
 0:176        'inF0' (in 3-component vector of float)
-0:177      vector-scale (temp 3-component vector of float)
-0:177        log2 (temp 3-component vector of float)
-0:177          'inF0' (in 3-component vector of float)
-0:177        Constant:
-0:177          0.301030
-0:178      log2 (global 3-component vector of float)
+0:176        'inF1' (in 3-component vector of float)
+0:177      mix (global 3-component vector of float)
+0:177        'inF0' (in 3-component vector of float)
+0:177        'inF1' (in 3-component vector of float)
+0:177        'inF2' (in 3-component vector of float)
+0:178      length (global float)
 0:178        'inF0' (in 3-component vector of float)
-0:179      max (global 3-component vector of float)
+0:179      log (global 3-component vector of float)
 0:179        'inF0' (in 3-component vector of float)
-0:179        'inF1' (in 3-component vector of float)
-0:180      min (global 3-component vector of float)
-0:180        'inF0' (in 3-component vector of float)
-0:180        'inF1' (in 3-component vector of float)
-0:182      normalize (global 3-component vector of float)
+0:180      vector-scale (temp 3-component vector of float)
+0:180        log2 (temp 3-component vector of float)
+0:180          'inF0' (in 3-component vector of float)
+0:180        Constant:
+0:180          0.301030
+0:181      log2 (global 3-component vector of float)
+0:181        'inF0' (in 3-component vector of float)
+0:182      max (global 3-component vector of float)
 0:182        'inF0' (in 3-component vector of float)
-0:183      pow (global 3-component vector of float)
+0:182        'inF1' (in 3-component vector of float)
+0:183      min (global 3-component vector of float)
 0:183        'inF0' (in 3-component vector of float)
 0:183        'inF1' (in 3-component vector of float)
-0:184      radians (global 3-component vector of float)
-0:184        'inF0' (in 3-component vector of float)
-0:185      reflect (global 3-component vector of float)
+0:185      normalize (global 3-component vector of float)
 0:185        'inF0' (in 3-component vector of float)
-0:185        'inF1' (in 3-component vector of float)
-0:186      refract (global 3-component vector of float)
+0:186      pow (global 3-component vector of float)
 0:186        'inF0' (in 3-component vector of float)
 0:186        'inF1' (in 3-component vector of float)
-0:186        Constant:
-0:186          2.000000
+0:187      radians (global 3-component vector of float)
+0:187        'inF0' (in 3-component vector of float)
+0:188      reflect (global 3-component vector of float)
+0:188        'inF0' (in 3-component vector of float)
+0:188        'inF1' (in 3-component vector of float)
+0:189      refract (global 3-component vector of float)
+0:189        'inF0' (in 3-component vector of float)
+0:189        'inF1' (in 3-component vector of float)
+0:189        Constant:
+0:189          2.000000
 0:?       bitFieldReverse (global 3-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
 0:?           3 (const uint)
-0:188      roundEven (global 3-component vector of float)
-0:188        'inF0' (in 3-component vector of float)
-0:189      inverse sqrt (global 3-component vector of float)
-0:189        'inF0' (in 3-component vector of float)
-0:190      clamp (temp 3-component vector of float)
-0:190        'inF0' (in 3-component vector of float)
-0:190        Constant:
-0:190          0.000000
-0:190        Constant:
-0:190          1.000000
-0:191      Sign (global 3-component vector of float)
+0:191      roundEven (global 3-component vector of float)
 0:191        'inF0' (in 3-component vector of float)
-0:192      sine (global 3-component vector of float)
+0:192      inverse sqrt (global 3-component vector of float)
 0:192        'inF0' (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          'inF1' (in 3-component vector of float)
-0:193          sine (temp 3-component vector of float)
-0:193            'inF0' (in 3-component vector of float)
-0:193        move second child to first child (temp 3-component vector of float)
-0:193          'inF2' (in 3-component vector of float)
-0:193          cosine (temp 3-component vector of float)
-0:193            'inF0' (in 3-component vector of float)
-0:194      hyp. sine (global 3-component vector of float)
+0:193      clamp (temp 3-component vector of float)
+0:193        'inF0' (in 3-component vector of float)
+0:193        Constant:
+0:193          0.000000
+0:193        Constant:
+0:193          1.000000
+0:194      Sign (global 3-component vector of float)
 0:194        'inF0' (in 3-component vector of float)
-0:195      smoothstep (global 3-component vector of float)
+0:195      sine (global 3-component vector of float)
 0:195        'inF0' (in 3-component vector of float)
-0:195        'inF1' (in 3-component vector of float)
-0:195        'inF2' (in 3-component vector of float)
-0:196      sqrt (global 3-component vector of float)
-0:196        'inF0' (in 3-component vector of float)
-0:197      step (global 3-component vector of float)
+0:196      Sequence
+0:196        move second child to first child (temp 3-component vector of float)
+0:196          'inF1' (in 3-component vector of float)
+0:196          sine (temp 3-component vector of float)
+0:196            'inF0' (in 3-component vector of float)
+0:196        move second child to first child (temp 3-component vector of float)
+0:196          'inF2' (in 3-component vector of float)
+0:196          cosine (temp 3-component vector of float)
+0:196            'inF0' (in 3-component vector of float)
+0:197      hyp. sine (global 3-component vector of float)
 0:197        'inF0' (in 3-component vector of float)
-0:197        'inF1' (in 3-component vector of float)
-0:198      tangent (global 3-component vector of float)
+0:198      smoothstep (global 3-component vector of float)
 0:198        'inF0' (in 3-component vector of float)
-0:199      hyp. tangent (global 3-component vector of float)
+0:198        'inF1' (in 3-component vector of float)
+0:198        'inF2' (in 3-component vector of float)
+0:199      sqrt (global 3-component vector of float)
 0:199        'inF0' (in 3-component vector of float)
-0:201      trunc (global 3-component vector of float)
+0:200      step (global 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      tangent (global 3-component vector of float)
 0:201        'inF0' (in 3-component vector of float)
-0:204      Branch: Return with expression
+0:202      hyp. tangent (global 3-component vector of float)
+0:202        'inF0' (in 3-component vector of float)
+0:204      trunc (global 3-component vector of float)
+0:204        'inF0' (in 3-component vector of float)
+0:207      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
-0:330  Function Definition: VertexShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float)
-0:208    Function Parameters: 
-0:208      'inF0' (in 4-component vector of float)
-0:208      'inF1' (in 4-component vector of float)
-0:208      'inF2' (in 4-component vector of float)
-0:208      'inU0' (in 4-component vector of uint)
-0:208      'inU1' (in 4-component vector of uint)
+0:335  Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; (global 4-component vector of float)
+0:211    Function Parameters: 
+0:211      'inF0' (in 4-component vector of float)
+0:211      'inF1' (in 4-component vector of float)
+0:211      'inF2' (in 4-component vector of float)
+0:211      'inU0' (in 4-component vector of uint)
+0:211      'inU1' (in 4-component vector of uint)
 0:?     Sequence
-0:209      all (global bool)
-0:209        'inF0' (in 4-component vector of float)
-0:210      Absolute value (global 4-component vector of float)
-0:210        'inF0' (in 4-component vector of float)
-0:211      arc cosine (global 4-component vector of float)
-0:211        'inF0' (in 4-component vector of float)
-0:212      any (global bool)
+0:212      all (global bool)
 0:212        'inF0' (in 4-component vector of float)
-0:213      arc sine (global 4-component vector of float)
+0:213      Absolute value (global 4-component vector of float)
 0:213        'inF0' (in 4-component vector of float)
-0:214      floatBitsToInt (global 4-component vector of int)
+0:214      arc cosine (global 4-component vector of float)
 0:214        'inF0' (in 4-component vector of float)
-0:215      floatBitsToUint (global 4-component vector of uint)
+0:215      any (global bool)
 0:215        'inF0' (in 4-component vector of float)
-0:216      intBitsToFloat (global 4-component vector of float)
-0:216        'inU0' (in 4-component vector of uint)
-0:218      arc tangent (global 4-component vector of float)
+0:216      arc sine (global 4-component vector of float)
+0:216        'inF0' (in 4-component vector of float)
+0:217      floatBitsToInt (global 4-component vector of int)
+0:217        'inF0' (in 4-component vector of float)
+0:218      floatBitsToUint (global 4-component vector of uint)
 0:218        'inF0' (in 4-component vector of float)
-0:219      arc tangent (global 4-component vector of float)
-0:219        'inF0' (in 4-component vector of float)
-0:219        'inF1' (in 4-component vector of float)
-0:220      Ceiling (global 4-component vector of float)
-0:220        'inF0' (in 4-component vector of float)
-0:221      clamp (global 4-component vector of float)
+0:219      intBitsToFloat (global 4-component vector of float)
+0:219        'inU0' (in 4-component vector of uint)
+0:221      arc tangent (global 4-component vector of float)
 0:221        'inF0' (in 4-component vector of float)
-0:221        'inF1' (in 4-component vector of float)
-0:221        'inF2' (in 4-component vector of float)
-0:222      cosine (global 4-component vector of float)
+0:222      arc tangent (global 4-component vector of float)
 0:222        'inF0' (in 4-component vector of float)
-0:223      hyp. cosine (global 4-component vector of float)
+0:222        'inF1' (in 4-component vector of float)
+0:223      Ceiling (global 4-component vector of float)
 0:223        'inF0' (in 4-component vector of float)
+0:224      clamp (global 4-component vector of float)
+0:224        'inF0' (in 4-component vector of float)
+0:224        'inF1' (in 4-component vector of float)
+0:224        'inF2' (in 4-component vector of float)
+0:225      cosine (global 4-component vector of float)
+0:225        'inF0' (in 4-component vector of float)
+0:226      hyp. cosine (global 4-component vector of float)
+0:226        'inF0' (in 4-component vector of float)
 0:?       bitCount (global 4-component vector of uint)
 0:?         Constant:
 0:?           7 (const uint)
 0:?           3 (const uint)
 0:?           5 (const uint)
 0:?           2 (const uint)
-0:225      degrees (global 4-component vector of float)
-0:225        'inF0' (in 4-component vector of float)
-0:226      distance (global float)
-0:226        'inF0' (in 4-component vector of float)
-0:226        'inF1' (in 4-component vector of float)
-0:227      dot-product (global float)
-0:227        'inF0' (in 4-component vector of float)
-0:227        'inF1' (in 4-component vector of float)
-0:228      Construct vec4 (temp 4-component vector of float)
-0:228        Constant:
-0:228          1.000000
-0:228        component-wise multiply (temp float)
-0:228          direct index (temp float)
-0:228            'inF0' (in 4-component vector of float)
-0:228            Constant:
-0:228              1 (const int)
-0:228          direct index (temp float)
-0:228            'inF1' (in 4-component vector of float)
-0:228            Constant:
-0:228              1 (const int)
-0:228        direct index (temp float)
-0:228          'inF0' (in 4-component vector of float)
-0:228          Constant:
-0:228            2 (const int)
-0:228        direct index (temp float)
-0:228          'inF1' (in 4-component vector of float)
-0:228          Constant:
-0:228            3 (const int)
-0:232      exp (global 4-component vector of float)
-0:232        'inF0' (in 4-component vector of float)
-0:233      exp2 (global 4-component vector of float)
-0:233        'inF0' (in 4-component vector of float)
-0:234      face-forward (global 4-component vector of float)
-0:234        'inF0' (in 4-component vector of float)
-0:234        'inF1' (in 4-component vector of float)
-0:234        'inF2' (in 4-component vector of float)
-0:235      findMSB (global int)
-0:235        Constant:
-0:235          7 (const int)
-0:236      findLSB (global int)
-0:236        Constant:
-0:236          7 (const int)
-0:237      Floor (global 4-component vector of float)
+0:228      degrees (global 4-component vector of float)
+0:228        'inF0' (in 4-component vector of float)
+0:229      distance (global float)
+0:229        'inF0' (in 4-component vector of float)
+0:229        'inF1' (in 4-component vector of float)
+0:230      dot-product (global float)
+0:230        'inF0' (in 4-component vector of float)
+0:230        'inF1' (in 4-component vector of float)
+0:231      Construct vec4 (temp 4-component vector of float)
+0:231        Constant:
+0:231          1.000000
+0:231        component-wise multiply (temp float)
+0:231          direct index (temp float)
+0:231            'inF0' (in 4-component vector of float)
+0:231            Constant:
+0:231              1 (const int)
+0:231          direct index (temp float)
+0:231            'inF1' (in 4-component vector of float)
+0:231            Constant:
+0:231              1 (const int)
+0:231        direct index (temp float)
+0:231          'inF0' (in 4-component vector of float)
+0:231          Constant:
+0:231            2 (const int)
+0:231        direct index (temp float)
+0:231          'inF1' (in 4-component vector of float)
+0:231          Constant:
+0:231            3 (const int)
+0:235      exp (global 4-component vector of float)
+0:235        'inF0' (in 4-component vector of float)
+0:236      exp2 (global 4-component vector of float)
+0:236        'inF0' (in 4-component vector of float)
+0:237      face-forward (global 4-component vector of float)
 0:237        'inF0' (in 4-component vector of float)
-0:239      mod (global 4-component vector of float)
-0:239        'inF0' (in 4-component vector of float)
-0:239        'inF1' (in 4-component vector of float)
-0:240      Fraction (global 4-component vector of float)
+0:237        'inF1' (in 4-component vector of float)
+0:237        'inF2' (in 4-component vector of float)
+0:238      findMSB (global int)
+0:238        Constant:
+0:238          7 (const int)
+0:239      findLSB (global int)
+0:239        Constant:
+0:239          7 (const int)
+0:240      Floor (global 4-component vector of float)
 0:240        'inF0' (in 4-component vector of float)
-0:241      frexp (global 4-component vector of float)
-0:241        'inF0' (in 4-component vector of float)
-0:241        'inF1' (in 4-component vector of float)
-0:242      isinf (global 4-component vector of bool)
+0:242      mod (global 4-component vector of float)
 0:242        'inF0' (in 4-component vector of float)
-0:243      isnan (global 4-component vector of bool)
+0:242        'inF1' (in 4-component vector of float)
+0:243      Fraction (global 4-component vector of float)
 0:243        'inF0' (in 4-component vector of float)
-0:244      ldexp (global 4-component vector of float)
+0:244      frexp (global 4-component vector of float)
 0:244        'inF0' (in 4-component vector of float)
 0:244        'inF1' (in 4-component vector of float)
-0:245      length (global float)
+0:245      isinf (global 4-component vector of bool)
 0:245        'inF0' (in 4-component vector of float)
-0:246      log (global 4-component vector of float)
+0:246      isnan (global 4-component vector of bool)
 0:246        'inF0' (in 4-component vector of float)
-0:247      vector-scale (temp 4-component vector of float)
-0:247        log2 (temp 4-component vector of float)
-0:247          'inF0' (in 4-component vector of float)
-0:247        Constant:
-0:247          0.301030
-0:248      log2 (global 4-component vector of float)
+0:247      ldexp (global 4-component vector of float)
+0:247        'inF0' (in 4-component vector of float)
+0:247        'inF1' (in 4-component vector of float)
+0:248      mix (global 4-component vector of float)
 0:248        'inF0' (in 4-component vector of float)
-0:249      max (global 4-component vector of float)
+0:248        'inF1' (in 4-component vector of float)
+0:248        'inF2' (in 4-component vector of float)
+0:249      length (global float)
 0:249        'inF0' (in 4-component vector of float)
-0:249        'inF1' (in 4-component vector of float)
-0:250      min (global 4-component vector of float)
+0:250      log (global 4-component vector of float)
 0:250        'inF0' (in 4-component vector of float)
-0:250        'inF1' (in 4-component vector of float)
-0:252      normalize (global 4-component vector of float)
+0:251      vector-scale (temp 4-component vector of float)
+0:251        log2 (temp 4-component vector of float)
+0:251          'inF0' (in 4-component vector of float)
+0:251        Constant:
+0:251          0.301030
+0:252      log2 (global 4-component vector of float)
 0:252        'inF0' (in 4-component vector of float)
-0:253      pow (global 4-component vector of float)
+0:253      max (global 4-component vector of float)
 0:253        'inF0' (in 4-component vector of float)
 0:253        'inF1' (in 4-component vector of float)
-0:254      radians (global 4-component vector of float)
+0:254      min (global 4-component vector of float)
 0:254        'inF0' (in 4-component vector of float)
-0:255      reflect (global 4-component vector of float)
-0:255        'inF0' (in 4-component vector of float)
-0:255        'inF1' (in 4-component vector of float)
-0:256      refract (global 4-component vector of float)
+0:254        'inF1' (in 4-component vector of float)
+0:256      normalize (global 4-component vector of float)
 0:256        'inF0' (in 4-component vector of float)
-0:256        'inF1' (in 4-component vector of float)
-0:256        Constant:
-0:256          2.000000
+0:257      pow (global 4-component vector of float)
+0:257        'inF0' (in 4-component vector of float)
+0:257        'inF1' (in 4-component vector of float)
+0:258      radians (global 4-component vector of float)
+0:258        'inF0' (in 4-component vector of float)
+0:259      reflect (global 4-component vector of float)
+0:259        'inF0' (in 4-component vector of float)
+0:259        'inF1' (in 4-component vector of float)
+0:260      refract (global 4-component vector of float)
+0:260        'inF0' (in 4-component vector of float)
+0:260        'inF1' (in 4-component vector of float)
+0:260        Constant:
+0:260          2.000000
 0:?       bitFieldReverse (global 4-component vector of uint)
 0:?         Constant:
 0:?           1 (const uint)
 0:?           2 (const uint)
 0:?           3 (const uint)
 0:?           4 (const uint)
-0:258      roundEven (global 4-component vector of float)
-0:258        'inF0' (in 4-component vector of float)
-0:259      inverse sqrt (global 4-component vector of float)
-0:259        'inF0' (in 4-component vector of float)
-0:260      clamp (temp 4-component vector of float)
-0:260        'inF0' (in 4-component vector of float)
-0:260        Constant:
-0:260          0.000000
-0:260        Constant:
-0:260          1.000000
-0:261      Sign (global 4-component vector of float)
-0:261        'inF0' (in 4-component vector of float)
-0:262      sine (global 4-component vector of float)
+0:262      roundEven (global 4-component vector of float)
 0:262        'inF0' (in 4-component vector of float)
-0:263      Sequence
-0:263        move second child to first child (temp 4-component vector of float)
-0:263          'inF1' (in 4-component vector of float)
-0:263          sine (temp 4-component vector of float)
-0:263            'inF0' (in 4-component vector of float)
-0:263        move second child to first child (temp 4-component vector of float)
-0:263          'inF2' (in 4-component vector of float)
-0:263          cosine (temp 4-component vector of float)
-0:263            'inF0' (in 4-component vector of float)
-0:264      hyp. sine (global 4-component vector of float)
+0:263      inverse sqrt (global 4-component vector of float)
+0:263        'inF0' (in 4-component vector of float)
+0:264      clamp (temp 4-component vector of float)
 0:264        'inF0' (in 4-component vector of float)
-0:265      smoothstep (global 4-component vector of float)
+0:264        Constant:
+0:264          0.000000
+0:264        Constant:
+0:264          1.000000
+0:265      Sign (global 4-component vector of float)
 0:265        'inF0' (in 4-component vector of float)
-0:265        'inF1' (in 4-component vector of float)
-0:265        'inF2' (in 4-component vector of float)
-0:266      sqrt (global 4-component vector of float)
+0:266      sine (global 4-component vector of float)
 0:266        'inF0' (in 4-component vector of float)
-0:267      step (global 4-component vector of float)
-0:267        'inF0' (in 4-component vector of float)
-0:267        'inF1' (in 4-component vector of float)
-0:268      tangent (global 4-component vector of float)
+0:267      Sequence
+0:267        move second child to first child (temp 4-component vector of float)
+0:267          'inF1' (in 4-component vector of float)
+0:267          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 4-component vector of float)
+0:267          'inF2' (in 4-component vector of float)
+0:267          cosine (temp 4-component vector of float)
+0:267            'inF0' (in 4-component vector of float)
+0:268      hyp. sine (global 4-component vector of float)
 0:268        'inF0' (in 4-component vector of float)
-0:269      hyp. tangent (global 4-component vector of float)
+0:269      smoothstep (global 4-component vector of float)
 0:269        'inF0' (in 4-component vector of float)
-0:271      trunc (global 4-component vector of float)
+0:269        'inF1' (in 4-component vector of float)
+0:269        'inF2' (in 4-component vector of float)
+0:270      sqrt (global 4-component vector of float)
+0:270        'inF0' (in 4-component vector of float)
+0:271      step (global 4-component vector of float)
 0:271        'inF0' (in 4-component vector of float)
-0:274      Branch: Return with expression
+0:271        'inF1' (in 4-component vector of float)
+0:272      tangent (global 4-component vector of float)
+0:272        'inF0' (in 4-component vector of float)
+0:273      hyp. tangent (global 4-component vector of float)
+0:273        'inF0' (in 4-component vector of float)
+0:275      trunc (global 4-component vector of float)
+0:275        'inF0' (in 4-component vector of float)
+0:278      Branch: Return with expression
 0:?         Constant:
 0:?           1.000000
 0:?           2.000000
 0:?           3.000000
 0:?           4.000000
-0:339  Function Definition: VertexShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float)
-0:331    Function Parameters: 
-0:331      'inF0' (in 2X2 matrix of float)
-0:331      'inF1' (in 2X2 matrix of float)
-0:331      'inF2' (in 2X2 matrix of float)
+0:344  Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; (global 2X2 matrix of float)
+0:336    Function Parameters: 
+0:336      'inF0' (in 2X2 matrix of float)
+0:336      'inF1' (in 2X2 matrix of float)
+0:336      'inF2' (in 2X2 matrix of float)
 0:?     Sequence
-0:333      all (global bool)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      Absolute value (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      arc cosine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      any (global bool)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      arc sine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      arc tangent (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      arc tangent (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      Ceiling (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      clamp (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333        'inF2' (in 2X2 matrix of float)
-0:333      cosine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      hyp. cosine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      degrees (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      determinant (global float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      exp (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      exp2 (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      findMSB (global int)
-0:333        Constant:
-0:333          7 (const int)
-0:333      findLSB (global int)
-0:333        Constant:
-0:333          7 (const int)
-0:333      Floor (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      mod (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      Fraction (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      frexp (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      ldexp (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      log (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      matrix-scale (temp 2X2 matrix of float)
-0:333        log2 (temp 2X2 matrix of float)
-0:333          'inF0' (in 2X2 matrix of float)
-0:333        Constant:
-0:333          0.301030
-0:333      log2 (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      max (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      min (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      pow (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      radians (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      roundEven (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      inverse sqrt (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      clamp (temp 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        Constant:
-0:333          0.000000
-0:333        Constant:
-0:333          1.000000
-0:333      Sign (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      sine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      Sequence
-0:333        move second child to first child (temp 2X2 matrix of float)
-0:333          'inF1' (in 2X2 matrix of float)
-0:333          sine (temp 2X2 matrix of float)
-0:333            'inF0' (in 2X2 matrix of float)
-0:333        move second child to first child (temp 2X2 matrix of float)
-0:333          'inF2' (in 2X2 matrix of float)
-0:333          cosine (temp 2X2 matrix of float)
-0:333            'inF0' (in 2X2 matrix of float)
-0:333      hyp. sine (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      smoothstep (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333        'inF2' (in 2X2 matrix of float)
-0:333      sqrt (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      step (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333        'inF1' (in 2X2 matrix of float)
-0:333      tangent (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      hyp. tangent (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      transpose (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:333      trunc (global 2X2 matrix of float)
-0:333        'inF0' (in 2X2 matrix of float)
-0:336      Branch: Return with expression
+0:338      all (global bool)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      Absolute value (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      arc cosine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      any (global bool)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      arc sine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      arc tangent (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      arc tangent (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      Ceiling (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      clamp (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338        'inF2' (in 2X2 matrix of float)
+0:338      cosine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      hyp. cosine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      degrees (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      determinant (global float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      exp (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      exp2 (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      findMSB (global int)
+0:338        Constant:
+0:338          7 (const int)
+0:338      findLSB (global int)
+0:338        Constant:
+0:338          7 (const int)
+0:338      Floor (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      mod (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      Fraction (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      frexp (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      ldexp (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      mix (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338        'inF2' (in 2X2 matrix of float)
+0:338      log (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      matrix-scale (temp 2X2 matrix of float)
+0:338        log2 (temp 2X2 matrix of float)
+0:338          'inF0' (in 2X2 matrix of float)
+0:338        Constant:
+0:338          0.301030
+0:338      log2 (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      max (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      min (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      pow (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      radians (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      roundEven (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      inverse sqrt (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      clamp (temp 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        Constant:
+0:338          0.000000
+0:338        Constant:
+0:338          1.000000
+0:338      Sign (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      sine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      Sequence
+0:338        move second child to first child (temp 2X2 matrix of float)
+0:338          'inF1' (in 2X2 matrix of float)
+0:338          sine (temp 2X2 matrix of float)
+0:338            'inF0' (in 2X2 matrix of float)
+0:338        move second child to first child (temp 2X2 matrix of float)
+0:338          'inF2' (in 2X2 matrix of float)
+0:338          cosine (temp 2X2 matrix of float)
+0:338            'inF0' (in 2X2 matrix of float)
+0:338      hyp. sine (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      smoothstep (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338        'inF2' (in 2X2 matrix of float)
+0:338      sqrt (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      step (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338        'inF1' (in 2X2 matrix of float)
+0:338      tangent (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      hyp. tangent (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      transpose (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:338      trunc (global 2X2 matrix of float)
+0:338        'inF0' (in 2X2 matrix of float)
+0:341      Branch: Return with expression
 0:?         Constant:
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
 0:?           2.000000
-0:348  Function Definition: VertexShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float)
-0:340    Function Parameters: 
-0:340      'inF0' (in 3X3 matrix of float)
-0:340      'inF1' (in 3X3 matrix of float)
-0:340      'inF2' (in 3X3 matrix of float)
+0:353  Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; (global 3X3 matrix of float)
+0:345    Function Parameters: 
+0:345      'inF0' (in 3X3 matrix of float)
+0:345      'inF1' (in 3X3 matrix of float)
+0:345      'inF2' (in 3X3 matrix of float)
 0:?     Sequence
-0:342      all (global bool)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      Absolute value (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      arc cosine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      any (global bool)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      arc sine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      arc tangent (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      arc tangent (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      Ceiling (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      clamp (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342        'inF2' (in 3X3 matrix of float)
-0:342      cosine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      hyp. cosine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      degrees (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      determinant (global float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      exp (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      exp2 (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      findMSB (global int)
-0:342        Constant:
-0:342          7 (const int)
-0:342      findLSB (global int)
-0:342        Constant:
-0:342          7 (const int)
-0:342      Floor (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      mod (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      Fraction (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      frexp (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      ldexp (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      log (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      matrix-scale (temp 3X3 matrix of float)
-0:342        log2 (temp 3X3 matrix of float)
-0:342          'inF0' (in 3X3 matrix of float)
-0:342        Constant:
-0:342          0.301030
-0:342      log2 (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      max (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      min (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      pow (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      radians (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      roundEven (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      inverse sqrt (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      clamp (temp 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        Constant:
-0:342          0.000000
-0:342        Constant:
-0:342          1.000000
-0:342      Sign (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      sine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      Sequence
-0:342        move second child to first child (temp 3X3 matrix of float)
-0:342          'inF1' (in 3X3 matrix of float)
-0:342          sine (temp 3X3 matrix of float)
-0:342            'inF0' (in 3X3 matrix of float)
-0:342        move second child to first child (temp 3X3 matrix of float)
-0:342          'inF2' (in 3X3 matrix of float)
-0:342          cosine (temp 3X3 matrix of float)
-0:342            'inF0' (in 3X3 matrix of float)
-0:342      hyp. sine (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      smoothstep (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342        'inF2' (in 3X3 matrix of float)
-0:342      sqrt (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      step (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342        'inF1' (in 3X3 matrix of float)
-0:342      tangent (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      hyp. tangent (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      transpose (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:342      trunc (global 3X3 matrix of float)
-0:342        'inF0' (in 3X3 matrix of float)
-0:345      Branch: Return with expression
+0:347      all (global bool)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      Absolute value (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      arc cosine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      any (global bool)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      arc sine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      arc tangent (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      arc tangent (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      Ceiling (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      clamp (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347        'inF2' (in 3X3 matrix of float)
+0:347      cosine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      hyp. cosine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      degrees (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      determinant (global float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      exp (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      exp2 (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      findMSB (global int)
+0:347        Constant:
+0:347          7 (const int)
+0:347      findLSB (global int)
+0:347        Constant:
+0:347          7 (const int)
+0:347      Floor (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      mod (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      Fraction (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      frexp (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      ldexp (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      mix (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347        'inF2' (in 3X3 matrix of float)
+0:347      log (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      matrix-scale (temp 3X3 matrix of float)
+0:347        log2 (temp 3X3 matrix of float)
+0:347          'inF0' (in 3X3 matrix of float)
+0:347        Constant:
+0:347          0.301030
+0:347      log2 (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      max (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      min (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      pow (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      radians (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      roundEven (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      inverse sqrt (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      clamp (temp 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        Constant:
+0:347          0.000000
+0:347        Constant:
+0:347          1.000000
+0:347      Sign (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      sine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      Sequence
+0:347        move second child to first child (temp 3X3 matrix of float)
+0:347          'inF1' (in 3X3 matrix of float)
+0:347          sine (temp 3X3 matrix of float)
+0:347            'inF0' (in 3X3 matrix of float)
+0:347        move second child to first child (temp 3X3 matrix of float)
+0:347          'inF2' (in 3X3 matrix of float)
+0:347          cosine (temp 3X3 matrix of float)
+0:347            'inF0' (in 3X3 matrix of float)
+0:347      hyp. sine (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      smoothstep (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347        'inF2' (in 3X3 matrix of float)
+0:347      sqrt (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      step (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347        'inF1' (in 3X3 matrix of float)
+0:347      tangent (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      hyp. tangent (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      transpose (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:347      trunc (global 3X3 matrix of float)
+0:347        'inF0' (in 3X3 matrix of float)
+0:350      Branch: Return with expression
 0:?         Constant:
 0:?           3.000000
 0:?           3.000000
@@ -2151,127 +2344,131 @@ Shader version: 450
 0:?           3.000000
 0:?           3.000000
 0:?           3.000000
-0:369  Function Definition: VertexShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float)
-0:349    Function Parameters: 
-0:349      'inF0' (in 4X4 matrix of float)
-0:349      'inF1' (in 4X4 matrix of float)
-0:349      'inF2' (in 4X4 matrix of float)
+0:374  Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; (global 4X4 matrix of float)
+0:354    Function Parameters: 
+0:354      'inF0' (in 4X4 matrix of float)
+0:354      'inF1' (in 4X4 matrix of float)
+0:354      'inF2' (in 4X4 matrix of float)
 0:?     Sequence
-0:351      all (global bool)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      Absolute value (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      arc cosine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      any (global bool)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      arc sine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      arc tangent (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      arc tangent (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      Ceiling (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      clamp (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351        'inF2' (in 4X4 matrix of float)
-0:351      cosine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      hyp. cosine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      degrees (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      determinant (global float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      exp (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      exp2 (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      findMSB (global int)
-0:351        Constant:
-0:351          7 (const int)
-0:351      findLSB (global int)
-0:351        Constant:
-0:351          7 (const int)
-0:351      Floor (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      mod (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      Fraction (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      frexp (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      ldexp (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      log (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      matrix-scale (temp 4X4 matrix of float)
-0:351        log2 (temp 4X4 matrix of float)
-0:351          'inF0' (in 4X4 matrix of float)
-0:351        Constant:
-0:351          0.301030
-0:351      log2 (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      max (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      min (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      pow (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      radians (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      roundEven (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      inverse sqrt (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      clamp (temp 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        Constant:
-0:351          0.000000
-0:351        Constant:
-0:351          1.000000
-0:351      Sign (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      sine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      Sequence
-0:351        move second child to first child (temp 4X4 matrix of float)
-0:351          'inF1' (in 4X4 matrix of float)
-0:351          sine (temp 4X4 matrix of float)
-0:351            'inF0' (in 4X4 matrix of float)
-0:351        move second child to first child (temp 4X4 matrix of float)
-0:351          'inF2' (in 4X4 matrix of float)
-0:351          cosine (temp 4X4 matrix of float)
-0:351            'inF0' (in 4X4 matrix of float)
-0:351      hyp. sine (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      smoothstep (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351        'inF2' (in 4X4 matrix of float)
-0:351      sqrt (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      step (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351        'inF1' (in 4X4 matrix of float)
-0:351      tangent (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      hyp. tangent (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      transpose (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:351      trunc (global 4X4 matrix of float)
-0:351        'inF0' (in 4X4 matrix of float)
-0:354      Branch: Return with expression
+0:356      all (global bool)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      Absolute value (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      arc cosine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      any (global bool)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      arc sine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      arc tangent (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      arc tangent (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      Ceiling (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      clamp (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356        'inF2' (in 4X4 matrix of float)
+0:356      cosine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      hyp. cosine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      degrees (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      determinant (global float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      exp (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      exp2 (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      findMSB (global int)
+0:356        Constant:
+0:356          7 (const int)
+0:356      findLSB (global int)
+0:356        Constant:
+0:356          7 (const int)
+0:356      Floor (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      mod (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      Fraction (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      frexp (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      ldexp (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      mix (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356        'inF2' (in 4X4 matrix of float)
+0:356      log (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      matrix-scale (temp 4X4 matrix of float)
+0:356        log2 (temp 4X4 matrix of float)
+0:356          'inF0' (in 4X4 matrix of float)
+0:356        Constant:
+0:356          0.301030
+0:356      log2 (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      max (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      min (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      pow (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      radians (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      roundEven (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      inverse sqrt (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      clamp (temp 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        Constant:
+0:356          0.000000
+0:356        Constant:
+0:356          1.000000
+0:356      Sign (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      sine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      Sequence
+0:356        move second child to first child (temp 4X4 matrix of float)
+0:356          'inF1' (in 4X4 matrix of float)
+0:356          sine (temp 4X4 matrix of float)
+0:356            'inF0' (in 4X4 matrix of float)
+0:356        move second child to first child (temp 4X4 matrix of float)
+0:356          'inF2' (in 4X4 matrix of float)
+0:356          cosine (temp 4X4 matrix of float)
+0:356            'inF0' (in 4X4 matrix of float)
+0:356      hyp. sine (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      smoothstep (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356        'inF2' (in 4X4 matrix of float)
+0:356      sqrt (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      step (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356        'inF1' (in 4X4 matrix of float)
+0:356      tangent (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      hyp. tangent (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      transpose (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:356      trunc (global 4X4 matrix of float)
+0:356        'inF0' (in 4X4 matrix of float)
+0:359      Branch: Return with expression
 0:?         Constant:
 0:?           4.000000
 0:?           4.000000
@@ -2289,639 +2486,1750 @@ Shader version: 450
 0:?           4.000000
 0:?           4.000000
 0:?           4.000000
-0:376  Function Definition: TestGenMul(f1;f1;vf2;vf2;mf22;mf22; (temp void)
-0:372    Function Parameters: 
-0:372      'inF0' (in float)
-0:372      'inF1' (in float)
-0:372      'inFV0' (in 2-component vector of float)
-0:372      'inFV1' (in 2-component vector of float)
-0:372      'inFM0' (in 2X2 matrix of float)
-0:372      'inFM1' (in 2X2 matrix of float)
+0:381  Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; (global void)
+0:377    Function Parameters: 
+0:377      'inF0' (in float)
+0:377      'inF1' (in float)
+0:377      'inFV0' (in 2-component vector of float)
+0:377      'inFV1' (in 2-component vector of float)
+0:377      'inFM0' (in 2X2 matrix of float)
+0:377      'inFM1' (in 2X2 matrix of float)
 0:?     Sequence
-0:373      move second child to first child (temp float)
-0:373        'r0' (temp float)
-0:373        component-wise multiply (temp float)
-0:373          'inF0' (in float)
-0:373          'inF1' (in float)
-0:373      move second child to first child (temp 2-component vector of float)
-0:373        'r1' (temp 2-component vector of float)
-0:373        vector-scale (temp 2-component vector of float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373          'inF0' (in float)
-0:373      move second child to first child (temp 2-component vector of float)
-0:373        'r2' (temp 2-component vector of float)
-0:373        vector-scale (temp 2-component vector of float)
-0:373          'inF0' (in float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373      move second child to first child (temp float)
-0:373        'r3' (temp float)
-0:373        dot-product (global float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373          'inFV1' (in 2-component vector of float)
-0:373      move second child to first child (temp 2-component vector of float)
-0:373        'r4' (temp 2-component vector of float)
-0:373        matrix-times-vector (temp 2-component vector of float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373      move second child to first child (temp 2-component vector of float)
-0:373        'r5' (temp 2-component vector of float)
-0:373        vector-times-matrix (temp 2-component vector of float)
-0:373          'inFV0' (in 2-component vector of float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373      move second child to first child (temp 2X2 matrix of float)
-0:373        'r6' (temp 2X2 matrix of float)
-0:373        matrix-scale (temp 2X2 matrix of float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373          'inF0' (in float)
-0:373      move second child to first child (temp 2X2 matrix of float)
-0:373        'r7' (temp 2X2 matrix of float)
-0:373        matrix-scale (temp 2X2 matrix of float)
-0:373          'inF0' (in float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373      move second child to first child (temp 2X2 matrix of float)
-0:373        'r8' (temp 2X2 matrix of float)
-0:373        matrix-multiply (temp 2X2 matrix of float)
-0:373          'inFM0' (in 2X2 matrix of float)
-0:373          'inFM1' (in 2X2 matrix of float)
-0:383  Function Definition: TestGenMul(f1;f1;vf3;vf3;mf33;mf33; (temp void)
-0:379    Function Parameters: 
-0:379      'inF0' (in float)
-0:379      'inF1' (in float)
-0:379      'inFV0' (in 3-component vector of float)
-0:379      'inFV1' (in 3-component vector of float)
-0:379      'inFM0' (in 3X3 matrix of float)
-0:379      'inFM1' (in 3X3 matrix of float)
+0:378      Sequence
+0:378        move second child to first child (temp float)
+0:378          'r0' (temp float)
+0:378          component-wise multiply (temp float)
+0:378            'inF0' (in float)
+0:378            'inF1' (in float)
+0:378      Sequence
+0:378        move second child to first child (temp 2-component vector of float)
+0:378          'r1' (temp 2-component vector of float)
+0:378          vector-scale (temp 2-component vector of float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378            'inF0' (in float)
+0:378      Sequence
+0:378        move second child to first child (temp 2-component vector of float)
+0:378          'r2' (temp 2-component vector of float)
+0:378          vector-scale (temp 2-component vector of float)
+0:378            'inF0' (in float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378      Sequence
+0:378        move second child to first child (temp float)
+0:378          'r3' (temp float)
+0:378          dot-product (global float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378            'inFV1' (in 2-component vector of float)
+0:378      Sequence
+0:378        move second child to first child (temp 2-component vector of float)
+0:378          'r4' (temp 2-component vector of float)
+0:378          matrix-times-vector (temp 2-component vector of float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378      Sequence
+0:378        move second child to first child (temp 2-component vector of float)
+0:378          'r5' (temp 2-component vector of float)
+0:378          vector-times-matrix (temp 2-component vector of float)
+0:378            'inFV0' (in 2-component vector of float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378      Sequence
+0:378        move second child to first child (temp 2X2 matrix of float)
+0:378          'r6' (temp 2X2 matrix of float)
+0:378          matrix-scale (temp 2X2 matrix of float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378            'inF0' (in float)
+0:378      Sequence
+0:378        move second child to first child (temp 2X2 matrix of float)
+0:378          'r7' (temp 2X2 matrix of float)
+0:378          matrix-scale (temp 2X2 matrix of float)
+0:378            'inF0' (in float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378      Sequence
+0:378        move second child to first child (temp 2X2 matrix of float)
+0:378          'r8' (temp 2X2 matrix of float)
+0:378          matrix-multiply (temp 2X2 matrix of float)
+0:378            'inFM0' (in 2X2 matrix of float)
+0:378            'inFM1' (in 2X2 matrix of float)
+0:388  Function Definition: TestGenMul3(f1;f1;vf3;vf3;mf33;mf33; (global void)
+0:384    Function Parameters: 
+0:384      'inF0' (in float)
+0:384      'inF1' (in float)
+0:384      'inFV0' (in 3-component vector of float)
+0:384      'inFV1' (in 3-component vector of float)
+0:384      'inFM0' (in 3X3 matrix of float)
+0:384      'inFM1' (in 3X3 matrix of float)
 0:?     Sequence
-0:380      move second child to first child (temp float)
-0:380        'r0' (temp float)
-0:380        component-wise multiply (temp float)
-0:380          'inF0' (in float)
-0:380          'inF1' (in float)
-0:380      move second child to first child (temp 3-component vector of float)
-0:380        'r1' (temp 3-component vector of float)
-0:380        vector-scale (temp 3-component vector of float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380          'inF0' (in float)
-0:380      move second child to first child (temp 3-component vector of float)
-0:380        'r2' (temp 3-component vector of float)
-0:380        vector-scale (temp 3-component vector of float)
-0:380          'inF0' (in float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380      move second child to first child (temp float)
-0:380        'r3' (temp float)
-0:380        dot-product (global float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380          'inFV1' (in 3-component vector of float)
-0:380      move second child to first child (temp 3-component vector of float)
-0:380        'r4' (temp 3-component vector of float)
-0:380        matrix-times-vector (temp 3-component vector of float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380      move second child to first child (temp 3-component vector of float)
-0:380        'r5' (temp 3-component vector of float)
-0:380        vector-times-matrix (temp 3-component vector of float)
-0:380          'inFV0' (in 3-component vector of float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380      move second child to first child (temp 3X3 matrix of float)
-0:380        'r6' (temp 3X3 matrix of float)
-0:380        matrix-scale (temp 3X3 matrix of float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380          'inF0' (in float)
-0:380      move second child to first child (temp 3X3 matrix of float)
-0:380        'r7' (temp 3X3 matrix of float)
-0:380        matrix-scale (temp 3X3 matrix of float)
-0:380          'inF0' (in float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380      move second child to first child (temp 3X3 matrix of float)
-0:380        'r8' (temp 3X3 matrix of float)
-0:380        matrix-multiply (temp 3X3 matrix of float)
-0:380          'inFM0' (in 3X3 matrix of float)
-0:380          'inFM1' (in 3X3 matrix of float)
-0:389  Function Definition: TestGenMul(f1;f1;vf4;vf4;mf44;mf44; (temp void)
-0:386    Function Parameters: 
-0:386      'inF0' (in float)
-0:386      'inF1' (in float)
-0:386      'inFV0' (in 4-component vector of float)
-0:386      'inFV1' (in 4-component vector of float)
-0:386      'inFM0' (in 4X4 matrix of float)
-0:386      'inFM1' (in 4X4 matrix of float)
+0:385      Sequence
+0:385        move second child to first child (temp float)
+0:385          'r0' (temp float)
+0:385          component-wise multiply (temp float)
+0:385            'inF0' (in float)
+0:385            'inF1' (in float)
+0:385      Sequence
+0:385        move second child to first child (temp 3-component vector of float)
+0:385          'r1' (temp 3-component vector of float)
+0:385          vector-scale (temp 3-component vector of float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385            'inF0' (in float)
+0:385      Sequence
+0:385        move second child to first child (temp 3-component vector of float)
+0:385          'r2' (temp 3-component vector of float)
+0:385          vector-scale (temp 3-component vector of float)
+0:385            'inF0' (in float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385      Sequence
+0:385        move second child to first child (temp float)
+0:385          'r3' (temp float)
+0:385          dot-product (global float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385            'inFV1' (in 3-component vector of float)
+0:385      Sequence
+0:385        move second child to first child (temp 3-component vector of float)
+0:385          'r4' (temp 3-component vector of float)
+0:385          matrix-times-vector (temp 3-component vector of float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385      Sequence
+0:385        move second child to first child (temp 3-component vector of float)
+0:385          'r5' (temp 3-component vector of float)
+0:385          vector-times-matrix (temp 3-component vector of float)
+0:385            'inFV0' (in 3-component vector of float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385      Sequence
+0:385        move second child to first child (temp 3X3 matrix of float)
+0:385          'r6' (temp 3X3 matrix of float)
+0:385          matrix-scale (temp 3X3 matrix of float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385            'inF0' (in float)
+0:385      Sequence
+0:385        move second child to first child (temp 3X3 matrix of float)
+0:385          'r7' (temp 3X3 matrix of float)
+0:385          matrix-scale (temp 3X3 matrix of float)
+0:385            'inF0' (in float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385      Sequence
+0:385        move second child to first child (temp 3X3 matrix of float)
+0:385          'r8' (temp 3X3 matrix of float)
+0:385          matrix-multiply (temp 3X3 matrix of float)
+0:385            'inFM0' (in 3X3 matrix of float)
+0:385            'inFM1' (in 3X3 matrix of float)
+0:396  Function Definition: TestGenMul4(f1;f1;vf4;vf4;mf44;mf44; (global void)
+0:391    Function Parameters: 
+0:391      'inF0' (in float)
+0:391      'inF1' (in float)
+0:391      'inFV0' (in 4-component vector of float)
+0:391      'inFV1' (in 4-component vector of float)
+0:391      'inFM0' (in 4X4 matrix of float)
+0:391      'inFM1' (in 4X4 matrix of float)
 0:?     Sequence
-0:387      move second child to first child (temp float)
-0:387        'r0' (temp float)
-0:387        component-wise multiply (temp float)
-0:387          'inF0' (in float)
-0:387          'inF1' (in float)
-0:387      move second child to first child (temp 4-component vector of float)
-0:387        'r1' (temp 4-component vector of float)
-0:387        vector-scale (temp 4-component vector of float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387          'inF0' (in float)
-0:387      move second child to first child (temp 4-component vector of float)
-0:387        'r2' (temp 4-component vector of float)
-0:387        vector-scale (temp 4-component vector of float)
-0:387          'inF0' (in float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387      move second child to first child (temp float)
-0:387        'r3' (temp float)
-0:387        dot-product (global float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387          'inFV1' (in 4-component vector of float)
-0:387      move second child to first child (temp 4-component vector of float)
-0:387        'r4' (temp 4-component vector of float)
-0:387        matrix-times-vector (temp 4-component vector of float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387      move second child to first child (temp 4-component vector of float)
-0:387        'r5' (temp 4-component vector of float)
-0:387        vector-times-matrix (temp 4-component vector of float)
-0:387          'inFV0' (in 4-component vector of float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387      move second child to first child (temp 4X4 matrix of float)
-0:387        'r6' (temp 4X4 matrix of float)
-0:387        matrix-scale (temp 4X4 matrix of float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387          'inF0' (in float)
-0:387      move second child to first child (temp 4X4 matrix of float)
-0:387        'r7' (temp 4X4 matrix of float)
-0:387        matrix-scale (temp 4X4 matrix of float)
-0:387          'inF0' (in float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387      move second child to first child (temp 4X4 matrix of float)
-0:387        'r8' (temp 4X4 matrix of float)
-0:387        matrix-multiply (temp 4X4 matrix of float)
-0:387          'inFM0' (in 4X4 matrix of float)
-0:387          'inFM1' (in 4X4 matrix of float)
+0:392      Sequence
+0:392        move second child to first child (temp float)
+0:392          'r0' (temp float)
+0:392          component-wise multiply (temp float)
+0:392            'inF0' (in float)
+0:392            'inF1' (in float)
+0:392      Sequence
+0:392        move second child to first child (temp 4-component vector of float)
+0:392          'r1' (temp 4-component vector of float)
+0:392          vector-scale (temp 4-component vector of float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392            'inF0' (in float)
+0:392      Sequence
+0:392        move second child to first child (temp 4-component vector of float)
+0:392          'r2' (temp 4-component vector of float)
+0:392          vector-scale (temp 4-component vector of float)
+0:392            'inF0' (in float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392      Sequence
+0:392        move second child to first child (temp float)
+0:392          'r3' (temp float)
+0:392          dot-product (global float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392            'inFV1' (in 4-component vector of float)
+0:392      Sequence
+0:392        move second child to first child (temp 4-component vector of float)
+0:392          'r4' (temp 4-component vector of float)
+0:392          matrix-times-vector (temp 4-component vector of float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392      Sequence
+0:392        move second child to first child (temp 4-component vector of float)
+0:392          'r5' (temp 4-component vector of float)
+0:392          vector-times-matrix (temp 4-component vector of float)
+0:392            'inFV0' (in 4-component vector of float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392      Sequence
+0:392        move second child to first child (temp 4X4 matrix of float)
+0:392          'r6' (temp 4X4 matrix of float)
+0:392          matrix-scale (temp 4X4 matrix of float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392            'inF0' (in float)
+0:392      Sequence
+0:392        move second child to first child (temp 4X4 matrix of float)
+0:392          'r7' (temp 4X4 matrix of float)
+0:392          matrix-scale (temp 4X4 matrix of float)
+0:392            'inF0' (in float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392      Sequence
+0:392        move second child to first child (temp 4X4 matrix of float)
+0:392          'r8' (temp 4X4 matrix of float)
+0:392          matrix-multiply (temp 4X4 matrix of float)
+0:392            'inFM0' (in 4X4 matrix of float)
+0:392            'inFM1' (in 4X4 matrix of float)
+0:420  Function Definition: TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42; (global void)
+0:401    Function Parameters: 
+0:401      'inF0' (in float)
+0:401      'inF1' (in float)
+0:401      'inFV2' (in 2-component vector of float)
+0:401      'inFV3' (in 3-component vector of float)
+0:401      'inFM2x3' (in 3X2 matrix of float)
+0:401      'inFM3x2' (in 2X3 matrix of float)
+0:401      'inFM3x3' (in 3X3 matrix of float)
+0:401      'inFM3x4' (in 4X3 matrix of float)
+0:401      'inFM2x4' (in 4X2 matrix of float)
+0:?     Sequence
+0:402      Sequence
+0:402        move second child to first child (temp float)
+0:402          'r00' (temp float)
+0:402          component-wise multiply (temp float)
+0:402            'inF0' (in float)
+0:402            'inF1' (in float)
+0:403      Sequence
+0:403        move second child to first child (temp 2-component vector of float)
+0:403          'r01' (temp 2-component vector of float)
+0:403          vector-scale (temp 2-component vector of float)
+0:403            'inFV2' (in 2-component vector of float)
+0:403            'inF0' (in float)
+0:404      Sequence
+0:404        move second child to first child (temp 3-component vector of float)
+0:404          'r02' (temp 3-component vector of float)
+0:404          vector-scale (temp 3-component vector of float)
+0:404            'inFV3' (in 3-component vector of float)
+0:404            'inF0' (in float)
+0:405      Sequence
+0:405        move second child to first child (temp 2-component vector of float)
+0:405          'r03' (temp 2-component vector of float)
+0:405          vector-scale (temp 2-component vector of float)
+0:405            'inF0' (in float)
+0:405            'inFV2' (in 2-component vector of float)
+0:406      Sequence
+0:406        move second child to first child (temp 3-component vector of float)
+0:406          'r04' (temp 3-component vector of float)
+0:406          vector-scale (temp 3-component vector of float)
+0:406            'inF0' (in float)
+0:406            'inFV3' (in 3-component vector of float)
+0:407      Sequence
+0:407        move second child to first child (temp float)
+0:407          'r05' (temp float)
+0:407          dot-product (global float)
+0:407            'inFV2' (in 2-component vector of float)
+0:407            'inFV2' (in 2-component vector of float)
+0:408      Sequence
+0:408        move second child to first child (temp float)
+0:408          'r06' (temp float)
+0:408          dot-product (global float)
+0:408            'inFV3' (in 3-component vector of float)
+0:408            'inFV3' (in 3-component vector of float)
+0:409      Sequence
+0:409        move second child to first child (temp 3-component vector of float)
+0:409          'r07' (temp 3-component vector of float)
+0:409          vector-times-matrix (temp 3-component vector of float)
+0:409            'inFV2' (in 2-component vector of float)
+0:409            'inFM2x3' (in 3X2 matrix of float)
+0:410      Sequence
+0:410        move second child to first child (temp 2-component vector of float)
+0:410          'r08' (temp 2-component vector of float)
+0:410          vector-times-matrix (temp 2-component vector of float)
+0:410            'inFV3' (in 3-component vector of float)
+0:410            'inFM3x2' (in 2X3 matrix of float)
+0:411      Sequence
+0:411        move second child to first child (temp 2-component vector of float)
+0:411          'r09' (temp 2-component vector of float)
+0:411          matrix-times-vector (temp 2-component vector of float)
+0:411            'inFM2x3' (in 3X2 matrix of float)
+0:411            'inFV3' (in 3-component vector of float)
+0:412      Sequence
+0:412        move second child to first child (temp 3-component vector of float)
+0:412          'r10' (temp 3-component vector of float)
+0:412          matrix-times-vector (temp 3-component vector of float)
+0:412            'inFM3x2' (in 2X3 matrix of float)
+0:412            'inFV2' (in 2-component vector of float)
+0:413      Sequence
+0:413        move second child to first child (temp 3X2 matrix of float)
+0:413          'r11' (temp 3X2 matrix of float)
+0:413          matrix-scale (temp 3X2 matrix of float)
+0:413            'inFM2x3' (in 3X2 matrix of float)
+0:413            'inF0' (in float)
+0:414      Sequence
+0:414        move second child to first child (temp 2X3 matrix of float)
+0:414          'r12' (temp 2X3 matrix of float)
+0:414          matrix-scale (temp 2X3 matrix of float)
+0:414            'inFM3x2' (in 2X3 matrix of float)
+0:414            'inF0' (in float)
+0:415      Sequence
+0:415        move second child to first child (temp 2X2 matrix of float)
+0:415          'r13' (temp 2X2 matrix of float)
+0:415          matrix-multiply (temp 2X2 matrix of float)
+0:415            'inFM2x3' (in 3X2 matrix of float)
+0:415            'inFM3x2' (in 2X3 matrix of float)
+0:416      Sequence
+0:416        move second child to first child (temp 3X2 matrix of float)
+0:416          'r14' (temp 3X2 matrix of float)
+0:416          matrix-multiply (temp 3X2 matrix of float)
+0:416            'inFM2x3' (in 3X2 matrix of float)
+0:416            'inFM3x3' (in 3X3 matrix of float)
+0:417      Sequence
+0:417        move second child to first child (temp 4X2 matrix of float)
+0:417          'r15' (temp 4X2 matrix of float)
+0:417          matrix-multiply (temp 4X2 matrix of float)
+0:417            'inFM2x3' (in 3X2 matrix of float)
+0:417            'inFM3x4' (in 4X3 matrix of float)
+0:418      Sequence
+0:418        move second child to first child (temp 4X3 matrix of float)
+0:418          'r16' (temp 4X3 matrix of float)
+0:418          matrix-multiply (temp 4X3 matrix of float)
+0:418            'inFM3x2' (in 2X3 matrix of float)
+0:418            'inFM2x4' (in 4X2 matrix of float)
 0:?   Linker Objects
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 1090
+// Id's are bound by 1238
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "VertexShaderFunction" 48 67 73 80 174 192 198 205 321 339 345 352 470 488 494 501 626 640 647 742 756 763 861 875 882
+                              EntryPoint Vertex 4  "VertexShaderFunction"
                               Source HLSL 450
                               Name 4  "VertexShaderFunction"
-                              Name 19  "TestGenMul(f1;f1;vf2;vf2;mf22;mf22;"
-                              Name 13  "inF0"
-                              Name 14  "inF1"
-                              Name 15  "inFV0"
-                              Name 16  "inFV1"
-                              Name 17  "inFM0"
-                              Name 18  "inFM1"
-                              Name 32  "TestGenMul(f1;f1;vf3;vf3;mf33;mf33;"
-                              Name 26  "inF0"
-                              Name 27  "inF1"
-                              Name 28  "inFV0"
-                              Name 29  "inFV1"
-                              Name 30  "inFM0"
-                              Name 31  "inFM1"
-                              Name 45  "TestGenMul(f1;f1;vf4;vf4;mf44;mf44;"
-                              Name 39  "inF0"
-                              Name 40  "inF1"
-                              Name 41  "inFV0"
-                              Name 42  "inFV1"
-                              Name 43  "inFM0"
-                              Name 44  "inFM1"
-                              Name 48  "inF0"
-                              Name 67  "inU0"
-                              Name 73  "inF1"
-                              Name 80  "inF2"
-                              Name 106  "ResType"
-                              Name 174  "inF0"
-                              Name 192  "inU0"
-                              Name 198  "inF1"
-                              Name 205  "inF2"
-                              Name 241  "ResType"
-                              Name 321  "inF0"
-                              Name 339  "inU0"
-                              Name 345  "inF1"
-                              Name 352  "inF2"
-                              Name 391  "ResType"
-                              Name 470  "inF0"
-                              Name 488  "inU0"
-                              Name 494  "inF1"
-                              Name 501  "inF2"
-                              Name 546  "ResType"
-                              Name 626  "inF0"
-                              Name 640  "inF1"
-                              Name 647  "inF2"
-                              Name 678  "ResType"
-                              Name 742  "inF0"
-                              Name 756  "inF1"
-                              Name 763  "inF2"
-                              Name 797  "ResType"
-                              Name 861  "inF0"
-                              Name 875  "inF1"
-                              Name 882  "inF2"
-                              Name 919  "ResType"
-                              Name 982  "r0"
-                              Name 986  "r1"
-                              Name 990  "r2"
-                              Name 994  "r3"
-                              Name 998  "r4"
-                              Name 1002  "r5"
-                              Name 1006  "r6"
-                              Name 1010  "r7"
-                              Name 1014  "r8"
-                              Name 1018  "r0"
-                              Name 1022  "r1"
-                              Name 1026  "r2"
-                              Name 1030  "r3"
-                              Name 1034  "r4"
-                              Name 1038  "r5"
-                              Name 1042  "r6"
-                              Name 1046  "r7"
-                              Name 1050  "r8"
-                              Name 1054  "r0"
-                              Name 1058  "r1"
-                              Name 1062  "r2"
-                              Name 1066  "r3"
-                              Name 1070  "r4"
-                              Name 1074  "r5"
-                              Name 1078  "r6"
-                              Name 1082  "r7"
-                              Name 1086  "r8"
+                              Name 16  "VertexShaderFunctionS(f1;f1;f1;u1;u1;"
+                              Name 11  "inF0"
+                              Name 12  "inF1"
+                              Name 13  "inF2"
+                              Name 14  "inU0"
+                              Name 15  "inU1"
+                              Name 22  "VertexShaderFunction1(vf1;vf1;vf1;"
+                              Name 19  "inF0"
+                              Name 20  "inF1"
+                              Name 21  "inF2"
+                              Name 34  "VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2;"
+                              Name 29  "inF0"
+                              Name 30  "inF1"
+                              Name 31  "inF2"
+                              Name 32  "inU0"
+                              Name 33  "inU1"
+                              Name 46  "VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3;"
+                              Name 41  "inF0"
+                              Name 42  "inF1"
+                              Name 43  "inF2"
+                              Name 44  "inU0"
+                              Name 45  "inU1"
+                              Name 58  "VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4;"
+                              Name 53  "inF0"
+                              Name 54  "inF1"
+                              Name 55  "inF2"
+                              Name 56  "inU0"
+                              Name 57  "inU1"
+                              Name 66  "VertexShaderFunction2x2(mf22;mf22;mf22;"
+                              Name 63  "inF0"
+                              Name 64  "inF1"
+                              Name 65  "inF2"
+                              Name 74  "VertexShaderFunction3x3(mf33;mf33;mf33;"
+                              Name 71  "inF0"
+                              Name 72  "inF1"
+                              Name 73  "inF2"
+                              Name 82  "VertexShaderFunction4x4(mf44;mf44;mf44;"
+                              Name 79  "inF0"
+                              Name 80  "inF1"
+                              Name 81  "inF2"
+                              Name 91  "TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;"
+                              Name 85  "inF0"
+                              Name 86  "inF1"
+                              Name 87  "inFV0"
+                              Name 88  "inFV1"
+                              Name 89  "inFM0"
+                              Name 90  "inFM1"
+                              Name 100  "TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;"
+                              Name 94  "inF0"
+                              Name 95  "inF1"
+                              Name 96  "inFV0"
+                              Name 97  "inFV1"
+                              Name 98  "inFM0"
+                              Name 99  "inFM1"
+                              Name 109  "TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;"
+                              Name 103  "inF0"
+                              Name 104  "inF1"
+                              Name 105  "inFV0"
+                              Name 106  "inFV1"
+                              Name 107  "inFM0"
+                              Name 108  "inFM1"
+                              Name 129  "TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42;"
+                              Name 120  "inF0"
+                              Name 121  "inF1"
+                              Name 122  "inFV2"
+                              Name 123  "inFV3"
+                              Name 124  "inFM2x3"
+                              Name 125  "inFM3x2"
+                              Name 126  "inFM3x3"
+                              Name 127  "inFM3x4"
+                              Name 128  "inFM2x4"
+                              Name 183  "ResType"
+                              Name 317  "ResType"
+                              Name 465  "ResType"
+                              Name 618  "ResType"
+                              Name 751  "ResType"
+                              Name 871  "ResType"
+                              Name 994  "ResType"
+                              Name 1062  "r0"
+                              Name 1066  "r1"
+                              Name 1070  "r2"
+                              Name 1074  "r3"
+                              Name 1078  "r4"
+                              Name 1082  "r5"
+                              Name 1086  "r6"
+                              Name 1090  "r7"
+                              Name 1094  "r8"
+                              Name 1098  "r0"
+                              Name 1102  "r1"
+                              Name 1106  "r2"
+                              Name 1110  "r3"
+                              Name 1114  "r4"
+                              Name 1118  "r5"
+                              Name 1122  "r6"
+                              Name 1126  "r7"
+                              Name 1130  "r8"
+                              Name 1134  "r0"
+                              Name 1138  "r1"
+                              Name 1142  "r2"
+                              Name 1146  "r3"
+                              Name 1150  "r4"
+                              Name 1154  "r5"
+                              Name 1158  "r6"
+                              Name 1162  "r7"
+                              Name 1166  "r8"
+                              Name 1170  "r00"
+                              Name 1174  "r01"
+                              Name 1178  "r02"
+                              Name 1182  "r03"
+                              Name 1186  "r04"
+                              Name 1190  "r05"
+                              Name 1194  "r06"
+                              Name 1198  "r07"
+                              Name 1202  "r08"
+                              Name 1206  "r09"
+                              Name 1210  "r10"
+                              Name 1214  "r11"
+                              Name 1218  "r12"
+                              Name 1222  "r13"
+                              Name 1226  "r14"
+                              Name 1230  "r15"
+                              Name 1234  "r16"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypePointer Function 6(float)
-               8:             TypeVector 6(float) 2
-               9:             TypePointer Function 8(fvec2)
-              10:             TypeMatrix 8(fvec2) 2
-              11:             TypePointer Function 10
-              12:             TypeFunction 2 7(ptr) 7(ptr) 9(ptr) 9(ptr) 11(ptr) 11(ptr)
-              21:             TypeVector 6(float) 3
-              22:             TypePointer Function 21(fvec3)
-              23:             TypeMatrix 21(fvec3) 3
-              24:             TypePointer Function 23
-              25:             TypeFunction 2 7(ptr) 7(ptr) 22(ptr) 22(ptr) 24(ptr) 24(ptr)
-              34:             TypeVector 6(float) 4
-              35:             TypePointer Function 34(fvec4)
-              36:             TypeMatrix 34(fvec4) 4
-              37:             TypePointer Function 36
-              38:             TypeFunction 2 7(ptr) 7(ptr) 35(ptr) 35(ptr) 37(ptr) 37(ptr)
-              47:             TypePointer Input 6(float)
-        48(inF0):     47(ptr) Variable Input
-              50:             TypeBool
-              61:             TypeInt 32 1
-              64:             TypeInt 32 0
-              66:             TypePointer Input 64(int)
-        67(inU0):     66(ptr) Variable Input
-        73(inF1):     47(ptr) Variable Input
-        80(inF2):     47(ptr) Variable Input
-              87:     64(int) Constant 7
-              95:     61(int) Constant 7
-    106(ResType):             TypeStruct 6(float) 61(int)
-             121:    6(float) Constant 1050288283
-             136:     64(int) Constant 2
-             143:    6(float) Constant 0
-             144:    6(float) Constant 1065353216
-             173:             TypePointer Input 8(fvec2)
-       174(inF0):    173(ptr) Variable Input
-             186:             TypeVector 61(int) 2
-             189:             TypeVector 64(int) 2
-             191:             TypePointer Input 189(ivec2)
-       192(inU0):    191(ptr) Variable Input
-       198(inF1):    173(ptr) Variable Input
-       205(inF2):    173(ptr) Variable Input
-             212:     64(int) Constant 3
-             213:  189(ivec2) ConstantComposite 87 212
-    241(ResType):             TypeStruct 8(fvec2) 186(ivec2)
-             246:             TypeVector 50(bool) 2
-             280:    6(float) Constant 1073741824
-             282:     64(int) Constant 1
-             283:  189(ivec2) ConstantComposite 282 136
-             318:    8(fvec2) ConstantComposite 144 280
-             320:             TypePointer Input 21(fvec3)
-       321(inF0):    320(ptr) Variable Input
-             333:             TypeVector 61(int) 3
-             336:             TypeVector 64(int) 3
-             338:             TypePointer Input 336(ivec3)
-       339(inU0):    338(ptr) Variable Input
-       345(inF1):    320(ptr) Variable Input
-       352(inF2):    320(ptr) Variable Input
-             359:     64(int) Constant 5
-             360:  336(ivec3) ConstantComposite 87 212 359
-    391(ResType):             TypeStruct 21(fvec3) 333(ivec3)
-             396:             TypeVector 50(bool) 3
-             431:  336(ivec3) ConstantComposite 282 136 212
-             466:    6(float) Constant 1077936128
-             467:   21(fvec3) ConstantComposite 144 280 466
-             469:             TypePointer Input 34(fvec4)
-       470(inF0):    469(ptr) Variable Input
-             482:             TypeVector 61(int) 4
-             485:             TypeVector 64(int) 4
-             487:             TypePointer Input 485(ivec4)
-       488(inU0):    487(ptr) Variable Input
-       494(inF1):    469(ptr) Variable Input
-       501(inF2):    469(ptr) Variable Input
-             508:  485(ivec4) ConstantComposite 87 212 359 136
-    546(ResType):             TypeStruct 34(fvec4) 482(ivec4)
-             551:             TypeVector 50(bool) 4
-             586:     64(int) Constant 4
-             587:  485(ivec4) ConstantComposite 282 136 212 586
-             622:    6(float) Constant 1082130432
-             623:   34(fvec4) ConstantComposite 144 280 466 622
-             625:             TypePointer Input 10
-       626(inF0):    625(ptr) Variable Input
-       640(inF1):    625(ptr) Variable Input
-       647(inF2):    625(ptr) Variable Input
-    678(ResType):             TypeStruct 10 186(ivec2)
-             738:    8(fvec2) ConstantComposite 280 280
-             739:          10 ConstantComposite 738 738
-             741:             TypePointer Input 23
-       742(inF0):    741(ptr) Variable Input
-       756(inF1):    741(ptr) Variable Input
-       763(inF2):    741(ptr) Variable Input
-    797(ResType):             TypeStruct 23 333(ivec3)
-             857:   21(fvec3) ConstantComposite 466 466 466
-             858:          23 ConstantComposite 857 857 857
-             860:             TypePointer Input 36
-       861(inF0):    860(ptr) Variable Input
-       875(inF1):    860(ptr) Variable Input
-       882(inF2):    860(ptr) Variable Input
-    919(ResType):             TypeStruct 36 482(ivec4)
-             979:   34(fvec4) ConstantComposite 622 622 622 622
-             980:          36 ConstantComposite 979 979 979 979
+               8:             TypeInt 32 0
+               9:             TypePointer Function 8(int)
+              10:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) 9(ptr)
+              18:             TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr)
+              24:             TypeVector 6(float) 2
+              25:             TypePointer Function 24(fvec2)
+              26:             TypeVector 8(int) 2
+              27:             TypePointer Function 26(ivec2)
+              28:             TypeFunction 24(fvec2) 25(ptr) 25(ptr) 25(ptr) 27(ptr) 27(ptr)
+              36:             TypeVector 6(float) 3
+              37:             TypePointer Function 36(fvec3)
+              38:             TypeVector 8(int) 3
+              39:             TypePointer Function 38(ivec3)
+              40:             TypeFunction 36(fvec3) 37(ptr) 37(ptr) 37(ptr) 39(ptr) 39(ptr)
+              48:             TypeVector 6(float) 4
+              49:             TypePointer Function 48(fvec4)
+              50:             TypeVector 8(int) 4
+              51:             TypePointer Function 50(ivec4)
+              52:             TypeFunction 48(fvec4) 49(ptr) 49(ptr) 49(ptr) 51(ptr) 51(ptr)
+              60:             TypeMatrix 24(fvec2) 2
+              61:             TypePointer Function 60
+              62:             TypeFunction 60 61(ptr) 61(ptr) 61(ptr)
+              68:             TypeMatrix 36(fvec3) 3
+              69:             TypePointer Function 68
+              70:             TypeFunction 68 69(ptr) 69(ptr) 69(ptr)
+              76:             TypeMatrix 48(fvec4) 4
+              77:             TypePointer Function 76
+              78:             TypeFunction 76 77(ptr) 77(ptr) 77(ptr)
+              84:             TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 25(ptr) 61(ptr) 61(ptr)
+              93:             TypeFunction 2 7(ptr) 7(ptr) 37(ptr) 37(ptr) 69(ptr) 69(ptr)
+             102:             TypeFunction 2 7(ptr) 7(ptr) 49(ptr) 49(ptr) 77(ptr) 77(ptr)
+             111:             TypeMatrix 24(fvec2) 3
+             112:             TypePointer Function 111
+             113:             TypeMatrix 36(fvec3) 2
+             114:             TypePointer Function 113
+             115:             TypeMatrix 36(fvec3) 4
+             116:             TypePointer Function 115
+             117:             TypeMatrix 24(fvec2) 4
+             118:             TypePointer Function 117
+             119:             TypeFunction 2 7(ptr) 7(ptr) 25(ptr) 37(ptr) 112(ptr) 114(ptr) 69(ptr) 116(ptr) 118(ptr)
+             132:             TypeBool
+             143:             TypeInt 32 1
+             164:      8(int) Constant 7
+             172:    143(int) Constant 7
+    183(ResType):             TypeStruct 6(float) 143(int)
+             202:    6(float) Constant 1050288283
+             217:      8(int) Constant 2
+             224:    6(float) Constant 0
+             225:    6(float) Constant 1065353216
+             267:             TypeVector 143(int) 2
+             288:      8(int) Constant 3
+             289:   26(ivec2) ConstantComposite 164 288
+    317(ResType):             TypeStruct 24(fvec2) 267(ivec2)
+             322:             TypeVector 132(bool) 2
+             360:    6(float) Constant 1073741824
+             362:      8(int) Constant 1
+             363:   26(ivec2) ConstantComposite 362 217
+             398:   24(fvec2) ConstantComposite 225 360
+             412:             TypeVector 143(int) 3
+             433:      8(int) Constant 5
+             434:   38(ivec3) ConstantComposite 164 288 433
+    465(ResType):             TypeStruct 36(fvec3) 412(ivec3)
+             470:             TypeVector 132(bool) 3
+             509:   38(ivec3) ConstantComposite 362 217 288
+             544:    6(float) Constant 1077936128
+             545:   36(fvec3) ConstantComposite 225 360 544
+             559:             TypeVector 143(int) 4
+             580:   50(ivec4) ConstantComposite 164 288 433 217
+    618(ResType):             TypeStruct 48(fvec4) 559(ivec4)
+             623:             TypeVector 132(bool) 4
+             662:      8(int) Constant 4
+             663:   50(ivec4) ConstantComposite 362 217 288 662
+             698:    6(float) Constant 1082130432
+             699:   48(fvec4) ConstantComposite 225 360 544 698
+    751(ResType):             TypeStruct 60 267(ivec2)
+             815:   24(fvec2) ConstantComposite 360 360
+             816:          60 ConstantComposite 815 815
+    871(ResType):             TypeStruct 68 412(ivec3)
+             935:   36(fvec3) ConstantComposite 544 544 544
+             936:          68 ConstantComposite 935 935 935
+    994(ResType):             TypeStruct 76 559(ivec4)
+            1058:   48(fvec4) ConstantComposite 698 698 698 698
+            1059:          76 ConstantComposite 1058 1058 1058 1058
 4(VertexShaderFunction):           2 Function None 3
                5:             Label
-              49:    6(float) Load 48(inF0)
-              51:    50(bool) All 49
-              52:    6(float) Load 48(inF0)
-              53:    6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 52
-              54:    6(float) Load 48(inF0)
-              55:    6(float) ExtInst 1(GLSL.std.450) 17(Acos) 54
-              56:    6(float) Load 48(inF0)
-              57:    50(bool) Any 56
-              58:    6(float) Load 48(inF0)
-              59:    6(float) ExtInst 1(GLSL.std.450) 16(Asin) 58
-              60:    6(float) Load 48(inF0)
-              62:     61(int) Bitcast 60
-              63:    6(float) Load 48(inF0)
-              65:     64(int) Bitcast 63
-              68:     64(int) Load 67(inU0)
-              69:    6(float) Bitcast 68
-              70:    6(float) Load 48(inF0)
-              71:    6(float) ExtInst 1(GLSL.std.450) 18(Atan) 70
-              72:    6(float) Load 48(inF0)
-              74:    6(float) Load 73(inF1)
-              75:    6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 72 74
-              76:    6(float) Load 48(inF0)
-              77:    6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 76
-              78:    6(float) Load 48(inF0)
-              79:    6(float) Load 73(inF1)
-              81:    6(float) Load 80(inF2)
-              82:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 78 79 81
-              83:    6(float) Load 48(inF0)
-              84:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 83
-              85:    6(float) Load 48(inF0)
-              86:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 85
-              88:     64(int) BitCount 87
-              89:    6(float) Load 48(inF0)
-              90:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 89
-              91:    6(float) Load 48(inF0)
-              92:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 91
-              93:    6(float) Load 48(inF0)
-              94:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 93
-              96:     61(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 95
-              97:     61(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 95
-              98:    6(float) Load 48(inF0)
-              99:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 98
-             100:    6(float) Load 48(inF0)
-             101:    6(float) Load 73(inF1)
-             102:    6(float) FMod 100 101
-             103:    6(float) Load 48(inF0)
-             104:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 103
-             105:    6(float) Load 48(inF0)
-             107:106(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 105
-             108:     61(int) CompositeExtract 107 1
-                              Store 73(inF1) 108
-             109:    6(float) CompositeExtract 107 0
-             110:    6(float) Load 48(inF0)
-             111:    50(bool) IsInf 110
-             112:    6(float) Load 48(inF0)
-             113:    50(bool) IsNan 112
-             114:    6(float) Load 48(inF0)
-             115:    6(float) Load 73(inF1)
-             116:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 114 115
-             117:    6(float) Load 48(inF0)
-             118:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 117
-             119:    6(float) Load 48(inF0)
-             120:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 119
-             122:    6(float) FMul 120 121
-             123:    6(float) Load 48(inF0)
-             124:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 123
-             125:    6(float) Load 48(inF0)
-             126:    6(float) Load 73(inF1)
-             127:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 125 126
-             128:    6(float) Load 48(inF0)
-             129:    6(float) Load 73(inF1)
-             130:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 128 129
-             131:    6(float) Load 48(inF0)
-             132:    6(float) Load 73(inF1)
-             133:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 131 132
-             134:    6(float) Load 48(inF0)
-             135:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 134
-             137:     64(int) BitReverse 136
-             138:    6(float) Load 48(inF0)
-             139:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 138
-             140:    6(float) Load 48(inF0)
-             141:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 140
-             142:    6(float) Load 48(inF0)
-             145:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 142 143 144
-             146:    6(float) Load 48(inF0)
-             147:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 146
-             148:    6(float) Load 48(inF0)
-             149:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 148
-             150:    6(float) Load 48(inF0)
-             151:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 150
-                              Store 73(inF1) 151
-             152:    6(float) Load 48(inF0)
-             153:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 152
-                              Store 80(inF2) 153
-             154:    6(float) Load 48(inF0)
-             155:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 154
-             156:    6(float) Load 48(inF0)
-             157:    6(float) Load 73(inF1)
-             158:    6(float) Load 80(inF2)
-             159:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 156 157 158
-             160:    6(float) Load 48(inF0)
-             161:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 160
-             162:    6(float) Load 48(inF0)
-             163:    6(float) Load 73(inF1)
-             164:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 162 163
-             165:    6(float) Load 48(inF0)
-             166:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 165
-             167:    6(float) Load 48(inF0)
-             168:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 167
-             169:    6(float) Load 48(inF0)
-             170:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 169
-                              ReturnValue 143
                               FunctionEnd
-19(TestGenMul(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 12
-        13(inF0):      7(ptr) FunctionParameter
-        14(inF1):      7(ptr) FunctionParameter
-       15(inFV0):      9(ptr) FunctionParameter
-       16(inFV1):      9(ptr) FunctionParameter
-       17(inFM0):     11(ptr) FunctionParameter
-       18(inFM1):     11(ptr) FunctionParameter
-              20:             Label
-         982(r0):      7(ptr) Variable Function
-         986(r1):      9(ptr) Variable Function
-         990(r2):      9(ptr) Variable Function
-         994(r3):      7(ptr) Variable Function
-         998(r4):      9(ptr) Variable Function
-        1002(r5):      9(ptr) Variable Function
-        1006(r6):     11(ptr) Variable Function
-        1010(r7):     11(ptr) Variable Function
-        1014(r8):     11(ptr) Variable Function
-             983:    6(float) Load 13(inF0)
-             984:    6(float) Load 14(inF1)
-             985:    6(float) FMul 983 984
-                              Store 982(r0) 985
-             987:    8(fvec2) Load 15(inFV0)
-             988:    6(float) Load 13(inF0)
-             989:    8(fvec2) VectorTimesScalar 987 988
-                              Store 986(r1) 989
-             991:    6(float) Load 13(inF0)
-             992:    8(fvec2) Load 15(inFV0)
-             993:    8(fvec2) VectorTimesScalar 992 991
-                              Store 990(r2) 993
-             995:    8(fvec2) Load 15(inFV0)
-             996:    8(fvec2) Load 16(inFV1)
-             997:    6(float) Dot 995 996
-                              Store 994(r3) 997
-             999:          10 Load 17(inFM0)
-            1000:    8(fvec2) Load 15(inFV0)
-            1001:    8(fvec2) MatrixTimesVector 999 1000
-                              Store 998(r4) 1001
-            1003:    8(fvec2) Load 15(inFV0)
-            1004:          10 Load 17(inFM0)
-            1005:    8(fvec2) VectorTimesMatrix 1003 1004
-                              Store 1002(r5) 1005
-            1007:          10 Load 17(inFM0)
-            1008:    6(float) Load 13(inF0)
-            1009:          10 MatrixTimesScalar 1007 1008
-                              Store 1006(r6) 1009
-            1011:    6(float) Load 13(inF0)
-            1012:          10 Load 17(inFM0)
-            1013:          10 MatrixTimesScalar 1012 1011
-                              Store 1010(r7) 1013
-            1015:          10 Load 17(inFM0)
-            1016:          10 Load 18(inFM1)
-            1017:          10 MatrixTimesMatrix 1015 1016
-                              Store 1014(r8) 1017
+16(VertexShaderFunctionS(f1;f1;f1;u1;u1;):    6(float) Function None 10
+        11(inF0):      7(ptr) FunctionParameter
+        12(inF1):      7(ptr) FunctionParameter
+        13(inF2):      7(ptr) FunctionParameter
+        14(inU0):      9(ptr) FunctionParameter
+        15(inU1):      9(ptr) FunctionParameter
+              17:             Label
+             131:    6(float) Load 11(inF0)
+             133:   132(bool) All 131
+             134:    6(float) Load 11(inF0)
+             135:    6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 134
+             136:    6(float) Load 11(inF0)
+             137:    6(float) ExtInst 1(GLSL.std.450) 17(Acos) 136
+             138:    6(float) Load 11(inF0)
+             139:   132(bool) Any 138
+             140:    6(float) Load 11(inF0)
+             141:    6(float) ExtInst 1(GLSL.std.450) 16(Asin) 140
+             142:    6(float) Load 11(inF0)
+             144:    143(int) Bitcast 142
+             145:    6(float) Load 11(inF0)
+             146:      8(int) Bitcast 145
+             147:      8(int) Load 14(inU0)
+             148:    6(float) Bitcast 147
+             149:    6(float) Load 11(inF0)
+             150:    6(float) ExtInst 1(GLSL.std.450) 18(Atan) 149
+             151:    6(float) Load 11(inF0)
+             152:    6(float) Load 12(inF1)
+             153:    6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 151 152
+             154:    6(float) Load 11(inF0)
+             155:    6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 154
+             156:    6(float) Load 11(inF0)
+             157:    6(float) Load 12(inF1)
+             158:    6(float) Load 13(inF2)
+             159:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 156 157 158
+             160:    6(float) Load 11(inF0)
+             161:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 160
+             162:    6(float) Load 11(inF0)
+             163:    6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 162
+             165:      8(int) BitCount 164
+             166:    6(float) Load 11(inF0)
+             167:    6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 166
+             168:    6(float) Load 11(inF0)
+             169:    6(float) ExtInst 1(GLSL.std.450) 27(Exp) 168
+             170:    6(float) Load 11(inF0)
+             171:    6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 170
+             173:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
+             174:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
+             175:    6(float) Load 11(inF0)
+             176:    6(float) ExtInst 1(GLSL.std.450) 8(Floor) 175
+             177:    6(float) Load 11(inF0)
+             178:    6(float) Load 12(inF1)
+             179:    6(float) FMod 177 178
+             180:    6(float) Load 11(inF0)
+             181:    6(float) ExtInst 1(GLSL.std.450) 10(Fract) 180
+             182:    6(float) Load 11(inF0)
+             184:183(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 182
+             185:    143(int) CompositeExtract 184 1
+                              Store 12(inF1) 185
+             186:    6(float) CompositeExtract 184 0
+             187:    6(float) Load 11(inF0)
+             188:   132(bool) IsInf 187
+             189:    6(float) Load 11(inF0)
+             190:   132(bool) IsNan 189
+             191:    6(float) Load 11(inF0)
+             192:    6(float) Load 12(inF1)
+             193:    6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 191 192
+             194:    6(float) Load 11(inF0)
+             195:    6(float) Load 12(inF1)
+             196:    6(float) Load 13(inF2)
+             197:    6(float) ExtInst 1(GLSL.std.450) 46(FMix) 194 195 196
+             198:    6(float) Load 11(inF0)
+             199:    6(float) ExtInst 1(GLSL.std.450) 28(Log) 198
+             200:    6(float) Load 11(inF0)
+             201:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 200
+             203:    6(float) FMul 201 202
+             204:    6(float) Load 11(inF0)
+             205:    6(float) ExtInst 1(GLSL.std.450) 30(Log2) 204
+             206:    6(float) Load 11(inF0)
+             207:    6(float) Load 12(inF1)
+             208:    6(float) ExtInst 1(GLSL.std.450) 40(FMax) 206 207
+             209:    6(float) Load 11(inF0)
+             210:    6(float) Load 12(inF1)
+             211:    6(float) ExtInst 1(GLSL.std.450) 37(FMin) 209 210
+             212:    6(float) Load 11(inF0)
+             213:    6(float) Load 12(inF1)
+             214:    6(float) ExtInst 1(GLSL.std.450) 26(Pow) 212 213
+             215:    6(float) Load 11(inF0)
+             216:    6(float) ExtInst 1(GLSL.std.450) 11(Radians) 215
+             218:      8(int) BitReverse 217
+             219:    6(float) Load 11(inF0)
+             220:    6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 219
+             221:    6(float) Load 11(inF0)
+             222:    6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 221
+             223:    6(float) Load 11(inF0)
+             226:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 223 224 225
+             227:    6(float) Load 11(inF0)
+             228:    6(float) ExtInst 1(GLSL.std.450) 6(FSign) 227
+             229:    6(float) Load 11(inF0)
+             230:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 229
+             231:    6(float) Load 11(inF0)
+             232:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 231
+                              Store 12(inF1) 232
+             233:    6(float) Load 11(inF0)
+             234:    6(float) ExtInst 1(GLSL.std.450) 14(Cos) 233
+                              Store 13(inF2) 234
+             235:    6(float) Load 11(inF0)
+             236:    6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 235
+             237:    6(float) Load 11(inF0)
+             238:    6(float) Load 12(inF1)
+             239:    6(float) Load 13(inF2)
+             240:    6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 237 238 239
+             241:    6(float) Load 11(inF0)
+             242:    6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 241
+             243:    6(float) Load 11(inF0)
+             244:    6(float) Load 12(inF1)
+             245:    6(float) ExtInst 1(GLSL.std.450) 48(Step) 243 244
+             246:    6(float) Load 11(inF0)
+             247:    6(float) ExtInst 1(GLSL.std.450) 15(Tan) 246
+             248:    6(float) Load 11(inF0)
+             249:    6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 248
+             250:    6(float) Load 11(inF0)
+             251:    6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 250
+                              ReturnValue 224
+                              FunctionEnd
+22(VertexShaderFunction1(vf1;vf1;vf1;):    6(float) Function None 18
+        19(inF0):      7(ptr) FunctionParameter
+        20(inF1):      7(ptr) FunctionParameter
+        21(inF2):      7(ptr) FunctionParameter
+              23:             Label
+                              ReturnValue 224
+                              FunctionEnd
+34(VertexShaderFunction2(vf2;vf2;vf2;vu2;vu2;):   24(fvec2) Function None 28
+        29(inF0):     25(ptr) FunctionParameter
+        30(inF1):     25(ptr) FunctionParameter
+        31(inF2):     25(ptr) FunctionParameter
+        32(inU0):     27(ptr) FunctionParameter
+        33(inU1):     27(ptr) FunctionParameter
+              35:             Label
+             256:   24(fvec2) Load 29(inF0)
+             257:   132(bool) All 256
+             258:   24(fvec2) Load 29(inF0)
+             259:   24(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 258
+             260:   24(fvec2) Load 29(inF0)
+             261:   24(fvec2) ExtInst 1(GLSL.std.450) 17(Acos) 260
+             262:   24(fvec2) Load 29(inF0)
+             263:   132(bool) Any 262
+             264:   24(fvec2) Load 29(inF0)
+             265:   24(fvec2) ExtInst 1(GLSL.std.450) 16(Asin) 264
+             266:   24(fvec2) Load 29(inF0)
+             268:  267(ivec2) Bitcast 266
+             269:   24(fvec2) Load 29(inF0)
+             270:   26(ivec2) Bitcast 269
+             271:   26(ivec2) Load 32(inU0)
+             272:   24(fvec2) Bitcast 271
+             273:   24(fvec2) Load 29(inF0)
+             274:   24(fvec2) ExtInst 1(GLSL.std.450) 18(Atan) 273
+             275:   24(fvec2) Load 29(inF0)
+             276:   24(fvec2) Load 30(inF1)
+             277:   24(fvec2) ExtInst 1(GLSL.std.450) 25(Atan2) 275 276
+             278:   24(fvec2) Load 29(inF0)
+             279:   24(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 278
+             280:   24(fvec2) Load 29(inF0)
+             281:   24(fvec2) Load 30(inF1)
+             282:   24(fvec2) Load 31(inF2)
+             283:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 280 281 282
+             284:   24(fvec2) Load 29(inF0)
+             285:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 284
+             286:   24(fvec2) Load 29(inF0)
+             287:   24(fvec2) ExtInst 1(GLSL.std.450) 20(Cosh) 286
+             290:   26(ivec2) BitCount 289
+             291:   24(fvec2) Load 29(inF0)
+             292:   24(fvec2) ExtInst 1(GLSL.std.450) 12(Degrees) 291
+             293:   24(fvec2) Load 29(inF0)
+             294:   24(fvec2) Load 30(inF1)
+             295:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 293 294
+             296:   24(fvec2) Load 29(inF0)
+             297:   24(fvec2) Load 30(inF1)
+             298:    6(float) Dot 296 297
+             299:   24(fvec2) Load 29(inF0)
+             300:   24(fvec2) ExtInst 1(GLSL.std.450) 27(Exp) 299
+             301:   24(fvec2) Load 29(inF0)
+             302:   24(fvec2) ExtInst 1(GLSL.std.450) 29(Exp2) 301
+             303:   24(fvec2) Load 29(inF0)
+             304:   24(fvec2) Load 30(inF1)
+             305:   24(fvec2) Load 31(inF2)
+             306:   24(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 303 304 305
+             307:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
+             308:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
+             309:   24(fvec2) Load 29(inF0)
+             310:   24(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 309
+             311:   24(fvec2) Load 29(inF0)
+             312:   24(fvec2) Load 30(inF1)
+             313:   24(fvec2) FMod 311 312
+             314:   24(fvec2) Load 29(inF0)
+             315:   24(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 314
+             316:   24(fvec2) Load 29(inF0)
+             318:317(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 316
+             319:  267(ivec2) CompositeExtract 318 1
+                              Store 30(inF1) 319
+             320:   24(fvec2) CompositeExtract 318 0
+             321:   24(fvec2) Load 29(inF0)
+             323:  322(bvec2) IsInf 321
+             324:   24(fvec2) Load 29(inF0)
+             325:  322(bvec2) IsNan 324
+             326:   24(fvec2) Load 29(inF0)
+             327:   24(fvec2) Load 30(inF1)
+             328:   24(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 326 327
+             329:   24(fvec2) Load 29(inF0)
+             330:   24(fvec2) Load 30(inF1)
+             331:   24(fvec2) Load 31(inF2)
+             332:   24(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 329 330 331
+             333:   24(fvec2) Load 29(inF0)
+             334:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 333
+             335:   24(fvec2) Load 29(inF0)
+             336:   24(fvec2) ExtInst 1(GLSL.std.450) 28(Log) 335
+             337:   24(fvec2) Load 29(inF0)
+             338:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 337
+             339:   24(fvec2) VectorTimesScalar 338 202
+             340:   24(fvec2) Load 29(inF0)
+             341:   24(fvec2) ExtInst 1(GLSL.std.450) 30(Log2) 340
+             342:   24(fvec2) Load 29(inF0)
+             343:   24(fvec2) Load 30(inF1)
+             344:   24(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 342 343
+             345:   24(fvec2) Load 29(inF0)
+             346:   24(fvec2) Load 30(inF1)
+             347:   24(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 345 346
+             348:   24(fvec2) Load 29(inF0)
+             349:   24(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 348
+             350:   24(fvec2) Load 29(inF0)
+             351:   24(fvec2) Load 30(inF1)
+             352:   24(fvec2) ExtInst 1(GLSL.std.450) 26(Pow) 350 351
+             353:   24(fvec2) Load 29(inF0)
+             354:   24(fvec2) ExtInst 1(GLSL.std.450) 11(Radians) 353
+             355:   24(fvec2) Load 29(inF0)
+             356:   24(fvec2) Load 30(inF1)
+             357:   24(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 355 356
+             358:   24(fvec2) Load 29(inF0)
+             359:   24(fvec2) Load 30(inF1)
+             361:   24(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 358 359 360
+             364:   26(ivec2) BitReverse 363
+             365:   24(fvec2) Load 29(inF0)
+             366:   24(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 365
+             367:   24(fvec2) Load 29(inF0)
+             368:   24(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 367
+             369:   24(fvec2) Load 29(inF0)
+             370:   24(fvec2) CompositeConstruct 224 224
+             371:   24(fvec2) CompositeConstruct 225 225
+             372:   24(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 369 370 371
+             373:   24(fvec2) Load 29(inF0)
+             374:   24(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 373
+             375:   24(fvec2) Load 29(inF0)
+             376:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 375
+             377:   24(fvec2) Load 29(inF0)
+             378:   24(fvec2) ExtInst 1(GLSL.std.450) 13(Sin) 377
+                              Store 30(inF1) 378
+             379:   24(fvec2) Load 29(inF0)
+             380:   24(fvec2) ExtInst 1(GLSL.std.450) 14(Cos) 379
+                              Store 31(inF2) 380
+             381:   24(fvec2) Load 29(inF0)
+             382:   24(fvec2) ExtInst 1(GLSL.std.450) 19(Sinh) 381
+             383:   24(fvec2) Load 29(inF0)
+             384:   24(fvec2) Load 30(inF1)
+             385:   24(fvec2) Load 31(inF2)
+             386:   24(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 383 384 385
+             387:   24(fvec2) Load 29(inF0)
+             388:   24(fvec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 387
+             389:   24(fvec2) Load 29(inF0)
+             390:   24(fvec2) Load 30(inF1)
+             391:   24(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 389 390
+             392:   24(fvec2) Load 29(inF0)
+             393:   24(fvec2) ExtInst 1(GLSL.std.450) 15(Tan) 392
+             394:   24(fvec2) Load 29(inF0)
+             395:   24(fvec2) ExtInst 1(GLSL.std.450) 21(Tanh) 394
+             396:   24(fvec2) Load 29(inF0)
+             397:   24(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 396
+                              ReturnValue 398
+                              FunctionEnd
+46(VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3;):   36(fvec3) Function None 40
+        41(inF0):     37(ptr) FunctionParameter
+        42(inF1):     37(ptr) FunctionParameter
+        43(inF2):     37(ptr) FunctionParameter
+        44(inU0):     39(ptr) FunctionParameter
+        45(inU1):     39(ptr) FunctionParameter
+              47:             Label
+             401:   36(fvec3) Load 41(inF0)
+             402:   132(bool) All 401
+             403:   36(fvec3) Load 41(inF0)
+             404:   36(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 403
+             405:   36(fvec3) Load 41(inF0)
+             406:   36(fvec3) ExtInst 1(GLSL.std.450) 17(Acos) 405
+             407:   36(fvec3) Load 41(inF0)
+             408:   132(bool) Any 407
+             409:   36(fvec3) Load 41(inF0)
+             410:   36(fvec3) ExtInst 1(GLSL.std.450) 16(Asin) 409
+             411:   36(fvec3) Load 41(inF0)
+             413:  412(ivec3) Bitcast 411
+             414:   36(fvec3) Load 41(inF0)
+             415:   38(ivec3) Bitcast 414
+             416:   38(ivec3) Load 44(inU0)
+             417:   36(fvec3) Bitcast 416
+             418:   36(fvec3) Load 41(inF0)
+             419:   36(fvec3) ExtInst 1(GLSL.std.450) 18(Atan) 418
+             420:   36(fvec3) Load 41(inF0)
+             421:   36(fvec3) Load 42(inF1)
+             422:   36(fvec3) ExtInst 1(GLSL.std.450) 25(Atan2) 420 421
+             423:   36(fvec3) Load 41(inF0)
+             424:   36(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 423
+             425:   36(fvec3) Load 41(inF0)
+             426:   36(fvec3) Load 42(inF1)
+             427:   36(fvec3) Load 43(inF2)
+             428:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 425 426 427
+             429:   36(fvec3) Load 41(inF0)
+             430:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 429
+             431:   36(fvec3) Load 41(inF0)
+             432:   36(fvec3) ExtInst 1(GLSL.std.450) 20(Cosh) 431
+             435:   38(ivec3) BitCount 434
+             436:   36(fvec3) Load 41(inF0)
+             437:   36(fvec3) Load 42(inF1)
+             438:   36(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 436 437
+             439:   36(fvec3) Load 41(inF0)
+             440:   36(fvec3) ExtInst 1(GLSL.std.450) 12(Degrees) 439
+             441:   36(fvec3) Load 41(inF0)
+             442:   36(fvec3) Load 42(inF1)
+             443:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 441 442
+             444:   36(fvec3) Load 41(inF0)
+             445:   36(fvec3) Load 42(inF1)
+             446:    6(float) Dot 444 445
+             447:   36(fvec3) Load 41(inF0)
+             448:   36(fvec3) ExtInst 1(GLSL.std.450) 27(Exp) 447
+             449:   36(fvec3) Load 41(inF0)
+             450:   36(fvec3) ExtInst 1(GLSL.std.450) 29(Exp2) 449
+             451:   36(fvec3) Load 41(inF0)
+             452:   36(fvec3) Load 42(inF1)
+             453:   36(fvec3) Load 43(inF2)
+             454:   36(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 451 452 453
+             455:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
+             456:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
+             457:   36(fvec3) Load 41(inF0)
+             458:   36(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 457
+             459:   36(fvec3) Load 41(inF0)
+             460:   36(fvec3) Load 42(inF1)
+             461:   36(fvec3) FMod 459 460
+             462:   36(fvec3) Load 41(inF0)
+             463:   36(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 462
+             464:   36(fvec3) Load 41(inF0)
+             466:465(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 464
+             467:  412(ivec3) CompositeExtract 466 1
+                              Store 42(inF1) 467
+             468:   36(fvec3) CompositeExtract 466 0
+             469:   36(fvec3) Load 41(inF0)
+             471:  470(bvec3) IsInf 469
+             472:   36(fvec3) Load 41(inF0)
+             473:  470(bvec3) IsNan 472
+             474:   36(fvec3) Load 41(inF0)
+             475:   36(fvec3) Load 42(inF1)
+             476:   36(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 474 475
+             477:   36(fvec3) Load 41(inF0)
+             478:   36(fvec3) Load 42(inF1)
+             479:   36(fvec3) Load 43(inF2)
+             480:   36(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 477 478 479
+             481:   36(fvec3) Load 41(inF0)
+             482:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 481
+             483:   36(fvec3) Load 41(inF0)
+             484:   36(fvec3) ExtInst 1(GLSL.std.450) 28(Log) 483
+             485:   36(fvec3) Load 41(inF0)
+             486:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 485
+             487:   36(fvec3) VectorTimesScalar 486 202
+             488:   36(fvec3) Load 41(inF0)
+             489:   36(fvec3) ExtInst 1(GLSL.std.450) 30(Log2) 488
+             490:   36(fvec3) Load 41(inF0)
+             491:   36(fvec3) Load 42(inF1)
+             492:   36(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 490 491
+             493:   36(fvec3) Load 41(inF0)
+             494:   36(fvec3) Load 42(inF1)
+             495:   36(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 493 494
+             496:   36(fvec3) Load 41(inF0)
+             497:   36(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 496
+             498:   36(fvec3) Load 41(inF0)
+             499:   36(fvec3) Load 42(inF1)
+             500:   36(fvec3) ExtInst 1(GLSL.std.450) 26(Pow) 498 499
+             501:   36(fvec3) Load 41(inF0)
+             502:   36(fvec3) ExtInst 1(GLSL.std.450) 11(Radians) 501
+             503:   36(fvec3) Load 41(inF0)
+             504:   36(fvec3) Load 42(inF1)
+             505:   36(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 503 504
+             506:   36(fvec3) Load 41(inF0)
+             507:   36(fvec3) Load 42(inF1)
+             508:   36(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 506 507 360
+             510:   38(ivec3) BitReverse 509
+             511:   36(fvec3) Load 41(inF0)
+             512:   36(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 511
+             513:   36(fvec3) Load 41(inF0)
+             514:   36(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 513
+             515:   36(fvec3) Load 41(inF0)
+             516:   36(fvec3) CompositeConstruct 224 224 224
+             517:   36(fvec3) CompositeConstruct 225 225 225
+             518:   36(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 515 516 517
+             519:   36(fvec3) Load 41(inF0)
+             520:   36(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 519
+             521:   36(fvec3) Load 41(inF0)
+             522:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 521
+             523:   36(fvec3) Load 41(inF0)
+             524:   36(fvec3) ExtInst 1(GLSL.std.450) 13(Sin) 523
+                              Store 42(inF1) 524
+             525:   36(fvec3) Load 41(inF0)
+             526:   36(fvec3) ExtInst 1(GLSL.std.450) 14(Cos) 525
+                              Store 43(inF2) 526
+             527:   36(fvec3) Load 41(inF0)
+             528:   36(fvec3) ExtInst 1(GLSL.std.450) 19(Sinh) 527
+             529:   36(fvec3) Load 41(inF0)
+             530:   36(fvec3) Load 42(inF1)
+             531:   36(fvec3) Load 43(inF2)
+             532:   36(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 529 530 531
+             533:   36(fvec3) Load 41(inF0)
+             534:   36(fvec3) ExtInst 1(GLSL.std.450) 31(Sqrt) 533
+             535:   36(fvec3) Load 41(inF0)
+             536:   36(fvec3) Load 42(inF1)
+             537:   36(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 535 536
+             538:   36(fvec3) Load 41(inF0)
+             539:   36(fvec3) ExtInst 1(GLSL.std.450) 15(Tan) 538
+             540:   36(fvec3) Load 41(inF0)
+             541:   36(fvec3) ExtInst 1(GLSL.std.450) 21(Tanh) 540
+             542:   36(fvec3) Load 41(inF0)
+             543:   36(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 542
+                              ReturnValue 545
+                              FunctionEnd
+58(VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4;):   48(fvec4) Function None 52
+        53(inF0):     49(ptr) FunctionParameter
+        54(inF1):     49(ptr) FunctionParameter
+        55(inF2):     49(ptr) FunctionParameter
+        56(inU0):     51(ptr) FunctionParameter
+        57(inU1):     51(ptr) FunctionParameter
+              59:             Label
+             548:   48(fvec4) Load 53(inF0)
+             549:   132(bool) All 548
+             550:   48(fvec4) Load 53(inF0)
+             551:   48(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 550
+             552:   48(fvec4) Load 53(inF0)
+             553:   48(fvec4) ExtInst 1(GLSL.std.450) 17(Acos) 552
+             554:   48(fvec4) Load 53(inF0)
+             555:   132(bool) Any 554
+             556:   48(fvec4) Load 53(inF0)
+             557:   48(fvec4) ExtInst 1(GLSL.std.450) 16(Asin) 556
+             558:   48(fvec4) Load 53(inF0)
+             560:  559(ivec4) Bitcast 558
+             561:   48(fvec4) Load 53(inF0)
+             562:   50(ivec4) Bitcast 561
+             563:   50(ivec4) Load 56(inU0)
+             564:   48(fvec4) Bitcast 563
+             565:   48(fvec4) Load 53(inF0)
+             566:   48(fvec4) ExtInst 1(GLSL.std.450) 18(Atan) 565
+             567:   48(fvec4) Load 53(inF0)
+             568:   48(fvec4) Load 54(inF1)
+             569:   48(fvec4) ExtInst 1(GLSL.std.450) 25(Atan2) 567 568
+             570:   48(fvec4) Load 53(inF0)
+             571:   48(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 570
+             572:   48(fvec4) Load 53(inF0)
+             573:   48(fvec4) Load 54(inF1)
+             574:   48(fvec4) Load 55(inF2)
+             575:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 572 573 574
+             576:   48(fvec4) Load 53(inF0)
+             577:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 576
+             578:   48(fvec4) Load 53(inF0)
+             579:   48(fvec4) ExtInst 1(GLSL.std.450) 20(Cosh) 578
+             581:   50(ivec4) BitCount 580
+             582:   48(fvec4) Load 53(inF0)
+             583:   48(fvec4) ExtInst 1(GLSL.std.450) 12(Degrees) 582
+             584:   48(fvec4) Load 53(inF0)
+             585:   48(fvec4) Load 54(inF1)
+             586:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 584 585
+             587:   48(fvec4) Load 53(inF0)
+             588:   48(fvec4) Load 54(inF1)
+             589:    6(float) Dot 587 588
+             590:      7(ptr) AccessChain 53(inF0) 362
+             591:    6(float) Load 590
+             592:      7(ptr) AccessChain 54(inF1) 362
+             593:    6(float) Load 592
+             594:    6(float) FMul 591 593
+             595:      7(ptr) AccessChain 53(inF0) 217
+             596:    6(float) Load 595
+             597:      7(ptr) AccessChain 54(inF1) 288
+             598:    6(float) Load 597
+             599:   48(fvec4) CompositeConstruct 225 594 596 598
+             600:   48(fvec4) Load 53(inF0)
+             601:   48(fvec4) ExtInst 1(GLSL.std.450) 27(Exp) 600
+             602:   48(fvec4) Load 53(inF0)
+             603:   48(fvec4) ExtInst 1(GLSL.std.450) 29(Exp2) 602
+             604:   48(fvec4) Load 53(inF0)
+             605:   48(fvec4) Load 54(inF1)
+             606:   48(fvec4) Load 55(inF2)
+             607:   48(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 604 605 606
+             608:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
+             609:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
+             610:   48(fvec4) Load 53(inF0)
+             611:   48(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 610
+             612:   48(fvec4) Load 53(inF0)
+             613:   48(fvec4) Load 54(inF1)
+             614:   48(fvec4) FMod 612 613
+             615:   48(fvec4) Load 53(inF0)
+             616:   48(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 615
+             617:   48(fvec4) Load 53(inF0)
+             619:618(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 617
+             620:  559(ivec4) CompositeExtract 619 1
+                              Store 54(inF1) 620
+             621:   48(fvec4) CompositeExtract 619 0
+             622:   48(fvec4) Load 53(inF0)
+             624:  623(bvec4) IsInf 622
+             625:   48(fvec4) Load 53(inF0)
+             626:  623(bvec4) IsNan 625
+             627:   48(fvec4) Load 53(inF0)
+             628:   48(fvec4) Load 54(inF1)
+             629:   48(fvec4) ExtInst 1(GLSL.std.450) 53(Ldexp) 627 628
+             630:   48(fvec4) Load 53(inF0)
+             631:   48(fvec4) Load 54(inF1)
+             632:   48(fvec4) Load 55(inF2)
+             633:   48(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 630 631 632
+             634:   48(fvec4) Load 53(inF0)
+             635:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 634
+             636:   48(fvec4) Load 53(inF0)
+             637:   48(fvec4) ExtInst 1(GLSL.std.450) 28(Log) 636
+             638:   48(fvec4) Load 53(inF0)
+             639:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 638
+             640:   48(fvec4) VectorTimesScalar 639 202
+             641:   48(fvec4) Load 53(inF0)
+             642:   48(fvec4) ExtInst 1(GLSL.std.450) 30(Log2) 641
+             643:   48(fvec4) Load 53(inF0)
+             644:   48(fvec4) Load 54(inF1)
+             645:   48(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 643 644
+             646:   48(fvec4) Load 53(inF0)
+             647:   48(fvec4) Load 54(inF1)
+             648:   48(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 646 647
+             649:   48(fvec4) Load 53(inF0)
+             650:   48(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 649
+             651:   48(fvec4) Load 53(inF0)
+             652:   48(fvec4) Load 54(inF1)
+             653:   48(fvec4) ExtInst 1(GLSL.std.450) 26(Pow) 651 652
+             654:   48(fvec4) Load 53(inF0)
+             655:   48(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 654
+             656:   48(fvec4) Load 53(inF0)
+             657:   48(fvec4) Load 54(inF1)
+             658:   48(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 656 657
+             659:   48(fvec4) Load 53(inF0)
+             660:   48(fvec4) Load 54(inF1)
+             661:   48(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 659 660 360
+             664:   50(ivec4) BitReverse 663
+             665:   48(fvec4) Load 53(inF0)
+             666:   48(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 665
+             667:   48(fvec4) Load 53(inF0)
+             668:   48(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 667
+             669:   48(fvec4) Load 53(inF0)
+             670:   48(fvec4) CompositeConstruct 224 224 224 224
+             671:   48(fvec4) CompositeConstruct 225 225 225 225
+             672:   48(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 669 670 671
+             673:   48(fvec4) Load 53(inF0)
+             674:   48(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 673
+             675:   48(fvec4) Load 53(inF0)
+             676:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 675
+             677:   48(fvec4) Load 53(inF0)
+             678:   48(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 677
+                              Store 54(inF1) 678
+             679:   48(fvec4) Load 53(inF0)
+             680:   48(fvec4) ExtInst 1(GLSL.std.450) 14(Cos) 679
+                              Store 55(inF2) 680
+             681:   48(fvec4) Load 53(inF0)
+             682:   48(fvec4) ExtInst 1(GLSL.std.450) 19(Sinh) 681
+             683:   48(fvec4) Load 53(inF0)
+             684:   48(fvec4) Load 54(inF1)
+             685:   48(fvec4) Load 55(inF2)
+             686:   48(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 683 684 685
+             687:   48(fvec4) Load 53(inF0)
+             688:   48(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 687
+             689:   48(fvec4) Load 53(inF0)
+             690:   48(fvec4) Load 54(inF1)
+             691:   48(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 689 690
+             692:   48(fvec4) Load 53(inF0)
+             693:   48(fvec4) ExtInst 1(GLSL.std.450) 15(Tan) 692
+             694:   48(fvec4) Load 53(inF0)
+             695:   48(fvec4) ExtInst 1(GLSL.std.450) 21(Tanh) 694
+             696:   48(fvec4) Load 53(inF0)
+             697:   48(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 696
+                              ReturnValue 699
+                              FunctionEnd
+66(VertexShaderFunction2x2(mf22;mf22;mf22;):          60 Function None 62
+        63(inF0):     61(ptr) FunctionParameter
+        64(inF1):     61(ptr) FunctionParameter
+        65(inF2):     61(ptr) FunctionParameter
+              67:             Label
+             702:          60 Load 63(inF0)
+             703:   132(bool) All 702
+             704:          60 Load 63(inF0)
+             705:          60 ExtInst 1(GLSL.std.450) 4(FAbs) 704
+             706:          60 Load 63(inF0)
+             707:          60 ExtInst 1(GLSL.std.450) 17(Acos) 706
+             708:          60 Load 63(inF0)
+             709:   132(bool) Any 708
+             710:          60 Load 63(inF0)
+             711:          60 ExtInst 1(GLSL.std.450) 16(Asin) 710
+             712:          60 Load 63(inF0)
+             713:          60 ExtInst 1(GLSL.std.450) 18(Atan) 712
+             714:          60 Load 63(inF0)
+             715:          60 Load 64(inF1)
+             716:          60 ExtInst 1(GLSL.std.450) 25(Atan2) 714 715
+             717:          60 Load 63(inF0)
+             718:          60 ExtInst 1(GLSL.std.450) 9(Ceil) 717
+             719:          60 Load 63(inF0)
+             720:          60 Load 64(inF1)
+             721:          60 Load 65(inF2)
+             722:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 719 720 721
+             723:          60 Load 63(inF0)
+             724:          60 ExtInst 1(GLSL.std.450) 14(Cos) 723
+             725:          60 Load 63(inF0)
+             726:          60 ExtInst 1(GLSL.std.450) 20(Cosh) 725
+             727:          60 Load 63(inF0)
+             728:          60 ExtInst 1(GLSL.std.450) 12(Degrees) 727
+             729:          60 Load 63(inF0)
+             730:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 729
+             731:          60 Load 63(inF0)
+             732:          60 ExtInst 1(GLSL.std.450) 27(Exp) 731
+             733:          60 Load 63(inF0)
+             734:          60 ExtInst 1(GLSL.std.450) 29(Exp2) 733
+             735:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
+             736:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
+             737:          60 Load 63(inF0)
+             738:          60 ExtInst 1(GLSL.std.450) 8(Floor) 737
+             739:          60 Load 63(inF0)
+             740:          60 Load 64(inF1)
+             741:   24(fvec2) CompositeExtract 739 0
+             742:   24(fvec2) CompositeExtract 740 0
+             743:   24(fvec2) FMod 741 742
+             744:   24(fvec2) CompositeExtract 739 1
+             745:   24(fvec2) CompositeExtract 740 1
+             746:   24(fvec2) FMod 744 745
+             747:          60 CompositeConstruct 743 746
+             748:          60 Load 63(inF0)
+             749:          60 ExtInst 1(GLSL.std.450) 10(Fract) 748
+             750:          60 Load 63(inF0)
+             752:751(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 750
+             753:  267(ivec2) CompositeExtract 752 1
+                              Store 64(inF1) 753
+             754:          60 CompositeExtract 752 0
+             755:          60 Load 63(inF0)
+             756:          60 Load 64(inF1)
+             757:          60 ExtInst 1(GLSL.std.450) 53(Ldexp) 755 756
+             758:          60 Load 63(inF0)
+             759:          60 Load 64(inF1)
+             760:          60 Load 65(inF2)
+             761:          60 ExtInst 1(GLSL.std.450) 46(FMix) 758 759 760
+             762:          60 Load 63(inF0)
+             763:          60 ExtInst 1(GLSL.std.450) 28(Log) 762
+             764:          60 Load 63(inF0)
+             765:          60 ExtInst 1(GLSL.std.450) 30(Log2) 764
+             766:          60 MatrixTimesScalar 765 202
+             767:          60 Load 63(inF0)
+             768:          60 ExtInst 1(GLSL.std.450) 30(Log2) 767
+             769:          60 Load 63(inF0)
+             770:          60 Load 64(inF1)
+             771:          60 ExtInst 1(GLSL.std.450) 40(FMax) 769 770
+             772:          60 Load 63(inF0)
+             773:          60 Load 64(inF1)
+             774:          60 ExtInst 1(GLSL.std.450) 37(FMin) 772 773
+             775:          60 Load 63(inF0)
+             776:          60 Load 64(inF1)
+             777:          60 ExtInst 1(GLSL.std.450) 26(Pow) 775 776
+             778:          60 Load 63(inF0)
+             779:          60 ExtInst 1(GLSL.std.450) 11(Radians) 778
+             780:          60 Load 63(inF0)
+             781:          60 ExtInst 1(GLSL.std.450) 2(RoundEven) 780
+             782:          60 Load 63(inF0)
+             783:          60 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 782
+             784:          60 Load 63(inF0)
+             785:   24(fvec2) CompositeConstruct 224 224
+             786:   24(fvec2) CompositeConstruct 225 225
+             787:          60 ExtInst 1(GLSL.std.450) 43(FClamp) 784 785 786
+             788:          60 Load 63(inF0)
+             789:          60 ExtInst 1(GLSL.std.450) 6(FSign) 788
+             790:          60 Load 63(inF0)
+             791:          60 ExtInst 1(GLSL.std.450) 13(Sin) 790
+             792:          60 Load 63(inF0)
+             793:          60 ExtInst 1(GLSL.std.450) 13(Sin) 792
+                              Store 64(inF1) 793
+             794:          60 Load 63(inF0)
+             795:          60 ExtInst 1(GLSL.std.450) 14(Cos) 794
+                              Store 65(inF2) 795
+             796:          60 Load 63(inF0)
+             797:          60 ExtInst 1(GLSL.std.450) 19(Sinh) 796
+             798:          60 Load 63(inF0)
+             799:          60 Load 64(inF1)
+             800:          60 Load 65(inF2)
+             801:          60 ExtInst 1(GLSL.std.450) 49(SmoothStep) 798 799 800
+             802:          60 Load 63(inF0)
+             803:          60 ExtInst 1(GLSL.std.450) 31(Sqrt) 802
+             804:          60 Load 63(inF0)
+             805:          60 Load 64(inF1)
+             806:          60 ExtInst 1(GLSL.std.450) 48(Step) 804 805
+             807:          60 Load 63(inF0)
+             808:          60 ExtInst 1(GLSL.std.450) 15(Tan) 807
+             809:          60 Load 63(inF0)
+             810:          60 ExtInst 1(GLSL.std.450) 21(Tanh) 809
+             811:          60 Load 63(inF0)
+             812:          60 Transpose 811
+             813:          60 Load 63(inF0)
+             814:          60 ExtInst 1(GLSL.std.450) 3(Trunc) 813
+                              ReturnValue 816
+                              FunctionEnd
+74(VertexShaderFunction3x3(mf33;mf33;mf33;):          68 Function None 70
+        71(inF0):     69(ptr) FunctionParameter
+        72(inF1):     69(ptr) FunctionParameter
+        73(inF2):     69(ptr) FunctionParameter
+              75:             Label
+             819:          68 Load 71(inF0)
+             820:   132(bool) All 819
+             821:          68 Load 71(inF0)
+             822:          68 ExtInst 1(GLSL.std.450) 4(FAbs) 821
+             823:          68 Load 71(inF0)
+             824:          68 ExtInst 1(GLSL.std.450) 17(Acos) 823
+             825:          68 Load 71(inF0)
+             826:   132(bool) Any 825
+             827:          68 Load 71(inF0)
+             828:          68 ExtInst 1(GLSL.std.450) 16(Asin) 827
+             829:          68 Load 71(inF0)
+             830:          68 ExtInst 1(GLSL.std.450) 18(Atan) 829
+             831:          68 Load 71(inF0)
+             832:          68 Load 72(inF1)
+             833:          68 ExtInst 1(GLSL.std.450) 25(Atan2) 831 832
+             834:          68 Load 71(inF0)
+             835:          68 ExtInst 1(GLSL.std.450) 9(Ceil) 834
+             836:          68 Load 71(inF0)
+             837:          68 Load 72(inF1)
+             838:          68 Load 73(inF2)
+             839:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 836 837 838
+             840:          68 Load 71(inF0)
+             841:          68 ExtInst 1(GLSL.std.450) 14(Cos) 840
+             842:          68 Load 71(inF0)
+             843:          68 ExtInst 1(GLSL.std.450) 20(Cosh) 842
+             844:          68 Load 71(inF0)
+             845:          68 ExtInst 1(GLSL.std.450) 12(Degrees) 844
+             846:          68 Load 71(inF0)
+             847:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 846
+             848:          68 Load 71(inF0)
+             849:          68 ExtInst 1(GLSL.std.450) 27(Exp) 848
+             850:          68 Load 71(inF0)
+             851:          68 ExtInst 1(GLSL.std.450) 29(Exp2) 850
+             852:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
+             853:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
+             854:          68 Load 71(inF0)
+             855:          68 ExtInst 1(GLSL.std.450) 8(Floor) 854
+             856:          68 Load 71(inF0)
+             857:          68 Load 72(inF1)
+             858:   36(fvec3) CompositeExtract 856 0
+             859:   36(fvec3) CompositeExtract 857 0
+             860:   36(fvec3) FMod 858 859
+             861:   36(fvec3) CompositeExtract 856 1
+             862:   36(fvec3) CompositeExtract 857 1
+             863:   36(fvec3) FMod 861 862
+             864:   36(fvec3) CompositeExtract 856 2
+             865:   36(fvec3) CompositeExtract 857 2
+             866:   36(fvec3) FMod 864 865
+             867:          68 CompositeConstruct 860 863 866
+             868:          68 Load 71(inF0)
+             869:          68 ExtInst 1(GLSL.std.450) 10(Fract) 868
+             870:          68 Load 71(inF0)
+             872:871(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 870
+             873:  412(ivec3) CompositeExtract 872 1
+                              Store 72(inF1) 873
+             874:          68 CompositeExtract 872 0
+             875:          68 Load 71(inF0)
+             876:          68 Load 72(inF1)
+             877:          68 ExtInst 1(GLSL.std.450) 53(Ldexp) 875 876
+             878:          68 Load 71(inF0)
+             879:          68 Load 72(inF1)
+             880:          68 Load 73(inF2)
+             881:          68 ExtInst 1(GLSL.std.450) 46(FMix) 878 879 880
+             882:          68 Load 71(inF0)
+             883:          68 ExtInst 1(GLSL.std.450) 28(Log) 882
+             884:          68 Load 71(inF0)
+             885:          68 ExtInst 1(GLSL.std.450) 30(Log2) 884
+             886:          68 MatrixTimesScalar 885 202
+             887:          68 Load 71(inF0)
+             888:          68 ExtInst 1(GLSL.std.450) 30(Log2) 887
+             889:          68 Load 71(inF0)
+             890:          68 Load 72(inF1)
+             891:          68 ExtInst 1(GLSL.std.450) 40(FMax) 889 890
+             892:          68 Load 71(inF0)
+             893:          68 Load 72(inF1)
+             894:          68 ExtInst 1(GLSL.std.450) 37(FMin) 892 893
+             895:          68 Load 71(inF0)
+             896:          68 Load 72(inF1)
+             897:          68 ExtInst 1(GLSL.std.450) 26(Pow) 895 896
+             898:          68 Load 71(inF0)
+             899:          68 ExtInst 1(GLSL.std.450) 11(Radians) 898
+             900:          68 Load 71(inF0)
+             901:          68 ExtInst 1(GLSL.std.450) 2(RoundEven) 900
+             902:          68 Load 71(inF0)
+             903:          68 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 902
+             904:          68 Load 71(inF0)
+             905:   36(fvec3) CompositeConstruct 224 224 224
+             906:   36(fvec3) CompositeConstruct 225 225 225
+             907:          68 ExtInst 1(GLSL.std.450) 43(FClamp) 904 905 906
+             908:          68 Load 71(inF0)
+             909:          68 ExtInst 1(GLSL.std.450) 6(FSign) 908
+             910:          68 Load 71(inF0)
+             911:          68 ExtInst 1(GLSL.std.450) 13(Sin) 910
+             912:          68 Load 71(inF0)
+             913:          68 ExtInst 1(GLSL.std.450) 13(Sin) 912
+                              Store 72(inF1) 913
+             914:          68 Load 71(inF0)
+             915:          68 ExtInst 1(GLSL.std.450) 14(Cos) 914
+                              Store 73(inF2) 915
+             916:          68 Load 71(inF0)
+             917:          68 ExtInst 1(GLSL.std.450) 19(Sinh) 916
+             918:          68 Load 71(inF0)
+             919:          68 Load 72(inF1)
+             920:          68 Load 73(inF2)
+             921:          68 ExtInst 1(GLSL.std.450) 49(SmoothStep) 918 919 920
+             922:          68 Load 71(inF0)
+             923:          68 ExtInst 1(GLSL.std.450) 31(Sqrt) 922
+             924:          68 Load 71(inF0)
+             925:          68 Load 72(inF1)
+             926:          68 ExtInst 1(GLSL.std.450) 48(Step) 924 925
+             927:          68 Load 71(inF0)
+             928:          68 ExtInst 1(GLSL.std.450) 15(Tan) 927
+             929:          68 Load 71(inF0)
+             930:          68 ExtInst 1(GLSL.std.450) 21(Tanh) 929
+             931:          68 Load 71(inF0)
+             932:          68 Transpose 931
+             933:          68 Load 71(inF0)
+             934:          68 ExtInst 1(GLSL.std.450) 3(Trunc) 933
+                              ReturnValue 936
+                              FunctionEnd
+82(VertexShaderFunction4x4(mf44;mf44;mf44;):          76 Function None 78
+        79(inF0):     77(ptr) FunctionParameter
+        80(inF1):     77(ptr) FunctionParameter
+        81(inF2):     77(ptr) FunctionParameter
+              83:             Label
+             939:          76 Load 79(inF0)
+             940:   132(bool) All 939
+             941:          76 Load 79(inF0)
+             942:          76 ExtInst 1(GLSL.std.450) 4(FAbs) 941
+             943:          76 Load 79(inF0)
+             944:          76 ExtInst 1(GLSL.std.450) 17(Acos) 943
+             945:          76 Load 79(inF0)
+             946:   132(bool) Any 945
+             947:          76 Load 79(inF0)
+             948:          76 ExtInst 1(GLSL.std.450) 16(Asin) 947
+             949:          76 Load 79(inF0)
+             950:          76 ExtInst 1(GLSL.std.450) 18(Atan) 949
+             951:          76 Load 79(inF0)
+             952:          76 Load 80(inF1)
+             953:          76 ExtInst 1(GLSL.std.450) 25(Atan2) 951 952
+             954:          76 Load 79(inF0)
+             955:          76 ExtInst 1(GLSL.std.450) 9(Ceil) 954
+             956:          76 Load 79(inF0)
+             957:          76 Load 80(inF1)
+             958:          76 Load 81(inF2)
+             959:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 956 957 958
+             960:          76 Load 79(inF0)
+             961:          76 ExtInst 1(GLSL.std.450) 14(Cos) 960
+             962:          76 Load 79(inF0)
+             963:          76 ExtInst 1(GLSL.std.450) 20(Cosh) 962
+             964:          76 Load 79(inF0)
+             965:          76 ExtInst 1(GLSL.std.450) 12(Degrees) 964
+             966:          76 Load 79(inF0)
+             967:    6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 966
+             968:          76 Load 79(inF0)
+             969:          76 ExtInst 1(GLSL.std.450) 27(Exp) 968
+             970:          76 Load 79(inF0)
+             971:          76 ExtInst 1(GLSL.std.450) 29(Exp2) 970
+             972:    143(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 172
+             973:    143(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 172
+             974:          76 Load 79(inF0)
+             975:          76 ExtInst 1(GLSL.std.450) 8(Floor) 974
+             976:          76 Load 79(inF0)
+             977:          76 Load 80(inF1)
+             978:   48(fvec4) CompositeExtract 976 0
+             979:   48(fvec4) CompositeExtract 977 0
+             980:   48(fvec4) FMod 978 979
+             981:   48(fvec4) CompositeExtract 976 1
+             982:   48(fvec4) CompositeExtract 977 1
+             983:   48(fvec4) FMod 981 982
+             984:   48(fvec4) CompositeExtract 976 2
+             985:   48(fvec4) CompositeExtract 977 2
+             986:   48(fvec4) FMod 984 985
+             987:   48(fvec4) CompositeExtract 976 3
+             988:   48(fvec4) CompositeExtract 977 3
+             989:   48(fvec4) FMod 987 988
+             990:          76 CompositeConstruct 980 983 986 989
+             991:          76 Load 79(inF0)
+             992:          76 ExtInst 1(GLSL.std.450) 10(Fract) 991
+             993:          76 Load 79(inF0)
+             995:994(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 993
+             996:  559(ivec4) CompositeExtract 995 1
+                              Store 80(inF1) 996
+             997:          76 CompositeExtract 995 0
+             998:          76 Load 79(inF0)
+             999:          76 Load 80(inF1)
+            1000:          76 ExtInst 1(GLSL.std.450) 53(Ldexp) 998 999
+            1001:          76 Load 79(inF0)
+            1002:          76 Load 80(inF1)
+            1003:          76 Load 81(inF2)
+            1004:          76 ExtInst 1(GLSL.std.450) 46(FMix) 1001 1002 1003
+            1005:          76 Load 79(inF0)
+            1006:          76 ExtInst 1(GLSL.std.450) 28(Log) 1005
+            1007:          76 Load 79(inF0)
+            1008:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1007
+            1009:          76 MatrixTimesScalar 1008 202
+            1010:          76 Load 79(inF0)
+            1011:          76 ExtInst 1(GLSL.std.450) 30(Log2) 1010
+            1012:          76 Load 79(inF0)
+            1013:          76 Load 80(inF1)
+            1014:          76 ExtInst 1(GLSL.std.450) 40(FMax) 1012 1013
+            1015:          76 Load 79(inF0)
+            1016:          76 Load 80(inF1)
+            1017:          76 ExtInst 1(GLSL.std.450) 37(FMin) 1015 1016
+            1018:          76 Load 79(inF0)
+            1019:          76 Load 80(inF1)
+            1020:          76 ExtInst 1(GLSL.std.450) 26(Pow) 1018 1019
+            1021:          76 Load 79(inF0)
+            1022:          76 ExtInst 1(GLSL.std.450) 11(Radians) 1021
+            1023:          76 Load 79(inF0)
+            1024:          76 ExtInst 1(GLSL.std.450) 2(RoundEven) 1023
+            1025:          76 Load 79(inF0)
+            1026:          76 ExtInst 1(GLSL.std.450) 32(InverseSqrt) 1025
+            1027:          76 Load 79(inF0)
+            1028:   48(fvec4) CompositeConstruct 224 224 224 224
+            1029:   48(fvec4) CompositeConstruct 225 225 225 225
+            1030:          76 ExtInst 1(GLSL.std.450) 43(FClamp) 1027 1028 1029
+            1031:          76 Load 79(inF0)
+            1032:          76 ExtInst 1(GLSL.std.450) 6(FSign) 1031
+            1033:          76 Load 79(inF0)
+            1034:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1033
+            1035:          76 Load 79(inF0)
+            1036:          76 ExtInst 1(GLSL.std.450) 13(Sin) 1035
+                              Store 80(inF1) 1036
+            1037:          76 Load 79(inF0)
+            1038:          76 ExtInst 1(GLSL.std.450) 14(Cos) 1037
+                              Store 81(inF2) 1038
+            1039:          76 Load 79(inF0)
+            1040:          76 ExtInst 1(GLSL.std.450) 19(Sinh) 1039
+            1041:          76 Load 79(inF0)
+            1042:          76 Load 80(inF1)
+            1043:          76 Load 81(inF2)
+            1044:          76 ExtInst 1(GLSL.std.450) 49(SmoothStep) 1041 1042 1043
+            1045:          76 Load 79(inF0)
+            1046:          76 ExtInst 1(GLSL.std.450) 31(Sqrt) 1045
+            1047:          76 Load 79(inF0)
+            1048:          76 Load 80(inF1)
+            1049:          76 ExtInst 1(GLSL.std.450) 48(Step) 1047 1048
+            1050:          76 Load 79(inF0)
+            1051:          76 ExtInst 1(GLSL.std.450) 15(Tan) 1050
+            1052:          76 Load 79(inF0)
+            1053:          76 ExtInst 1(GLSL.std.450) 21(Tanh) 1052
+            1054:          76 Load 79(inF0)
+            1055:          76 Transpose 1054
+            1056:          76 Load 79(inF0)
+            1057:          76 ExtInst 1(GLSL.std.450) 3(Trunc) 1056
+                              ReturnValue 1059
+                              FunctionEnd
+91(TestGenMul2(f1;f1;vf2;vf2;mf22;mf22;):           2 Function None 84
+        85(inF0):      7(ptr) FunctionParameter
+        86(inF1):      7(ptr) FunctionParameter
+       87(inFV0):     25(ptr) FunctionParameter
+       88(inFV1):     25(ptr) FunctionParameter
+       89(inFM0):     61(ptr) FunctionParameter
+       90(inFM1):     61(ptr) FunctionParameter
+              92:             Label
+        1062(r0):      7(ptr) Variable Function
+        1066(r1):     25(ptr) Variable Function
+        1070(r2):     25(ptr) Variable Function
+        1074(r3):      7(ptr) Variable Function
+        1078(r4):     25(ptr) Variable Function
+        1082(r5):     25(ptr) Variable Function
+        1086(r6):     61(ptr) Variable Function
+        1090(r7):     61(ptr) Variable Function
+        1094(r8):     61(ptr) Variable Function
+            1063:    6(float) Load 85(inF0)
+            1064:    6(float) Load 86(inF1)
+            1065:    6(float) FMul 1063 1064
+                              Store 1062(r0) 1065
+            1067:   24(fvec2) Load 87(inFV0)
+            1068:    6(float) Load 85(inF0)
+            1069:   24(fvec2) VectorTimesScalar 1067 1068
+                              Store 1066(r1) 1069
+            1071:    6(float) Load 85(inF0)
+            1072:   24(fvec2) Load 87(inFV0)
+            1073:   24(fvec2) VectorTimesScalar 1072 1071
+                              Store 1070(r2) 1073
+            1075:   24(fvec2) Load 87(inFV0)
+            1076:   24(fvec2) Load 88(inFV1)
+            1077:    6(float) Dot 1075 1076
+                              Store 1074(r3) 1077
+            1079:          60 Load 89(inFM0)
+            1080:   24(fvec2) Load 87(inFV0)
+            1081:   24(fvec2) MatrixTimesVector 1079 1080
+                              Store 1078(r4) 1081
+            1083:   24(fvec2) Load 87(inFV0)
+            1084:          60 Load 89(inFM0)
+            1085:   24(fvec2) VectorTimesMatrix 1083 1084
+                              Store 1082(r5) 1085
+            1087:          60 Load 89(inFM0)
+            1088:    6(float) Load 85(inF0)
+            1089:          60 MatrixTimesScalar 1087 1088
+                              Store 1086(r6) 1089
+            1091:    6(float) Load 85(inF0)
+            1092:          60 Load 89(inFM0)
+            1093:          60 MatrixTimesScalar 1092 1091
+                              Store 1090(r7) 1093
+            1095:          60 Load 89(inFM0)
+            1096:          60 Load 90(inFM1)
+            1097:          60 MatrixTimesMatrix 1095 1096
+                              Store 1094(r8) 1097
+                              Return
+                              FunctionEnd
+100(TestGenMul3(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 93
+        94(inF0):      7(ptr) FunctionParameter
+        95(inF1):      7(ptr) FunctionParameter
+       96(inFV0):     37(ptr) FunctionParameter
+       97(inFV1):     37(ptr) FunctionParameter
+       98(inFM0):     69(ptr) FunctionParameter
+       99(inFM1):     69(ptr) FunctionParameter
+             101:             Label
+        1098(r0):      7(ptr) Variable Function
+        1102(r1):     37(ptr) Variable Function
+        1106(r2):     37(ptr) Variable Function
+        1110(r3):      7(ptr) Variable Function
+        1114(r4):     37(ptr) Variable Function
+        1118(r5):     37(ptr) Variable Function
+        1122(r6):     69(ptr) Variable Function
+        1126(r7):     69(ptr) Variable Function
+        1130(r8):     69(ptr) Variable Function
+            1099:    6(float) Load 94(inF0)
+            1100:    6(float) Load 95(inF1)
+            1101:    6(float) FMul 1099 1100
+                              Store 1098(r0) 1101
+            1103:   36(fvec3) Load 96(inFV0)
+            1104:    6(float) Load 94(inF0)
+            1105:   36(fvec3) VectorTimesScalar 1103 1104
+                              Store 1102(r1) 1105
+            1107:    6(float) Load 94(inF0)
+            1108:   36(fvec3) Load 96(inFV0)
+            1109:   36(fvec3) VectorTimesScalar 1108 1107
+                              Store 1106(r2) 1109
+            1111:   36(fvec3) Load 96(inFV0)
+            1112:   36(fvec3) Load 97(inFV1)
+            1113:    6(float) Dot 1111 1112
+                              Store 1110(r3) 1113
+            1115:          68 Load 98(inFM0)
+            1116:   36(fvec3) Load 96(inFV0)
+            1117:   36(fvec3) MatrixTimesVector 1115 1116
+                              Store 1114(r4) 1117
+            1119:   36(fvec3) Load 96(inFV0)
+            1120:          68 Load 98(inFM0)
+            1121:   36(fvec3) VectorTimesMatrix 1119 1120
+                              Store 1118(r5) 1121
+            1123:          68 Load 98(inFM0)
+            1124:    6(float) Load 94(inF0)
+            1125:          68 MatrixTimesScalar 1123 1124
+                              Store 1122(r6) 1125
+            1127:    6(float) Load 94(inF0)
+            1128:          68 Load 98(inFM0)
+            1129:          68 MatrixTimesScalar 1128 1127
+                              Store 1126(r7) 1129
+            1131:          68 Load 98(inFM0)
+            1132:          68 Load 99(inFM1)
+            1133:          68 MatrixTimesMatrix 1131 1132
+                              Store 1130(r8) 1133
                               Return
                               FunctionEnd
-32(TestGenMul(f1;f1;vf3;vf3;mf33;mf33;):           2 Function None 25
-        26(inF0):      7(ptr) FunctionParameter
-        27(inF1):      7(ptr) FunctionParameter
-       28(inFV0):     22(ptr) FunctionParameter
-       29(inFV1):     22(ptr) FunctionParameter
-       30(inFM0):     24(ptr) FunctionParameter
-       31(inFM1):     24(ptr) FunctionParameter
-              33:             Label
-        1018(r0):      7(ptr) Variable Function
-        1022(r1):     22(ptr) Variable Function
-        1026(r2):     22(ptr) Variable Function
-        1030(r3):      7(ptr) Variable Function
-        1034(r4):     22(ptr) Variable Function
-        1038(r5):     22(ptr) Variable Function
-        1042(r6):     24(ptr) Variable Function
-        1046(r7):     24(ptr) Variable Function
-        1050(r8):     24(ptr) Variable Function
-            1019:    6(float) Load 26(inF0)
-            1020:    6(float) Load 27(inF1)
-            1021:    6(float) FMul 1019 1020
-                              Store 1018(r0) 1021
-            1023:   21(fvec3) Load 28(inFV0)
-            1024:    6(float) Load 26(inF0)
-            1025:   21(fvec3) VectorTimesScalar 1023 1024
-                              Store 1022(r1) 1025
-            1027:    6(float) Load 26(inF0)
-            1028:   21(fvec3) Load 28(inFV0)
-            1029:   21(fvec3) VectorTimesScalar 1028 1027
-                              Store 1026(r2) 1029
-            1031:   21(fvec3) Load 28(inFV0)
-            1032:   21(fvec3) Load 29(inFV1)
-            1033:    6(float) Dot 1031 1032
-                              Store 1030(r3) 1033
-            1035:          23 Load 30(inFM0)
-            1036:   21(fvec3) Load 28(inFV0)
-            1037:   21(fvec3) MatrixTimesVector 1035 1036
-                              Store 1034(r4) 1037
-            1039:   21(fvec3) Load 28(inFV0)
-            1040:          23 Load 30(inFM0)
-            1041:   21(fvec3) VectorTimesMatrix 1039 1040
-                              Store 1038(r5) 1041
-            1043:          23 Load 30(inFM0)
-            1044:    6(float) Load 26(inF0)
-            1045:          23 MatrixTimesScalar 1043 1044
-                              Store 1042(r6) 1045
-            1047:    6(float) Load 26(inF0)
-            1048:          23 Load 30(inFM0)
-            1049:          23 MatrixTimesScalar 1048 1047
-                              Store 1046(r7) 1049
-            1051:          23 Load 30(inFM0)
-            1052:          23 Load 31(inFM1)
-            1053:          23 MatrixTimesMatrix 1051 1052
-                              Store 1050(r8) 1053
+109(TestGenMul4(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 102
+       103(inF0):      7(ptr) FunctionParameter
+       104(inF1):      7(ptr) FunctionParameter
+      105(inFV0):     49(ptr) FunctionParameter
+      106(inFV1):     49(ptr) FunctionParameter
+      107(inFM0):     77(ptr) FunctionParameter
+      108(inFM1):     77(ptr) FunctionParameter
+             110:             Label
+        1134(r0):      7(ptr) Variable Function
+        1138(r1):     49(ptr) Variable Function
+        1142(r2):     49(ptr) Variable Function
+        1146(r3):      7(ptr) Variable Function
+        1150(r4):     49(ptr) Variable Function
+        1154(r5):     49(ptr) Variable Function
+        1158(r6):     77(ptr) Variable Function
+        1162(r7):     77(ptr) Variable Function
+        1166(r8):     77(ptr) Variable Function
+            1135:    6(float) Load 103(inF0)
+            1136:    6(float) Load 104(inF1)
+            1137:    6(float) FMul 1135 1136
+                              Store 1134(r0) 1137
+            1139:   48(fvec4) Load 105(inFV0)
+            1140:    6(float) Load 103(inF0)
+            1141:   48(fvec4) VectorTimesScalar 1139 1140
+                              Store 1138(r1) 1141
+            1143:    6(float) Load 103(inF0)
+            1144:   48(fvec4) Load 105(inFV0)
+            1145:   48(fvec4) VectorTimesScalar 1144 1143
+                              Store 1142(r2) 1145
+            1147:   48(fvec4) Load 105(inFV0)
+            1148:   48(fvec4) Load 106(inFV1)
+            1149:    6(float) Dot 1147 1148
+                              Store 1146(r3) 1149
+            1151:          76 Load 107(inFM0)
+            1152:   48(fvec4) Load 105(inFV0)
+            1153:   48(fvec4) MatrixTimesVector 1151 1152
+                              Store 1150(r4) 1153
+            1155:   48(fvec4) Load 105(inFV0)
+            1156:          76 Load 107(inFM0)
+            1157:   48(fvec4) VectorTimesMatrix 1155 1156
+                              Store 1154(r5) 1157
+            1159:          76 Load 107(inFM0)
+            1160:    6(float) Load 103(inF0)
+            1161:          76 MatrixTimesScalar 1159 1160
+                              Store 1158(r6) 1161
+            1163:    6(float) Load 103(inF0)
+            1164:          76 Load 107(inFM0)
+            1165:          76 MatrixTimesScalar 1164 1163
+                              Store 1162(r7) 1165
+            1167:          76 Load 107(inFM0)
+            1168:          76 Load 108(inFM1)
+            1169:          76 MatrixTimesMatrix 1167 1168
+                              Store 1166(r8) 1169
                               Return
                               FunctionEnd
-45(TestGenMul(f1;f1;vf4;vf4;mf44;mf44;):           2 Function None 38
-        39(inF0):      7(ptr) FunctionParameter
-        40(inF1):      7(ptr) FunctionParameter
-       41(inFV0):     35(ptr) FunctionParameter
-       42(inFV1):     35(ptr) FunctionParameter
-       43(inFM0):     37(ptr) FunctionParameter
-       44(inFM1):     37(ptr) FunctionParameter
-              46:             Label
-        1054(r0):      7(ptr) Variable Function
-        1058(r1):     35(ptr) Variable Function
-        1062(r2):     35(ptr) Variable Function
-        1066(r3):      7(ptr) Variable Function
-        1070(r4):     35(ptr) Variable Function
-        1074(r5):     35(ptr) Variable Function
-        1078(r6):     37(ptr) Variable Function
-        1082(r7):     37(ptr) Variable Function
-        1086(r8):     37(ptr) Variable Function
-            1055:    6(float) Load 39(inF0)
-            1056:    6(float) Load 40(inF1)
-            1057:    6(float) FMul 1055 1056
-                              Store 1054(r0) 1057
-            1059:   34(fvec4) Load 41(inFV0)
-            1060:    6(float) Load 39(inF0)
-            1061:   34(fvec4) VectorTimesScalar 1059 1060
-                              Store 1058(r1) 1061
-            1063:    6(float) Load 39(inF0)
-            1064:   34(fvec4) Load 41(inFV0)
-            1065:   34(fvec4) VectorTimesScalar 1064 1063
-                              Store 1062(r2) 1065
-            1067:   34(fvec4) Load 41(inFV0)
-            1068:   34(fvec4) Load 42(inFV1)
-            1069:    6(float) Dot 1067 1068
-                              Store 1066(r3) 1069
-            1071:          36 Load 43(inFM0)
-            1072:   34(fvec4) Load 41(inFV0)
-            1073:   34(fvec4) MatrixTimesVector 1071 1072
-                              Store 1070(r4) 1073
-            1075:   34(fvec4) Load 41(inFV0)
-            1076:          36 Load 43(inFM0)
-            1077:   34(fvec4) VectorTimesMatrix 1075 1076
-                              Store 1074(r5) 1077
-            1079:          36 Load 43(inFM0)
-            1080:    6(float) Load 39(inF0)
-            1081:          36 MatrixTimesScalar 1079 1080
-                              Store 1078(r6) 1081
-            1083:    6(float) Load 39(inF0)
-            1084:          36 Load 43(inFM0)
-            1085:          36 MatrixTimesScalar 1084 1083
-                              Store 1082(r7) 1085
-            1087:          36 Load 43(inFM0)
-            1088:          36 Load 44(inFM1)
-            1089:          36 MatrixTimesMatrix 1087 1088
-                              Store 1086(r8) 1089
+129(TestGenMulNxM(f1;f1;vf2;vf3;mf32;mf23;mf33;mf43;mf42;):           2 Function None 119
+       120(inF0):      7(ptr) FunctionParameter
+       121(inF1):      7(ptr) FunctionParameter
+      122(inFV2):     25(ptr) FunctionParameter
+      123(inFV3):     37(ptr) FunctionParameter
+    124(inFM2x3):    112(ptr) FunctionParameter
+    125(inFM3x2):    114(ptr) FunctionParameter
+    126(inFM3x3):     69(ptr) FunctionParameter
+    127(inFM3x4):    116(ptr) FunctionParameter
+    128(inFM2x4):    118(ptr) FunctionParameter
+             130:             Label
+       1170(r00):      7(ptr) Variable Function
+       1174(r01):     25(ptr) Variable Function
+       1178(r02):     37(ptr) Variable Function
+       1182(r03):     25(ptr) Variable Function
+       1186(r04):     37(ptr) Variable Function
+       1190(r05):      7(ptr) Variable Function
+       1194(r06):      7(ptr) Variable Function
+       1198(r07):     37(ptr) Variable Function
+       1202(r08):     25(ptr) Variable Function
+       1206(r09):     25(ptr) Variable Function
+       1210(r10):     37(ptr) Variable Function
+       1214(r11):    112(ptr) Variable Function
+       1218(r12):    114(ptr) Variable Function
+       1222(r13):     61(ptr) Variable Function
+       1226(r14):    112(ptr) Variable Function
+       1230(r15):    118(ptr) Variable Function
+       1234(r16):    116(ptr) Variable Function
+            1171:    6(float) Load 120(inF0)
+            1172:    6(float) Load 121(inF1)
+            1173:    6(float) FMul 1171 1172
+                              Store 1170(r00) 1173
+            1175:   24(fvec2) Load 122(inFV2)
+            1176:    6(float) Load 120(inF0)
+            1177:   24(fvec2) VectorTimesScalar 1175 1176
+                              Store 1174(r01) 1177
+            1179:   36(fvec3) Load 123(inFV3)
+            1180:    6(float) Load 120(inF0)
+            1181:   36(fvec3) VectorTimesScalar 1179 1180
+                              Store 1178(r02) 1181
+            1183:    6(float) Load 120(inF0)
+            1184:   24(fvec2) Load 122(inFV2)
+            1185:   24(fvec2) VectorTimesScalar 1184 1183
+                              Store 1182(r03) 1185
+            1187:    6(float) Load 120(inF0)
+            1188:   36(fvec3) Load 123(inFV3)
+            1189:   36(fvec3) VectorTimesScalar 1188 1187
+                              Store 1186(r04) 1189
+            1191:   24(fvec2) Load 122(inFV2)
+            1192:   24(fvec2) Load 122(inFV2)
+            1193:    6(float) Dot 1191 1192
+                              Store 1190(r05) 1193
+            1195:   36(fvec3) Load 123(inFV3)
+            1196:   36(fvec3) Load 123(inFV3)
+            1197:    6(float) Dot 1195 1196
+                              Store 1194(r06) 1197
+            1199:   24(fvec2) Load 122(inFV2)
+            1200:         111 Load 124(inFM2x3)
+            1201:   36(fvec3) VectorTimesMatrix 1199 1200
+                              Store 1198(r07) 1201
+            1203:   36(fvec3) Load 123(inFV3)
+            1204:         113 Load 125(inFM3x2)
+            1205:   24(fvec2) VectorTimesMatrix 1203 1204
+                              Store 1202(r08) 1205
+            1207:         111 Load 124(inFM2x3)
+            1208:   36(fvec3) Load 123(inFV3)
+            1209:   24(fvec2) MatrixTimesVector 1207 1208
+                              Store 1206(r09) 1209
+            1211:         113 Load 125(inFM3x2)
+            1212:   24(fvec2) Load 122(inFV2)
+            1213:   36(fvec3) MatrixTimesVector 1211 1212
+                              Store 1210(r10) 1213
+            1215:         111 Load 124(inFM2x3)
+            1216:    6(float) Load 120(inF0)
+            1217:         111 MatrixTimesScalar 1215 1216
+                              Store 1214(r11) 1217
+            1219:         113 Load 125(inFM3x2)
+            1220:    6(float) Load 120(inF0)
+            1221:         113 MatrixTimesScalar 1219 1220
+                              Store 1218(r12) 1221
+            1223:         111 Load 124(inFM2x3)
+            1224:         113 Load 125(inFM3x2)
+            1225:          60 MatrixTimesMatrix 1223 1224
+                              Store 1222(r13) 1225
+            1227:         111 Load 124(inFM2x3)
+            1228:          68 Load 126(inFM3x3)
+            1229:         111 MatrixTimesMatrix 1227 1228
+                              Store 1226(r14) 1229
+            1231:         111 Load 124(inFM2x3)
+            1232:         115 Load 127(inFM3x4)
+            1233:         117 MatrixTimesMatrix 1231 1232
+                              Store 1230(r15) 1233
+            1235:         113 Load 125(inFM3x2)
+            1236:         117 Load 128(inFM2x4)
+            1237:         115 MatrixTimesMatrix 1235 1236
+                              Store 1234(r16) 1237
                               Return
                               FunctionEnd
index 40dbd89..b081a4a 100755 (executable)
@@ -2,21 +2,22 @@ hlsl.matType.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  move second child to first child (temp 1-component vector of float)
-0:1    'f1' (temp 1-component vector of float)
-0:1    Constant:
-0:1      1.000000
-0:11  Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float)
+0:1  Sequence
+0:1    move second child to first child (temp 1-component vector of float)
+0:1      'f1' (global 1-component vector of float)
+0:1      Constant:
+0:1        1.000000
+0:11  Function Definition: ShaderFunction(vf1;f1; (global 1-component vector of float)
 0:9    Function Parameters: 
 0:9      'inFloat1' (in 1-component vector of float)
 0:9      'inScalar' (in float)
 0:?   Linker Objects
-0:?     'f1' (temp 1-component vector of float)
-0:?     'fmat11' (temp 1X1 matrix of float)
-0:?     'fmat41' (temp 1X4 matrix of float)
-0:?     'fmat12' (temp 2X1 matrix of float)
-0:?     'dmat23' (temp 3X2 matrix of double)
-0:?     'int44' (temp 4X4 matrix of int)
+0:?     'f1' (global 1-component vector of float)
+0:?     'fmat11' (global 1X1 matrix of float)
+0:?     'fmat41' (global 1X4 matrix of float)
+0:?     'fmat12' (global 2X1 matrix of float)
+0:?     'dmat23' (global 3X2 matrix of double)
+0:?     'int44' (global 4X4 matrix of int)
 
 
 Linked fragment stage:
@@ -25,25 +26,26 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  move second child to first child (temp 1-component vector of float)
-0:1    'f1' (temp 1-component vector of float)
-0:1    Constant:
-0:1      1.000000
-0:11  Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float)
+0:1  Sequence
+0:1    move second child to first child (temp 1-component vector of float)
+0:1      'f1' (global 1-component vector of float)
+0:1      Constant:
+0:1        1.000000
+0:11  Function Definition: ShaderFunction(vf1;f1; (global 1-component vector of float)
 0:9    Function Parameters: 
 0:9      'inFloat1' (in 1-component vector of float)
 0:9      'inScalar' (in float)
 0:?   Linker Objects
-0:?     'f1' (temp 1-component vector of float)
-0:?     'fmat11' (temp 1X1 matrix of float)
-0:?     'fmat41' (temp 1X4 matrix of float)
-0:?     'fmat12' (temp 2X1 matrix of float)
-0:?     'dmat23' (temp 3X2 matrix of double)
-0:?     'int44' (temp 4X4 matrix of int)
+0:?     'f1' (global 1-component vector of float)
+0:?     'fmat11' (global 1X1 matrix of float)
+0:?     'fmat41' (global 1X4 matrix of float)
+0:?     'fmat12' (global 2X1 matrix of float)
+0:?     'dmat23' (global 3X2 matrix of double)
+0:?     'int44' (global 4X4 matrix of int)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 36
+// Id's are bound by 38
 
                               Capability Shader
                               Capability Float64
@@ -57,45 +59,48 @@ gl_FragCoord origin is upper left
                               Name 9  "inFloat1"
                               Name 10  "inScalar"
                               Name 14  "f1"
-                              Name 18  "fmat11"
-                              Name 22  "fmat41"
-                              Name 25  "fmat12"
-                              Name 30  "dmat23"
-                              Name 35  "int44"
+                              Name 20  "fmat11"
+                              Name 24  "fmat41"
+                              Name 27  "fmat12"
+                              Name 32  "dmat23"
+                              Name 37  "int44"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypePointer Function 6(float)
                8:             TypeFunction 6(float) 7(ptr) 7(ptr)
-              15:             TypeVector 6(float) 1
-              16:             TypeMatrix 15(fvec) 1
-              17:             TypePointer Function 16
-              19:             TypeVector 6(float) 4
-              20:             TypeMatrix 19(fvec4) 1
-              21:             TypePointer Function 20
-              23:             TypeMatrix 15(fvec) 2
-              24:             TypePointer Function 23
-              26:             TypeFloat 64
-              27:             TypeVector 26(float) 2
-              28:             TypeMatrix 27(fvec2) 3
-              29:             TypePointer Function 28
-              31:             TypeInt 32 1
-              32:             TypeVector 31(int) 4
-              33:             TypeMatrix 32(ivec4) 4
-              34:             TypePointer Function 33
+              13:             TypePointer Private 6(float)
+          14(f1):     13(ptr) Variable Private
+              15:    6(float) Constant 1065353216
+              17:             TypeVector 6(float) 1
+              18:             TypeMatrix 17(fvec) 1
+              19:             TypePointer Private 18
+      20(fmat11):     19(ptr) Variable Private
+              21:             TypeVector 6(float) 4
+              22:             TypeMatrix 21(fvec4) 1
+              23:             TypePointer Private 22
+      24(fmat41):     23(ptr) Variable Private
+              25:             TypeMatrix 17(fvec) 2
+              26:             TypePointer Private 25
+      27(fmat12):     26(ptr) Variable Private
+              28:             TypeFloat 64
+              29:             TypeVector 28(float) 2
+              30:             TypeMatrix 29(fvec2) 3
+              31:             TypePointer Private 30
+      32(dmat23):     31(ptr) Variable Private
+              33:             TypeInt 32 1
+              34:             TypeVector 33(int) 4
+              35:             TypeMatrix 34(ivec4) 4
+              36:             TypePointer Private 35
+       37(int44):     36(ptr) Variable Private
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+                              Store 14(f1) 15
                               FunctionEnd
 11(ShaderFunction(vf1;f1;):    6(float) Function None 8
      9(inFloat1):      7(ptr) FunctionParameter
     10(inScalar):      7(ptr) FunctionParameter
               12:             Label
-          14(f1):      7(ptr) Variable Function
-      18(fmat11):     17(ptr) Variable Function
-      22(fmat41):     21(ptr) Variable Function
-      25(fmat12):     24(ptr) Variable Function
-      30(dmat23):     29(ptr) Variable Function
-       35(int44):     34(ptr) Variable Function
-              13:    6(float) Undef
-                              ReturnValue 13
+              16:    6(float) Undef
+                              ReturnValue 16
                               FunctionEnd
index 02f82bf..aad4799 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.max.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
+0:5  Function Definition: PixelShaderFunction(vf4;vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input1' (in 4-component vector of float)
 0:2      'input2' (in 4-component vector of float)
@@ -20,7 +20,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float)
+0:5  Function Definition: PixelShaderFunction(vf4;vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input1' (in 4-component vector of float)
 0:2      'input2' (in 4-component vector of float)
index 40e1789..d351353 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.precedence.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:10  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (global 4-component vector of float)
 0:7    Function Parameters: 
 0:7      'a1' (in 4-component vector of float)
 0:7      'a2' (in 4-component vector of float)
@@ -26,7 +26,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float)
+0:10  Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (global 4-component vector of float)
 0:7    Function Parameters: 
 0:7      'a1' (in 4-component vector of float)
 0:7      'a2' (in 4-component vector of float)
index 02b8995..bfe2643 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.precedence2.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (temp int)
+0:10  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (global int)
 0:7    Function Parameters: 
 0:7      'a1' (in int)
 0:7      'a2' (in int)
@@ -34,7 +34,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:10  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (temp int)
+0:10  Function Definition: PixelShaderFunction(i1;i1;i1;i1; (global int)
 0:7    Function Parameters: 
 0:7      'a1' (in int)
 0:7      'a2' (in int)
index 97ac03e..082e142 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.scope.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:31  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:31  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -46,7 +46,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:31  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:31  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
index c4875d5..e145ab1 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.sin.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:5  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -18,7 +18,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:5  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:5  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
index 43b1ecb..a70bba6 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.struct.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:40  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:40  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:31    Function Parameters: 
 0:31      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -11,19 +11,19 @@ gl_FragCoord origin is upper left
 0:36        's3' (temp structure{temp 3-component vector of bool b3})
 0:37      move second child to first child (temp 4-component vector of float)
 0:37        i: direct index for structure (temp 4-component vector of float)
-0:37          's2' (temp structure{temp 4-component vector of float i})
+0:37          's2' (global structure{temp 4-component vector of float i})
 0:37          Constant:
 0:37            0 (const int)
 0:37        ff4: direct index for structure (temp 4-component vector of float FragCoord)
-0:37          's4' (temp structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
+0:37          's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
 0:37          Constant:
 0:37            7 (const int)
 0:39      Branch: Return with expression
 0:39        'input' (in 4-component vector of float)
 0:?   Linker Objects
-0:?     's1' (temp structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
-0:?     's2' (temp structure{temp 4-component vector of float i})
-0:?     's4' (temp structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
+0:?     's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
+0:?     's2' (global structure{temp 4-component vector of float i})
+0:?     's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
 
 
 Linked fragment stage:
@@ -32,7 +32,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:40  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:40  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:31    Function Parameters: 
 0:31      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -41,19 +41,19 @@ gl_FragCoord origin is upper left
 0:36        's3' (temp structure{temp 3-component vector of bool b3})
 0:37      move second child to first child (temp 4-component vector of float)
 0:37        i: direct index for structure (temp 4-component vector of float)
-0:37          's2' (temp structure{temp 4-component vector of float i})
+0:37          's2' (global structure{temp 4-component vector of float i})
 0:37          Constant:
 0:37            0 (const int)
 0:37        ff4: direct index for structure (temp 4-component vector of float FragCoord)
-0:37          's4' (temp structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
+0:37          's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
 0:37          Constant:
 0:37            7 (const int)
 0:39      Branch: Return with expression
 0:39        'input' (in 4-component vector of float)
 0:?   Linker Objects
-0:?     's1' (temp structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
-0:?     's2' (temp structure{temp 4-component vector of float i})
-0:?     's4' (temp structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
+0:?     's1' (global structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d})
+0:?     's2' (global structure{temp 4-component vector of float i})
+0:?     's4' (global structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4})
 
 // Module Version 10000
 // Generated by (magic number): 80001
@@ -100,24 +100,24 @@ gl_FragCoord origin is upper left
               17:             TypeFloat 32
               18:             TypeVector 17(float) 4
               19:             TypeStruct 18(fvec4)
-              20:             TypePointer Function 19(struct)
+              20:             TypePointer Private 19(struct)
+          21(s2):     20(ptr) Variable Private
               22:             TypeInt 32 1
               23:     22(int) Constant 0
               24:             TypeVector 17(float) 2
               25:             TypeStruct 18(fvec4) 6(bool) 17(float) 24(fvec2) 6(bool) 6(bool) 6(bool) 18(fvec4)
-              26:             TypePointer Function 25(struct)
+              26:             TypePointer Private 25(struct)
+          27(s4):     26(ptr) Variable Private
               28:     22(int) Constant 7
-              29:             TypePointer Function 18(fvec4)
+              29:             TypePointer Private 18(fvec4)
               33:             TypePointer Input 18(fvec4)
        34(input):     33(ptr) Variable Input
          37(myS):             TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4)
-              38:             TypePointer Function 37(myS)
+              38:             TypePointer Private 37(myS)
+          39(s1):     38(ptr) Variable Private
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
           10(s3):      9(ptr) Variable Function
-          21(s2):     20(ptr) Variable Function
-          27(s4):     26(ptr) Variable Function
-          39(s1):     38(ptr) Variable Function
               11:       8(FS) Load 10(s3)
               12:       8(FS) Load 10(s3)
               13:    7(bvec3) CompositeExtract 11 0
diff --git a/Test/baseResults/hlsl.switch.frag.out b/Test/baseResults/hlsl.switch.frag.out
new file mode 100755 (executable)
index 0000000..c4af33f
--- /dev/null
@@ -0,0 +1,376 @@
+hlsl.switch.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:56  Function Definition: PixelShaderFunction(vf4;i1;i1; (global 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input' (in 4-component vector of float)
+0:2      'c' (in int)
+0:2      'd' (in int)
+0:?     Sequence
+0:3      'c' (in int)
+0:7      switch
+0:7      condition
+0:7        'c' (in int)
+0:7      body
+0:7        Sequence
+0:9          default: 
+0:7          Sequence
+0:7            Branch: Break
+0:12      switch
+0:12      condition
+0:12        'c' (in int)
+0:12      body
+0:12        Sequence
+0:13          case:  with expression
+0:13            Constant:
+0:13              1 (const int)
+0:?           Sequence
+0:14            Pre-Increment (temp 4-component vector of float)
+0:14              'input' (in 4-component vector of float)
+0:15            Branch: Break
+0:16          case:  with expression
+0:16            Constant:
+0:16              2 (const int)
+0:?           Sequence
+0:17            Pre-Decrement (temp 4-component vector of float)
+0:17              'input' (in 4-component vector of float)
+0:18            Branch: Break
+0:21      switch
+0:21      condition
+0:21        'c' (in int)
+0:21      body
+0:21        Sequence
+0:22          case:  with expression
+0:22            Constant:
+0:22              1 (const int)
+0:?           Sequence
+0:23            Pre-Increment (temp 4-component vector of float)
+0:23              'input' (in 4-component vector of float)
+0:24            Branch: Break
+0:25          case:  with expression
+0:25            Constant:
+0:25              2 (const int)
+0:?           Sequence
+0:26            switch
+0:26            condition
+0:26              'd' (in int)
+0:26            body
+0:26              Sequence
+0:27                case:  with expression
+0:27                  Constant:
+0:27                    2 (const int)
+0:?                 Sequence
+0:28                  add second child into first child (temp 4-component vector of float)
+0:28                    'input' (in 4-component vector of float)
+0:28                    Constant:
+0:28                      2.000000
+0:29                  Branch: Break
+0:30                case:  with expression
+0:30                  Constant:
+0:30                    3 (const int)
+0:?                 Sequence
+0:31                  add second child into first child (temp 4-component vector of float)
+0:31                    'input' (in 4-component vector of float)
+0:31                    Constant:
+0:31                      3.000000
+0:32                  Branch: Break
+0:34            Branch: Break
+0:35          default: 
+0:?           Sequence
+0:36            add second child into first child (temp 4-component vector of float)
+0:36              'input' (in 4-component vector of float)
+0:36              Constant:
+0:36                4.000000
+0:39      switch
+0:39      condition
+0:39        'c' (in int)
+0:39      body
+0:39        Sequence
+0:40          case:  with expression
+0:40            Constant:
+0:40              1 (const int)
+0:39          Sequence
+0:39            Branch: Break
+0:43      switch
+0:43      condition
+0:43        'c' (in int)
+0:43      body
+0:43        Sequence
+0:44          case:  with expression
+0:44            Constant:
+0:44              1 (const int)
+0:45          case:  with expression
+0:45            Constant:
+0:45              2 (const int)
+0:46          case:  with expression
+0:46            Constant:
+0:46              3 (const int)
+0:?           Sequence
+0:47            Pre-Increment (temp 4-component vector of float)
+0:47              'input' (in 4-component vector of float)
+0:48            Branch: Break
+0:49          case:  with expression
+0:49            Constant:
+0:49              4 (const int)
+0:50          case:  with expression
+0:50            Constant:
+0:50              5 (const int)
+0:?           Sequence
+0:51            Pre-Decrement (temp 4-component vector of float)
+0:51              'input' (in 4-component vector of float)
+0:54      Branch: Return with expression
+0:54        'input' (in 4-component vector of float)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:56  Function Definition: PixelShaderFunction(vf4;i1;i1; (global 4-component vector of float)
+0:2    Function Parameters: 
+0:2      'input' (in 4-component vector of float)
+0:2      'c' (in int)
+0:2      'd' (in int)
+0:?     Sequence
+0:3      'c' (in int)
+0:7      switch
+0:7      condition
+0:7        'c' (in int)
+0:7      body
+0:7        Sequence
+0:9          default: 
+0:7          Sequence
+0:7            Branch: Break
+0:12      switch
+0:12      condition
+0:12        'c' (in int)
+0:12      body
+0:12        Sequence
+0:13          case:  with expression
+0:13            Constant:
+0:13              1 (const int)
+0:?           Sequence
+0:14            Pre-Increment (temp 4-component vector of float)
+0:14              'input' (in 4-component vector of float)
+0:15            Branch: Break
+0:16          case:  with expression
+0:16            Constant:
+0:16              2 (const int)
+0:?           Sequence
+0:17            Pre-Decrement (temp 4-component vector of float)
+0:17              'input' (in 4-component vector of float)
+0:18            Branch: Break
+0:21      switch
+0:21      condition
+0:21        'c' (in int)
+0:21      body
+0:21        Sequence
+0:22          case:  with expression
+0:22            Constant:
+0:22              1 (const int)
+0:?           Sequence
+0:23            Pre-Increment (temp 4-component vector of float)
+0:23              'input' (in 4-component vector of float)
+0:24            Branch: Break
+0:25          case:  with expression
+0:25            Constant:
+0:25              2 (const int)
+0:?           Sequence
+0:26            switch
+0:26            condition
+0:26              'd' (in int)
+0:26            body
+0:26              Sequence
+0:27                case:  with expression
+0:27                  Constant:
+0:27                    2 (const int)
+0:?                 Sequence
+0:28                  add second child into first child (temp 4-component vector of float)
+0:28                    'input' (in 4-component vector of float)
+0:28                    Constant:
+0:28                      2.000000
+0:29                  Branch: Break
+0:30                case:  with expression
+0:30                  Constant:
+0:30                    3 (const int)
+0:?                 Sequence
+0:31                  add second child into first child (temp 4-component vector of float)
+0:31                    'input' (in 4-component vector of float)
+0:31                    Constant:
+0:31                      3.000000
+0:32                  Branch: Break
+0:34            Branch: Break
+0:35          default: 
+0:?           Sequence
+0:36            add second child into first child (temp 4-component vector of float)
+0:36              'input' (in 4-component vector of float)
+0:36              Constant:
+0:36                4.000000
+0:39      switch
+0:39      condition
+0:39        'c' (in int)
+0:39      body
+0:39        Sequence
+0:40          case:  with expression
+0:40            Constant:
+0:40              1 (const int)
+0:39          Sequence
+0:39            Branch: Break
+0:43      switch
+0:43      condition
+0:43        'c' (in int)
+0:43      body
+0:43        Sequence
+0:44          case:  with expression
+0:44            Constant:
+0:44              1 (const int)
+0:45          case:  with expression
+0:45            Constant:
+0:45              2 (const int)
+0:46          case:  with expression
+0:46            Constant:
+0:46              3 (const int)
+0:?           Sequence
+0:47            Pre-Increment (temp 4-component vector of float)
+0:47              'input' (in 4-component vector of float)
+0:48            Branch: Break
+0:49          case:  with expression
+0:49            Constant:
+0:49              4 (const int)
+0:50          case:  with expression
+0:50            Constant:
+0:50              5 (const int)
+0:?           Sequence
+0:51            Pre-Decrement (temp 4-component vector of float)
+0:51              'input' (in 4-component vector of float)
+0:54      Branch: Return with expression
+0:54        'input' (in 4-component vector of float)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 82
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction" 8 21 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "PixelShaderFunction"
+                              Name 8  "c"
+                              Name 21  "input"
+                              Name 41  "d"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Input 6(int)
+            8(c):      7(ptr) Variable Input
+              18:             TypeFloat 32
+              19:             TypeVector 18(float) 4
+              20:             TypePointer Input 19(fvec4)
+       21(input):     20(ptr) Variable Input
+              23:   18(float) Constant 1065353216
+           41(d):      7(ptr) Variable Input
+              46:   18(float) Constant 1073741824
+              51:   18(float) Constant 1077936128
+              58:   18(float) Constant 1082130432
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+               9:      6(int) Load 8(c)
+                              SelectionMerge 11 None
+                              Switch 9 10
+              10:               Label
+                                Branch 11
+              11:             Label
+              14:      6(int) Load 8(c)
+                              SelectionMerge 17 None
+                              Switch 14 17 
+                                     case 1: 15
+                                     case 2: 16
+              15:               Label
+              22:   19(fvec4)   Load 21(input)
+              24:   19(fvec4)   CompositeConstruct 23 23 23 23
+              25:   19(fvec4)   FAdd 22 24
+                                Store 21(input) 25
+                                Branch 17
+              16:               Label
+              27:   19(fvec4)   Load 21(input)
+              28:   19(fvec4)   CompositeConstruct 23 23 23 23
+              29:   19(fvec4)   FSub 27 28
+                                Store 21(input) 29
+                                Branch 17
+              17:             Label
+              32:      6(int) Load 8(c)
+                              SelectionMerge 36 None
+                              Switch 32 35 
+                                     case 1: 33
+                                     case 2: 34
+              35:               Label
+              59:   19(fvec4)   Load 21(input)
+              60:   19(fvec4)   CompositeConstruct 58 58 58 58
+              61:   19(fvec4)   FAdd 59 60
+                                Store 21(input) 61
+                                Branch 36
+              33:               Label
+              37:   19(fvec4)   Load 21(input)
+              38:   19(fvec4)   CompositeConstruct 23 23 23 23
+              39:   19(fvec4)   FAdd 37 38
+                                Store 21(input) 39
+                                Branch 36
+              34:               Label
+              42:      6(int)   Load 41(d)
+                                SelectionMerge 45 None
+                                Switch 42 45 
+                                       case 2: 43
+                                       case 3: 44
+              43:                 Label
+              47:   19(fvec4)     Load 21(input)
+              48:   19(fvec4)     CompositeConstruct 46 46 46 46
+              49:   19(fvec4)     FAdd 47 48
+                                  Store 21(input) 49
+                                  Branch 45
+              44:                 Label
+              52:   19(fvec4)     Load 21(input)
+              53:   19(fvec4)     CompositeConstruct 51 51 51 51
+              54:   19(fvec4)     FAdd 52 53
+                                  Store 21(input) 54
+                                  Branch 45
+              45:               Label
+                                Branch 36
+              36:             Label
+              63:      6(int) Load 8(c)
+                              SelectionMerge 65 None
+                              Switch 63 65 
+                                     case 1: 64
+              64:               Label
+                                Branch 65
+              65:             Label
+              68:      6(int) Load 8(c)
+                              SelectionMerge 71 None
+                              Switch 68 71 
+                                     case 1: 69
+                                     case 2: 69
+                                     case 3: 69
+                                     case 4: 70
+                                     case 5: 70
+              69:               Label
+              72:   19(fvec4)   Load 21(input)
+              73:   19(fvec4)   CompositeConstruct 23 23 23 23
+              74:   19(fvec4)   FAdd 72 73
+                                Store 21(input) 74
+                                Branch 71
+              70:               Label
+              76:   19(fvec4)   Load 21(input)
+              77:   19(fvec4)   CompositeConstruct 23 23 23 23
+              78:   19(fvec4)   FSub 76 77
+                                Store 21(input) 78
+                                Branch 71
+              71:             Label
+              80:   19(fvec4) Load 21(input)
+                              ReturnValue 80
+                              FunctionEnd
index ab9a0cc..7bb2818 100755 (executable)
@@ -2,14 +2,15 @@ hlsl.swizzle.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  move second child to first child (temp 4-component vector of float)
-0:1    'AmbientColor' (temp 4-component vector of float)
-0:?     Constant:
-0:?       1.000000
-0:?       0.500000
-0:?       0.000000
-0:?       1.000000
-0:7  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
+0:1  Sequence
+0:1    move second child to first child (temp 4-component vector of float)
+0:1      'AmbientColor' (global 4-component vector of float)
+0:?       Constant:
+0:?         1.000000
+0:?         0.500000
+0:?         0.000000
+0:?         1.000000
+0:7  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
 0:4    Function Parameters: 
 0:4      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -28,11 +29,11 @@ gl_FragCoord origin is upper left
 0:5                0 (const int)
 0:5          Construct vec4 (temp 4-component vector of float)
 0:5            direct index (temp float)
-0:5              'AmbientColor' (temp 4-component vector of float)
+0:5              'AmbientColor' (global 4-component vector of float)
 0:5              Constant:
 0:5                2 (const int)
 0:?   Linker Objects
-0:?     'AmbientColor' (temp 4-component vector of float)
+0:?     'AmbientColor' (global 4-component vector of float)
 
 
 Linked fragment stage:
@@ -41,14 +42,15 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:1  move second child to first child (temp 4-component vector of float)
-0:1    'AmbientColor' (temp 4-component vector of float)
-0:?     Constant:
-0:?       1.000000
-0:?       0.500000
-0:?       0.000000
-0:?       1.000000
-0:7  Function Definition: ShaderFunction(vf4; (temp 4-component vector of float)
+0:1  Sequence
+0:1    move second child to first child (temp 4-component vector of float)
+0:1      'AmbientColor' (global 4-component vector of float)
+0:?       Constant:
+0:?         1.000000
+0:?         0.500000
+0:?         0.000000
+0:?         1.000000
+0:7  Function Definition: ShaderFunction(vf4; (global 4-component vector of float)
 0:4    Function Parameters: 
 0:4      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -67,15 +69,15 @@ gl_FragCoord origin is upper left
 0:5                0 (const int)
 0:5          Construct vec4 (temp 4-component vector of float)
 0:5            direct index (temp float)
-0:5              'AmbientColor' (temp 4-component vector of float)
+0:5              'AmbientColor' (global 4-component vector of float)
 0:5              Constant:
 0:5                2 (const int)
 0:?   Linker Objects
-0:?     'AmbientColor' (temp 4-component vector of float)
+0:?     'AmbientColor' (global 4-component vector of float)
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 25
+// Id's are bound by 30
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -86,28 +88,34 @@ gl_FragCoord origin is upper left
                               Name 4  "PixelShaderFunction"
                               Name 11  "ShaderFunction(vf4;"
                               Name 10  "input"
-                              Name 15  "AmbientColor"
+                              Name 14  "AmbientColor"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
                7:             TypeVector 6(float) 4
                8:             TypePointer Function 7(fvec4)
                9:             TypeFunction 7(fvec4) 8(ptr)
-              16:             TypeInt 32 0
-              17:     16(int) Constant 2
-              18:             TypePointer Function 6(float)
+              13:             TypePointer Private 7(fvec4)
+14(AmbientColor):     13(ptr) Variable Private
+              15:    6(float) Constant 1065353216
+              16:    6(float) Constant 1056964608
+              17:    6(float) Constant 0
+              18:    7(fvec4) ConstantComposite 15 16 17 15
+              21:             TypeInt 32 0
+              22:     21(int) Constant 2
+              23:             TypePointer Private 6(float)
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
+                              Store 14(AmbientColor) 18
                               FunctionEnd
 11(ShaderFunction(vf4;):    7(fvec4) Function None 9
        10(input):      8(ptr) FunctionParameter
               12:             Label
-15(AmbientColor):      8(ptr) Variable Function
-              13:    7(fvec4) Load 10(input)
-              14:    7(fvec4) VectorShuffle 13 13 3 3 1 0
-              19:     18(ptr) AccessChain 15(AmbientColor) 17
-              20:    6(float) Load 19
-              21:    7(fvec4) CompositeConstruct 20 20 20 20
-              22:    7(fvec4) FMul 14 21
-                              ReturnValue 22
+              19:    7(fvec4) Load 10(input)
+              20:    7(fvec4) VectorShuffle 19 19 3 3 1 0
+              24:     23(ptr) AccessChain 14(AmbientColor) 22
+              25:    6(float) Load 24
+              26:    7(fvec4) CompositeConstruct 25 25 25 25
+              27:    7(fvec4) FMul 20 26
+                              ReturnValue 27
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.templatetypes.frag.out b/Test/baseResults/hlsl.templatetypes.frag.out
new file mode 100644 (file)
index 0000000..5acb877
--- /dev/null
@@ -0,0 +1,707 @@
+hlsl.templatetypes.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:48  Function Definition: PixelShaderFunction( (global float)
+0:3    Function Parameters: 
+0:?     Sequence
+0:4      Sequence
+0:4        move second child to first child (temp 4-component vector of float)
+0:4          'r00' (temp 4-component vector of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:5      Sequence
+0:5        move second child to first child (temp 4-component vector of float)
+0:5          'r01' (temp 4-component vector of float)
+0:?           Constant:
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:7      Sequence
+0:7        move second child to first child (temp 1-component vector of bool)
+0:7          'r12' (temp 1-component vector of bool)
+0:7          Constant:
+0:7            false (const bool)
+0:8      Sequence
+0:8        move second child to first child (temp 1-component vector of int)
+0:8          'r13' (temp 1-component vector of int)
+0:8          Constant:
+0:8            1 (const int)
+0:9      Sequence
+0:9        move second child to first child (temp 1-component vector of float)
+0:9          'r14' (temp 1-component vector of float)
+0:9          Constant:
+0:9            1.000000
+0:10      Sequence
+0:10        move second child to first child (temp 1-component vector of double)
+0:10          'r15' (temp 1-component vector of double)
+0:10          Constant:
+0:10            1.000000
+0:11      Sequence
+0:11        move second child to first child (temp 1-component vector of uint)
+0:11          'r16' (temp 1-component vector of uint)
+0:11          Constant:
+0:11            1 (const uint)
+0:13      Sequence
+0:13        move second child to first child (temp 2-component vector of bool)
+0:13          'r20' (temp 2-component vector of bool)
+0:?           Constant:
+0:?             false (const bool)
+0:?             true (const bool)
+0:14      Sequence
+0:14        move second child to first child (temp 2-component vector of int)
+0:14          'r21' (temp 2-component vector of int)
+0:?           Constant:
+0:?             1 (const int)
+0:?             2 (const int)
+0:15      Sequence
+0:15        move second child to first child (temp 2-component vector of float)
+0:15          'r22' (temp 2-component vector of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:16      Sequence
+0:16        move second child to first child (temp 2-component vector of double)
+0:16          'r23' (temp 2-component vector of double)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:17      Sequence
+0:17        move second child to first child (temp 2-component vector of uint)
+0:17          'r24' (temp 2-component vector of uint)
+0:?           Constant:
+0:?             1 (const uint)
+0:?             2 (const uint)
+0:19      Sequence
+0:19        move second child to first child (temp 3-component vector of bool)
+0:19          'r30' (temp 3-component vector of bool)
+0:?           Constant:
+0:?             false (const bool)
+0:?             true (const bool)
+0:?             true (const bool)
+0:20      Sequence
+0:20        move second child to first child (temp 3-component vector of int)
+0:20          'r31' (temp 3-component vector of int)
+0:?           Constant:
+0:?             1 (const int)
+0:?             2 (const int)
+0:?             3 (const int)
+0:21      Sequence
+0:21        move second child to first child (temp 3-component vector of float)
+0:21          'r32' (temp 3-component vector of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:22      Sequence
+0:22        move second child to first child (temp 3-component vector of double)
+0:22          'r33' (temp 3-component vector of double)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:23      Sequence
+0:23        move second child to first child (temp 3-component vector of uint)
+0:23          'r34' (temp 3-component vector of uint)
+0:?           Constant:
+0:?             1 (const uint)
+0:?             2 (const uint)
+0:?             3 (const uint)
+0:25      Sequence
+0:25        move second child to first child (temp 4-component vector of bool)
+0:25          'r40' (temp 4-component vector of bool)
+0:?           Constant:
+0:?             false (const bool)
+0:?             true (const bool)
+0:?             true (const bool)
+0:?             false (const bool)
+0:26      Sequence
+0:26        move second child to first child (temp 4-component vector of int)
+0:26          'r41' (temp 4-component vector of int)
+0:?           Constant:
+0:?             1 (const int)
+0:?             2 (const int)
+0:?             3 (const int)
+0:?             4 (const int)
+0:27      Sequence
+0:27        move second child to first child (temp 4-component vector of float)
+0:27          'r42' (temp 4-component vector of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:28      Sequence
+0:28        move second child to first child (temp 4-component vector of double)
+0:28          'r43' (temp 4-component vector of double)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:29      Sequence
+0:29        move second child to first child (temp 4-component vector of uint)
+0:29          'r44' (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:31      Sequence
+0:31        move second child to first child (temp 4X4 matrix of float)
+0:31          'r50' (temp 4X4 matrix of float)
+0:?           Constant:
+0:?             0.000000
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:?             7.000000
+0:?             8.000000
+0:?             9.000000
+0:?             10.000000
+0:?             11.000000
+0:?             12.000000
+0:?             13.000000
+0:?             14.000000
+0:?             15.000000
+0:32      Sequence
+0:32        move second child to first child (temp 4X4 matrix of float)
+0:32          'r51' (temp 4X4 matrix of float)
+0:?           Constant:
+0:?             0.000000
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:?             7.000000
+0:?             8.000000
+0:?             9.000000
+0:?             10.000000
+0:?             11.000000
+0:?             12.000000
+0:?             13.000000
+0:?             14.000000
+0:?             15.000000
+0:35      Sequence
+0:35        move second child to first child (temp 3X2 matrix of float)
+0:35          'r61' (temp 3X2 matrix of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:36      Sequence
+0:36        move second child to first child (temp 2X3 matrix of float)
+0:36          'r62' (temp 2X3 matrix of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:39      Sequence
+0:39        move second child to first child (temp 2X4 matrix of float)
+0:39          'r65' (temp 2X4 matrix of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:?             7.000000
+0:?             8.000000
+0:40      Sequence
+0:40        move second child to first child (temp 3X4 matrix of float)
+0:40          'r66' (temp 3X4 matrix of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:?             7.000000
+0:?             8.000000
+0:?             9.000000
+0:?             10.000000
+0:?             11.000000
+0:?             12.000000
+0:45      Branch: Return with expression
+0:45        Constant:
+0:45          0.000000
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:48  Function Definition: PixelShaderFunction( (global float)
+0:3    Function Parameters: 
+0:?     Sequence
+0:4      Sequence
+0:4        move second child to first child (temp 4-component vector of float)
+0:4          'r00' (temp 4-component vector of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:5      Sequence
+0:5        move second child to first child (temp 4-component vector of float)
+0:5          'r01' (temp 4-component vector of float)
+0:?           Constant:
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:7      Sequence
+0:7        move second child to first child (temp 1-component vector of bool)
+0:7          'r12' (temp 1-component vector of bool)
+0:7          Constant:
+0:7            false (const bool)
+0:8      Sequence
+0:8        move second child to first child (temp 1-component vector of int)
+0:8          'r13' (temp 1-component vector of int)
+0:8          Constant:
+0:8            1 (const int)
+0:9      Sequence
+0:9        move second child to first child (temp 1-component vector of float)
+0:9          'r14' (temp 1-component vector of float)
+0:9          Constant:
+0:9            1.000000
+0:10      Sequence
+0:10        move second child to first child (temp 1-component vector of double)
+0:10          'r15' (temp 1-component vector of double)
+0:10          Constant:
+0:10            1.000000
+0:11      Sequence
+0:11        move second child to first child (temp 1-component vector of uint)
+0:11          'r16' (temp 1-component vector of uint)
+0:11          Constant:
+0:11            1 (const uint)
+0:13      Sequence
+0:13        move second child to first child (temp 2-component vector of bool)
+0:13          'r20' (temp 2-component vector of bool)
+0:?           Constant:
+0:?             false (const bool)
+0:?             true (const bool)
+0:14      Sequence
+0:14        move second child to first child (temp 2-component vector of int)
+0:14          'r21' (temp 2-component vector of int)
+0:?           Constant:
+0:?             1 (const int)
+0:?             2 (const int)
+0:15      Sequence
+0:15        move second child to first child (temp 2-component vector of float)
+0:15          'r22' (temp 2-component vector of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:16      Sequence
+0:16        move second child to first child (temp 2-component vector of double)
+0:16          'r23' (temp 2-component vector of double)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:17      Sequence
+0:17        move second child to first child (temp 2-component vector of uint)
+0:17          'r24' (temp 2-component vector of uint)
+0:?           Constant:
+0:?             1 (const uint)
+0:?             2 (const uint)
+0:19      Sequence
+0:19        move second child to first child (temp 3-component vector of bool)
+0:19          'r30' (temp 3-component vector of bool)
+0:?           Constant:
+0:?             false (const bool)
+0:?             true (const bool)
+0:?             true (const bool)
+0:20      Sequence
+0:20        move second child to first child (temp 3-component vector of int)
+0:20          'r31' (temp 3-component vector of int)
+0:?           Constant:
+0:?             1 (const int)
+0:?             2 (const int)
+0:?             3 (const int)
+0:21      Sequence
+0:21        move second child to first child (temp 3-component vector of float)
+0:21          'r32' (temp 3-component vector of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:22      Sequence
+0:22        move second child to first child (temp 3-component vector of double)
+0:22          'r33' (temp 3-component vector of double)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:23      Sequence
+0:23        move second child to first child (temp 3-component vector of uint)
+0:23          'r34' (temp 3-component vector of uint)
+0:?           Constant:
+0:?             1 (const uint)
+0:?             2 (const uint)
+0:?             3 (const uint)
+0:25      Sequence
+0:25        move second child to first child (temp 4-component vector of bool)
+0:25          'r40' (temp 4-component vector of bool)
+0:?           Constant:
+0:?             false (const bool)
+0:?             true (const bool)
+0:?             true (const bool)
+0:?             false (const bool)
+0:26      Sequence
+0:26        move second child to first child (temp 4-component vector of int)
+0:26          'r41' (temp 4-component vector of int)
+0:?           Constant:
+0:?             1 (const int)
+0:?             2 (const int)
+0:?             3 (const int)
+0:?             4 (const int)
+0:27      Sequence
+0:27        move second child to first child (temp 4-component vector of float)
+0:27          'r42' (temp 4-component vector of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:28      Sequence
+0:28        move second child to first child (temp 4-component vector of double)
+0:28          'r43' (temp 4-component vector of double)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:29      Sequence
+0:29        move second child to first child (temp 4-component vector of uint)
+0:29          'r44' (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:31      Sequence
+0:31        move second child to first child (temp 4X4 matrix of float)
+0:31          'r50' (temp 4X4 matrix of float)
+0:?           Constant:
+0:?             0.000000
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:?             7.000000
+0:?             8.000000
+0:?             9.000000
+0:?             10.000000
+0:?             11.000000
+0:?             12.000000
+0:?             13.000000
+0:?             14.000000
+0:?             15.000000
+0:32      Sequence
+0:32        move second child to first child (temp 4X4 matrix of float)
+0:32          'r51' (temp 4X4 matrix of float)
+0:?           Constant:
+0:?             0.000000
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:?             7.000000
+0:?             8.000000
+0:?             9.000000
+0:?             10.000000
+0:?             11.000000
+0:?             12.000000
+0:?             13.000000
+0:?             14.000000
+0:?             15.000000
+0:35      Sequence
+0:35        move second child to first child (temp 3X2 matrix of float)
+0:35          'r61' (temp 3X2 matrix of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:36      Sequence
+0:36        move second child to first child (temp 2X3 matrix of float)
+0:36          'r62' (temp 2X3 matrix of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:39      Sequence
+0:39        move second child to first child (temp 2X4 matrix of float)
+0:39          'r65' (temp 2X4 matrix of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:?             7.000000
+0:?             8.000000
+0:40      Sequence
+0:40        move second child to first child (temp 3X4 matrix of float)
+0:40          'r66' (temp 3X4 matrix of float)
+0:?           Constant:
+0:?             1.000000
+0:?             2.000000
+0:?             3.000000
+0:?             4.000000
+0:?             5.000000
+0:?             6.000000
+0:?             7.000000
+0:?             8.000000
+0:?             9.000000
+0:?             10.000000
+0:?             11.000000
+0:?             12.000000
+0:45      Branch: Return with expression
+0:45        Constant:
+0:45          0.000000
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 145
+
+                              Capability Shader
+                              Capability Float64
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "PixelShaderFunction"
+                              Name 9  "r00"
+                              Name 15  "r01"
+                              Name 20  "r12"
+                              Name 24  "r13"
+                              Name 27  "r14"
+                              Name 30  "r15"
+                              Name 34  "r16"
+                              Name 38  "r20"
+                              Name 43  "r21"
+                              Name 48  "r22"
+                              Name 52  "r23"
+                              Name 57  "r24"
+                              Name 62  "r30"
+                              Name 66  "r31"
+                              Name 71  "r32"
+                              Name 75  "r33"
+                              Name 80  "r34"
+                              Name 85  "r40"
+                              Name 89  "r41"
+                              Name 92  "r42"
+                              Name 95  "r43"
+                              Name 100  "r44"
+                              Name 105  "r50"
+                              Name 122  "r51"
+                              Name 125  "r61"
+                              Name 131  "r62"
+                              Name 136  "r65"
+                              Name 141  "r66"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:    6(float) Constant 1065353216
+              11:    6(float) Constant 1073741824
+              12:    6(float) Constant 1077936128
+              13:    6(float) Constant 1082130432
+              14:    7(fvec4) ConstantComposite 10 11 12 13
+              16:    6(float) Constant 1084227584
+              17:    7(fvec4) ConstantComposite 11 12 13 16
+              18:             TypeBool
+              19:             TypePointer Function 18(bool)
+              21:    18(bool) ConstantFalse
+              22:             TypeInt 32 1
+              23:             TypePointer Function 22(int)
+              25:     22(int) Constant 1
+              26:             TypePointer Function 6(float)
+              28:             TypeFloat 64
+              29:             TypePointer Function 28(float)
+              31:   28(float) Constant 0 1072693248
+              32:             TypeInt 32 0
+              33:             TypePointer Function 32(int)
+              35:     32(int) Constant 1
+              36:             TypeVector 18(bool) 2
+              37:             TypePointer Function 36(bvec2)
+              39:    18(bool) ConstantTrue
+              40:   36(bvec2) ConstantComposite 21 39
+              41:             TypeVector 22(int) 2
+              42:             TypePointer Function 41(ivec2)
+              44:     22(int) Constant 2
+              45:   41(ivec2) ConstantComposite 25 44
+              46:             TypeVector 6(float) 2
+              47:             TypePointer Function 46(fvec2)
+              49:   46(fvec2) ConstantComposite 10 11
+              50:             TypeVector 28(float) 2
+              51:             TypePointer Function 50(fvec2)
+              53:   28(float) Constant 0 1073741824
+              54:   50(fvec2) ConstantComposite 31 53
+              55:             TypeVector 32(int) 2
+              56:             TypePointer Function 55(ivec2)
+              58:     32(int) Constant 2
+              59:   55(ivec2) ConstantComposite 35 58
+              60:             TypeVector 18(bool) 3
+              61:             TypePointer Function 60(bvec3)
+              63:   60(bvec3) ConstantComposite 21 39 39
+              64:             TypeVector 22(int) 3
+              65:             TypePointer Function 64(ivec3)
+              67:     22(int) Constant 3
+              68:   64(ivec3) ConstantComposite 25 44 67
+              69:             TypeVector 6(float) 3
+              70:             TypePointer Function 69(fvec3)
+              72:   69(fvec3) ConstantComposite 10 11 12
+              73:             TypeVector 28(float) 3
+              74:             TypePointer Function 73(fvec3)
+              76:   28(float) Constant 0 1074266112
+              77:   73(fvec3) ConstantComposite 31 53 76
+              78:             TypeVector 32(int) 3
+              79:             TypePointer Function 78(ivec3)
+              81:     32(int) Constant 3
+              82:   78(ivec3) ConstantComposite 35 58 81
+              83:             TypeVector 18(bool) 4
+              84:             TypePointer Function 83(bvec4)
+              86:   83(bvec4) ConstantComposite 21 39 39 21
+              87:             TypeVector 22(int) 4
+              88:             TypePointer Function 87(ivec4)
+              90:     22(int) Constant 4
+              91:   87(ivec4) ConstantComposite 25 44 67 90
+              93:             TypeVector 28(float) 4
+              94:             TypePointer Function 93(fvec4)
+              96:   28(float) Constant 0 1074790400
+              97:   93(fvec4) ConstantComposite 31 53 76 96
+              98:             TypeVector 32(int) 4
+              99:             TypePointer Function 98(ivec4)
+             101:     32(int) Constant 4
+             102:   98(ivec4) ConstantComposite 35 58 81 101
+             103:             TypeMatrix 7(fvec4) 4
+             104:             TypePointer Function 103
+             106:    6(float) Constant 0
+             107:    7(fvec4) ConstantComposite 106 10 11 12
+             108:    6(float) Constant 1086324736
+             109:    6(float) Constant 1088421888
+             110:    7(fvec4) ConstantComposite 13 16 108 109
+             111:    6(float) Constant 1090519040
+             112:    6(float) Constant 1091567616
+             113:    6(float) Constant 1092616192
+             114:    6(float) Constant 1093664768
+             115:    7(fvec4) ConstantComposite 111 112 113 114
+             116:    6(float) Constant 1094713344
+             117:    6(float) Constant 1095761920
+             118:    6(float) Constant 1096810496
+             119:    6(float) Constant 1097859072
+             120:    7(fvec4) ConstantComposite 116 117 118 119
+             121:         103 ConstantComposite 107 110 115 120
+             123:             TypeMatrix 46(fvec2) 3
+             124:             TypePointer Function 123
+             126:   46(fvec2) ConstantComposite 12 13
+             127:   46(fvec2) ConstantComposite 16 108
+             128:         123 ConstantComposite 49 126 127
+             129:             TypeMatrix 69(fvec3) 2
+             130:             TypePointer Function 129
+             132:   69(fvec3) ConstantComposite 13 16 108
+             133:         129 ConstantComposite 72 132
+             134:             TypeMatrix 7(fvec4) 2
+             135:             TypePointer Function 134
+             137:    7(fvec4) ConstantComposite 16 108 109 111
+             138:         134 ConstantComposite 14 137
+             139:             TypeMatrix 7(fvec4) 3
+             140:             TypePointer Function 139
+             142:    7(fvec4) ConstantComposite 112 113 114 116
+             143:         139 ConstantComposite 14 137 142
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+          9(r00):      8(ptr) Variable Function
+         15(r01):      8(ptr) Variable Function
+         20(r12):     19(ptr) Variable Function
+         24(r13):     23(ptr) Variable Function
+         27(r14):     26(ptr) Variable Function
+         30(r15):     29(ptr) Variable Function
+         34(r16):     33(ptr) Variable Function
+         38(r20):     37(ptr) Variable Function
+         43(r21):     42(ptr) Variable Function
+         48(r22):     47(ptr) Variable Function
+         52(r23):     51(ptr) Variable Function
+         57(r24):     56(ptr) Variable Function
+         62(r30):     61(ptr) Variable Function
+         66(r31):     65(ptr) Variable Function
+         71(r32):     70(ptr) Variable Function
+         75(r33):     74(ptr) Variable Function
+         80(r34):     79(ptr) Variable Function
+         85(r40):     84(ptr) Variable Function
+         89(r41):     88(ptr) Variable Function
+         92(r42):      8(ptr) Variable Function
+         95(r43):     94(ptr) Variable Function
+        100(r44):     99(ptr) Variable Function
+        105(r50):    104(ptr) Variable Function
+        122(r51):    104(ptr) Variable Function
+        125(r61):    124(ptr) Variable Function
+        131(r62):    130(ptr) Variable Function
+        136(r65):    135(ptr) Variable Function
+        141(r66):    140(ptr) Variable Function
+                              Store 9(r00) 14
+                              Store 15(r01) 17
+                              Store 20(r12) 21
+                              Store 24(r13) 25
+                              Store 27(r14) 10
+                              Store 30(r15) 31
+                              Store 34(r16) 35
+                              Store 38(r20) 40
+                              Store 43(r21) 45
+                              Store 48(r22) 49
+                              Store 52(r23) 54
+                              Store 57(r24) 59
+                              Store 62(r30) 63
+                              Store 66(r31) 68
+                              Store 71(r32) 72
+                              Store 75(r33) 77
+                              Store 80(r34) 82
+                              Store 85(r40) 86
+                              Store 89(r41) 91
+                              Store 92(r42) 14
+                              Store 95(r43) 97
+                              Store 100(r44) 102
+                              Store 105(r50) 121
+                              Store 122(r51) 121
+                              Store 125(r61) 128
+                              Store 131(r62) 133
+                              Store 136(r65) 138
+                              Store 141(r66) 143
+                              ReturnValue 106
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.typedef.frag.out b/Test/baseResults/hlsl.typedef.frag.out
new file mode 100755 (executable)
index 0000000..ca0235a
--- /dev/null
@@ -0,0 +1,132 @@
+hlsl.typedef.frag
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: ShaderFunction(vf4;i1; (global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'input' (in 4-component vector of float)
+0:4      'ii' (in int)
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child (temp 4-component vector of float)
+0:6          'a1' (temp 4-component vector of float)
+0:6          Constant:
+0:6            1.000000
+0:6            1.000000
+0:6            1.000000
+0:6            1.000000
+0:7      Sequence
+0:7        move second child to first child (temp int)
+0:7          'i' (temp int)
+0:7          Constant:
+0:7            2 (const int)
+0:9      Sequence
+0:9        move second child to first child (temp int)
+0:9          'j' (temp int)
+0:9          'ii' (in int)
+0:10      Branch: Return with expression
+0:10        add (temp 4-component vector of float)
+0:10          component-wise multiply (temp 4-component vector of float)
+0:10            'input' (in 4-component vector of float)
+0:10            'a1' (temp 4-component vector of float)
+0:10          Construct vec4 (global 4-component vector of float)
+0:10            Convert int to float (temp float)
+0:10              add (temp int)
+0:10                'i' (temp int)
+0:10                'j' (temp int)
+0:?   Linker Objects
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+gl_FragCoord origin is upper left
+0:? Sequence
+0:12  Function Definition: ShaderFunction(vf4;i1; (global 4-component vector of float)
+0:4    Function Parameters: 
+0:4      'input' (in 4-component vector of float)
+0:4      'ii' (in int)
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child (temp 4-component vector of float)
+0:6          'a1' (temp 4-component vector of float)
+0:6          Constant:
+0:6            1.000000
+0:6            1.000000
+0:6            1.000000
+0:6            1.000000
+0:7      Sequence
+0:7        move second child to first child (temp int)
+0:7          'i' (temp int)
+0:7          Constant:
+0:7            2 (const int)
+0:9      Sequence
+0:9        move second child to first child (temp int)
+0:9          'j' (temp int)
+0:9          'ii' (in int)
+0:10      Branch: Return with expression
+0:10        add (temp 4-component vector of float)
+0:10          component-wise multiply (temp 4-component vector of float)
+0:10            'input' (in 4-component vector of float)
+0:10            'a1' (temp 4-component vector of float)
+0:10          Construct vec4 (global 4-component vector of float)
+0:10            Convert int to float (temp float)
+0:10              add (temp int)
+0:10                'i' (temp int)
+0:10                'j' (temp int)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 34
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "PixelShaderFunction"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 450
+                              Name 4  "PixelShaderFunction"
+                              Name 14  "ShaderFunction(vf4;i1;"
+                              Name 12  "input"
+                              Name 13  "ii"
+                              Name 16  "a1"
+                              Name 19  "i"
+                              Name 21  "j"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeInt 32 1
+              10:             TypePointer Function 9(int)
+              11:             TypeFunction 7(fvec4) 8(ptr) 10(ptr)
+              17:    6(float) Constant 1065353216
+              18:    7(fvec4) ConstantComposite 17 17 17 17
+              20:      9(int) Constant 2
+4(PixelShaderFunction):           2 Function None 3
+               5:             Label
+                              FunctionEnd
+14(ShaderFunction(vf4;i1;):    7(fvec4) Function None 11
+       12(input):      8(ptr) FunctionParameter
+          13(ii):     10(ptr) FunctionParameter
+              15:             Label
+          16(a1):      8(ptr) Variable Function
+           19(i):     10(ptr) Variable Function
+           21(j):     10(ptr) Variable Function
+                              Store 16(a1) 18
+                              Store 19(i) 20
+              22:      9(int) Load 13(ii)
+                              Store 21(j) 22
+              23:    7(fvec4) Load 12(input)
+              24:    7(fvec4) Load 16(a1)
+              25:    7(fvec4) FMul 23 24
+              26:      9(int) Load 19(i)
+              27:      9(int) Load 21(j)
+              28:      9(int) IAdd 26 27
+              29:    6(float) ConvertSToF 28
+              30:    7(fvec4) CompositeConstruct 29 29 29 29
+              31:    7(fvec4) FAdd 25 30
+                              ReturnValue 31
+                              FunctionEnd
index 0ddc331..c3fc10c 100755 (executable)
@@ -2,16 +2,16 @@ hlsl.void.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: foo1( (temp void)
+0:2  Function Definition: foo1( (global void)
 0:1    Function Parameters: 
-0:4  Function Definition: foo2( (temp void)
+0:4  Function Definition: foo2( (global void)
 0:2    Function Parameters: 
-0:8  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:8  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:5    Function Parameters: 
 0:5      'input' (in 4-component vector of float)
 0:?     Sequence
-0:6      Function Call: foo1( (temp void)
-0:7      Function Call: foo2( (temp void)
+0:6      Function Call: foo1( (global void)
+0:7      Function Call: foo2( (global void)
 0:?   Linker Objects
 
 
@@ -21,16 +21,16 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: foo1( (temp void)
+0:2  Function Definition: foo1( (global void)
 0:1    Function Parameters: 
-0:4  Function Definition: foo2( (temp void)
+0:4  Function Definition: foo2( (global void)
 0:2    Function Parameters: 
-0:8  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:8  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:5    Function Parameters: 
 0:5      'input' (in 4-component vector of float)
 0:?     Sequence
-0:6      Function Call: foo1( (temp void)
-0:7      Function Call: foo2( (temp void)
+0:6      Function Call: foo1( (global void)
+0:7      Function Call: foo2( (global void)
 0:?   Linker Objects
 
 // Module Version 10000
index f4be34a..aece52a 100755 (executable)
@@ -2,7 +2,7 @@ hlsl.whileLoop.frag
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:8  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
@@ -39,7 +39,7 @@ Linked fragment stage:
 Shader version: 450
 gl_FragCoord origin is upper left
 0:? Sequence
-0:8  Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float)
+0:8  Function Definition: PixelShaderFunction(vf4; (global 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' (in 4-component vector of float)
 0:?     Sequence
diff --git a/Test/baseResults/maxClipDistances.vert.out b/Test/baseResults/maxClipDistances.vert.out
new file mode 100644 (file)
index 0000000..5d44a66
--- /dev/null
@@ -0,0 +1,23 @@
+maxClipDistances.vert
+Shader version: 130
+0:? Sequence
+0:5  Function Definition: main( (global void)
+0:5    Function Parameters: 
+0:?   Linker Objects
+0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
+0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
+0:?     'gl_VertexID' (gl_VertexId int VertexId)
+
+
+Linked vertex stage:
+
+
+Shader version: 130
+0:? Sequence
+0:5  Function Definition: main( (global void)
+0:5    Function Parameters: 
+0:?   Linker Objects
+0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
+0:?     'gl_ClipDistance' (smooth out 8-element array of float ClipDistance)
+0:?     'gl_VertexID' (gl_VertexId int VertexId)
+
index 7a88033..ef9a122 100644 (file)
@@ -297,8 +297,8 @@ ERROR: node is still EOpNull!
 0:?     'b2' (layout(binding=2 ) uniform atomic_uint)
 0:?     'c2' (layout(binding=3 ) uniform atomic_uint)
 0:?     'd2' (layout(binding=2 ) uniform atomic_uint)
-0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
-0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord})
+0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, ...})
+0:?     'anon@5' (out block{invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out implicitly-sized array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out implicitly-sized array of 4-component vector of float TexCoord gl_TexCoord, ...})
 0:?     'ColorInv' (smooth out 3-component vector of float)
 0:?     'Color4' (invariant centroid smooth out 3-component vector of float)
 0:?     'position' (noContraction smooth out 4-component vector of float)
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
new file mode 100755 (executable)
index 0000000..0058e9c
--- /dev/null
@@ -0,0 +1,54 @@
+spv.430.frag
+Warning, version 430 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked fragment stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 24
+
+                              Capability Shader
+                              Capability Geometry
+                              Capability MultiViewport
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9 14 19
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 430
+                              Name 4  "main"
+                              Name 9  "color"
+                              Name 14  "gl_Layer"
+                              Name 19  "gl_ViewportIndex"
+                              Decorate 14(gl_Layer) Flat
+                              Decorate 14(gl_Layer) BuiltIn Layer
+                              Decorate 19(gl_ViewportIndex) Flat
+                              Decorate 19(gl_ViewportIndex) BuiltIn ViewportIndex
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+        9(color):      8(ptr) Variable Output
+              10:    6(float) Constant 1065353216
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeInt 32 1
+              13:             TypePointer Input 12(int)
+    14(gl_Layer):     13(ptr) Variable Input
+19(gl_ViewportIndex):     13(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(color) 11
+              15:     12(int) Load 14(gl_Layer)
+              16:    6(float) ConvertSToF 15
+              17:    7(fvec4) Load 9(color)
+              18:    7(fvec4) VectorTimesScalar 17 16
+                              Store 9(color) 18
+              20:     12(int) Load 19(gl_ViewportIndex)
+              21:    6(float) ConvertSToF 20
+              22:    7(fvec4) Load 9(color)
+              23:    7(fvec4) VectorTimesScalar 22 21
+                              Store 9(color) 23
+                              Return
+                              FunctionEnd
index 07dc1a7..5274913 100755 (executable)
@@ -63,6 +63,7 @@ Linked vertex stage:
                               Decorate 55(sampb2) Binding 5
                               Decorate 56(sampb4) DescriptorSet 0
                               Decorate 56(sampb4) Binding 31
+                              Decorate 62(var) Flat
                               Decorate 62(var) Location 0
                               MemberDecorate 63(MS) 0 Location 17
                               Decorate 63(MS) Block
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
new file mode 100755 (executable)
index 0000000..c6c08b2
--- /dev/null
@@ -0,0 +1,50 @@
+spv.450.tesc
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked tessellation control stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 17
+
+                              Capability Tessellation
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TessellationControl 4  "main" 9 16
+                              ExecutionMode 4 OutputVertices 4
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "patchOut"
+                              Name 10  "S"
+                              MemberName 10(S) 0  "sMem1"
+                              MemberName 10(S) 1  "sMem2"
+                              Name 11  "TheBlock"
+                              MemberName 11(TheBlock) 0  "bMem1"
+                              MemberName 11(TheBlock) 1  "bMem2"
+                              MemberName 11(TheBlock) 2  "s"
+                              Name 16  "tcBlock"
+                              Decorate 9(patchOut) Patch
+                              MemberDecorate 11(TheBlock) 0 Patch
+                              MemberDecorate 11(TheBlock) 1 Patch
+                              MemberDecorate 11(TheBlock) 2 Patch
+                              Decorate 11(TheBlock) Block
+                              Decorate 16(tcBlock) Location 12
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+     9(patchOut):      8(ptr) Variable Output
+           10(S):             TypeStruct 6(float) 6(float)
+    11(TheBlock):             TypeStruct 6(float) 6(float) 10(S)
+              12:             TypeInt 32 0
+              13:     12(int) Constant 2
+              14:             TypeArray 11(TheBlock) 13
+              15:             TypePointer Output 14
+     16(tcBlock):     15(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
index 14a0fe3..01e0932 100755 (executable)
 spv.atomic.comp
-Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
-
-Shader version: 310
-local_size = (1, 1, 1)
-0:? Sequence
-0:14  Function Definition: func(au1; (global highp uint)
-0:14    Function Parameters: 
-0:14      'c' (in highp atomic_uint)
-0:16    Sequence
-0:16      Branch: Return with expression
-0:16        AtomicCounterIncrement (global highp uint)
-0:16          'c' (in highp atomic_uint)
-0:19  Function Definition: main( (global void)
-0:19    Function Parameters: 
-0:21    Sequence
-0:21      MemoryBarrierAtomicCounter (global void)
-0:22      Function Call: func(au1; (global highp uint)
-0:22        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:23      Sequence
-0:23        move second child to first child (temp highp uint)
-0:23          'val' (temp highp uint)
-0:23          AtomicCounter (global highp uint)
-0:23            direct index (layout(binding=0 offset=4 ) temp highp atomic_uint)
-0:23              'countArr' (layout(binding=0 offset=4 ) uniform 4-element array of highp atomic_uint)
-0:23              Constant:
-0:23                2 (const int)
-0:24      AtomicCounterDecrement (global highp uint)
-0:24        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:36  Function Definition: atoms( (global void)
-0:36    Function Parameters: 
-0:38    Sequence
-0:38      Sequence
-0:38        move second child to first child (temp highp int)
-0:38          'origi' (temp highp int)
-0:38          AtomicAdd (global highp int)
-0:38            'atomi' (shared highp int)
-0:38            Constant:
-0:38              3 (const int)
-0:39      Sequence
-0:39        move second child to first child (temp highp uint)
-0:39          'origu' (temp highp uint)
-0:39          AtomicAnd (global highp uint)
-0:39            'atomu' (shared highp uint)
-0:39            'value' (shared highp uint)
-0:40      move second child to first child (temp highp uint)
-0:40        'origu' (temp highp uint)
-0:40        AtomicOr (global highp uint)
-0:40          'atomu' (shared highp uint)
-0:40          Constant:
-0:40            7 (const uint)
-0:41      move second child to first child (temp highp uint)
-0:41        'origu' (temp highp uint)
-0:41        AtomicXor (global highp uint)
-0:41          'atomu' (shared highp uint)
-0:41          Constant:
-0:41            7 (const uint)
-0:42      move second child to first child (temp highp uint)
-0:42        'origu' (temp highp uint)
-0:42        AtomicMin (global highp uint)
-0:42          'atomu' (shared highp uint)
-0:42          'value' (shared highp uint)
-0:43      move second child to first child (temp highp int)
-0:43        'origi' (temp highp int)
-0:43        AtomicMax (global highp int)
-0:43          'atomi' (shared highp int)
-0:43          Constant:
-0:43            7 (const int)
-0:44      move second child to first child (temp highp int)
-0:44        'origi' (temp highp int)
-0:44        AtomicExchange (global highp int)
-0:44          'atomi' (shared highp int)
-0:44          'origi' (temp highp int)
-0:45      move second child to first child (temp highp uint)
-0:45        'origu' (temp highp uint)
-0:45        AtomicCompSwap (global highp uint)
-0:45          'atomu' (shared highp uint)
-0:45          Constant:
-0:45            10 (const uint)
-0:45          'value' (shared highp uint)
-0:46      AtomicAdd (global highp int)
-0:46        direct index (temp highp int)
-0:46          n_frames_rendered: direct index for structure (layout(column_major std140 offset=16 ) buffer highp 4-component vector of int)
-0:46            'result' (layout(binding=0 column_major std140 ) restrict buffer block{layout(column_major std140 offset=0 ) buffer highp float f, layout(column_major std140 offset=16 ) buffer highp 4-component vector of int n_frames_rendered})
-0:46            Constant:
-0:46              1 (const int)
-0:46          Constant:
-0:46            2 (const int)
-0:46        Constant:
-0:46          1 (const int)
-0:?   Linker Objects
-0:?     'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:?     'countArr' (layout(binding=0 offset=4 ) uniform 4-element array of highp atomic_uint)
-0:?     'value' (shared highp uint)
-0:?     'arrX' (global 1-element array of highp int)
-0:?     'arrY' (global 1-element array of highp int)
-0:?     'arrZ' (global 1-element array of highp int)
-0:?     'atomi' (shared highp int)
-0:?     'atomu' (shared highp uint)
-0:?     'result' (layout(binding=0 column_major std140 ) restrict buffer block{layout(column_major std140 offset=0 ) buffer highp float f, layout(column_major std140 offset=16 ) buffer highp 4-component vector of int n_frames_rendered})
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
 
 
 Linked compute stage:
 
 
-Shader version: 310
-local_size = (1, 1, 1)
-0:? Sequence
-0:14  Function Definition: func(au1; (global highp uint)
-0:14    Function Parameters: 
-0:14      'c' (in highp atomic_uint)
-0:16    Sequence
-0:16      Branch: Return with expression
-0:16        AtomicCounterIncrement (global highp uint)
-0:16          'c' (in highp atomic_uint)
-0:19  Function Definition: main( (global void)
-0:19    Function Parameters: 
-0:21    Sequence
-0:21      MemoryBarrierAtomicCounter (global void)
-0:22      Function Call: func(au1; (global highp uint)
-0:22        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:23      Sequence
-0:23        move second child to first child (temp highp uint)
-0:23          'val' (temp highp uint)
-0:23          AtomicCounter (global highp uint)
-0:23            direct index (layout(binding=0 offset=4 ) temp highp atomic_uint)
-0:23              'countArr' (layout(binding=0 offset=4 ) uniform 4-element array of highp atomic_uint)
-0:23              Constant:
-0:23                2 (const int)
-0:24      AtomicCounterDecrement (global highp uint)
-0:24        'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:36  Function Definition: atoms( (global void)
-0:36    Function Parameters: 
-0:38    Sequence
-0:38      Sequence
-0:38        move second child to first child (temp highp int)
-0:38          'origi' (temp highp int)
-0:38          AtomicAdd (global highp int)
-0:38            'atomi' (shared highp int)
-0:38            Constant:
-0:38              3 (const int)
-0:39      Sequence
-0:39        move second child to first child (temp highp uint)
-0:39          'origu' (temp highp uint)
-0:39          AtomicAnd (global highp uint)
-0:39            'atomu' (shared highp uint)
-0:39            'value' (shared highp uint)
-0:40      move second child to first child (temp highp uint)
-0:40        'origu' (temp highp uint)
-0:40        AtomicOr (global highp uint)
-0:40          'atomu' (shared highp uint)
-0:40          Constant:
-0:40            7 (const uint)
-0:41      move second child to first child (temp highp uint)
-0:41        'origu' (temp highp uint)
-0:41        AtomicXor (global highp uint)
-0:41          'atomu' (shared highp uint)
-0:41          Constant:
-0:41            7 (const uint)
-0:42      move second child to first child (temp highp uint)
-0:42        'origu' (temp highp uint)
-0:42        AtomicMin (global highp uint)
-0:42          'atomu' (shared highp uint)
-0:42          'value' (shared highp uint)
-0:43      move second child to first child (temp highp int)
-0:43        'origi' (temp highp int)
-0:43        AtomicMax (global highp int)
-0:43          'atomi' (shared highp int)
-0:43          Constant:
-0:43            7 (const int)
-0:44      move second child to first child (temp highp int)
-0:44        'origi' (temp highp int)
-0:44        AtomicExchange (global highp int)
-0:44          'atomi' (shared highp int)
-0:44          'origi' (temp highp int)
-0:45      move second child to first child (temp highp uint)
-0:45        'origu' (temp highp uint)
-0:45        AtomicCompSwap (global highp uint)
-0:45          'atomu' (shared highp uint)
-0:45          Constant:
-0:45            10 (const uint)
-0:45          'value' (shared highp uint)
-0:46      AtomicAdd (global highp int)
-0:46        direct index (temp highp int)
-0:46          n_frames_rendered: direct index for structure (layout(column_major std140 offset=16 ) buffer highp 4-component vector of int)
-0:46            'result' (layout(binding=0 column_major std140 ) restrict buffer block{layout(column_major std140 offset=0 ) buffer highp float f, layout(column_major std140 offset=16 ) buffer highp 4-component vector of int n_frames_rendered})
-0:46            Constant:
-0:46              1 (const int)
-0:46          Constant:
-0:46            2 (const int)
-0:46        Constant:
-0:46          1 (const int)
-0:?   Linker Objects
-0:?     'counter' (layout(binding=0 offset=0 ) uniform highp atomic_uint)
-0:?     'countArr' (layout(binding=0 offset=4 ) uniform 4-element array of highp atomic_uint)
-0:?     'value' (shared highp uint)
-0:?     'arrX' (global 1-element array of highp int)
-0:?     'arrY' (global 1-element array of highp int)
-0:?     'arrZ' (global 1-element array of highp int)
-0:?     'atomi' (shared highp int)
-0:?     'atomu' (shared highp uint)
-0:?     'result' (layout(binding=0 column_major std140 ) restrict buffer block{layout(column_major std140 offset=0 ) buffer highp float f, layout(column_major std140 offset=16 ) buffer highp 4-component vector of int n_frames_rendered})
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 73
 
+                              Capability Shader
+                              Capability AtomicStorage
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 10  "func(au1;"
+                              Name 9  "c"
+                              Name 12  "atoms("
+                              Name 20  "counter"
+                              Name 23  "val"
+                              Name 27  "countArr"
+                              Name 35  "origi"
+                              Name 37  "atomi"
+                              Name 40  "origu"
+                              Name 42  "atomu"
+                              Name 43  "value"
+                              Name 60  "dataSSB"
+                              MemberName 60(dataSSB) 0  "f"
+                              MemberName 60(dataSSB) 1  "n_frames_rendered"
+                              Name 62  "result"
+                              Name 70  "arrX"
+                              Name 71  "arrY"
+                              Name 72  "arrZ"
+                              Decorate 20(counter) Offset 0
+                              Decorate 20(counter) Binding 0
+                              Decorate 27(countArr) Offset 4
+                              Decorate 27(countArr) Binding 0
+                              MemberDecorate 60(dataSSB) 0 Restrict
+                              MemberDecorate 60(dataSSB) 0 Offset 0
+                              MemberDecorate 60(dataSSB) 1 Restrict
+                              MemberDecorate 60(dataSSB) 1 Offset 16
+                              Decorate 60(dataSSB) BufferBlock
+                              Decorate 62(result) DescriptorSet 0
+                              Decorate 62(result) Binding 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer AtomicCounter 6(int)
+               8:             TypeFunction 6(int) 7(ptr)
+              14:      6(int) Constant 1
+              15:      6(int) Constant 0
+              19:      6(int) Constant 1024
+     20(counter):      7(ptr) Variable AtomicCounter
+              22:             TypePointer Function 6(int)
+              24:      6(int) Constant 4
+              25:             TypeArray 6(int) 24
+              26:             TypePointer AtomicCounter 25
+    27(countArr):     26(ptr) Variable AtomicCounter
+              28:             TypeInt 32 1
+              29:     28(int) Constant 2
+              34:             TypePointer Function 28(int)
+              36:             TypePointer Workgroup 28(int)
+       37(atomi):     36(ptr) Variable Workgroup
+              38:     28(int) Constant 3
+              41:             TypePointer Workgroup 6(int)
+       42(atomu):     41(ptr) Variable Workgroup
+       43(value):     41(ptr) Variable Workgroup
+              46:      6(int) Constant 7
+              51:     28(int) Constant 7
+              55:      6(int) Constant 10
+              58:             TypeFloat 32
+              59:             TypeVector 28(int) 4
+     60(dataSSB):             TypeStruct 58(float) 59(ivec4)
+              61:             TypePointer Uniform 60(dataSSB)
+      62(result):     61(ptr) Variable Uniform
+              63:     28(int) Constant 1
+              64:      6(int) Constant 2
+              65:             TypePointer Uniform 28(int)
+              68:             TypeArray 28(int) 14
+              69:             TypePointer Private 68
+        70(arrX):     69(ptr) Variable Private
+        71(arrY):     69(ptr) Variable Private
+        72(arrZ):     69(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+         23(val):     22(ptr) Variable Function
+                              MemoryBarrier 14 19
+              21:      6(int) FunctionCall 10(func(au1;) 20(counter)
+              30:      7(ptr) AccessChain 27(countArr) 29
+              31:      6(int) AtomicLoad 30 14 15
+                              Store 23(val) 31
+              32:      6(int) AtomicIDecrement 20(counter) 14 15
+              33:      6(int) AtomicIIncrement 20(counter) 14 15
+                              Return
+                              FunctionEnd
+   10(func(au1;):      6(int) Function None 8
+            9(c):      7(ptr) FunctionParameter
+              11:             Label
+              16:      6(int) AtomicIIncrement 9(c) 14 15
+                              ReturnValue 16
+                              FunctionEnd
+      12(atoms():           2 Function None 3
+              13:             Label
+       35(origi):     34(ptr) Variable Function
+       40(origu):     22(ptr) Variable Function
+              39:     28(int) AtomicIAdd 37(atomi) 14 15 38
+                              Store 35(origi) 39
+              44:      6(int) Load 43(value)
+              45:      6(int) AtomicAnd 42(atomu) 14 15 44
+                              Store 40(origu) 45
+              47:      6(int) AtomicOr 42(atomu) 14 15 46
+                              Store 40(origu) 47
+              48:      6(int) AtomicXor 42(atomu) 14 15 46
+                              Store 40(origu) 48
+              49:      6(int) Load 43(value)
+              50:      6(int) AtomicUMin 42(atomu) 14 15 49
+                              Store 40(origu) 50
+              52:     28(int) AtomicSMax 37(atomi) 14 15 51
+                              Store 35(origi) 52
+              53:     28(int) Load 35(origi)
+              54:     28(int) AtomicExchange 37(atomi) 14 15 53
+                              Store 35(origi) 54
+              56:      6(int) Load 43(value)
+              57:      6(int) AtomicCompareExchange 42(atomu) 14 15 15 56 55
+                              Store 40(origu) 57
+              66:     65(ptr) AccessChain 62(result) 63 64
+              67:     28(int) AtomicIAdd 66 14 15 63
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.glFragColor.frag.out b/Test/baseResults/spv.glFragColor.frag.out
new file mode 100755 (executable)
index 0000000..df825a0
--- /dev/null
@@ -0,0 +1,30 @@
+spv.glFragColor.frag
+
+Linked fragment stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 12
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 9
+                              ExecutionMode 4 OriginLowerLeft
+                              Source GLSL 330
+                              Name 4  "main"
+                              Name 9  "gl_FragColor"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+ 9(gl_FragColor):      8(ptr) Variable Output
+              10:    6(float) Constant 1065353216
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+         4(main):           2 Function None 3
+               5:             Label
+                              Store 9(gl_FragColor) 11
+                              Return
+                              FunctionEnd
index 926ab7c..22451b9 100644 (file)
@@ -44,14 +44,6 @@ Linked vertex stage:
                               Name 173  "u3"
                               Name 182  "i3"
                               Name 247  "v4"
-                              Decorate 210 RelaxedPrecision
-                              Decorate 216 RelaxedPrecision
-                              Decorate 223 RelaxedPrecision
-                              Decorate 230 RelaxedPrecision
-                              Decorate 234 RelaxedPrecision
-                              Decorate 240 RelaxedPrecision
-                              Decorate 261 RelaxedPrecision
-                              Decorate 265 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
index 2d6f559..d778fbb 100644 (file)
@@ -162,6 +162,7 @@ Linked vertex stage:
                               Decorate 58(bBt3) BufferBlock
                               Decorate 60(bBtn3) DescriptorSet 1
                               Decorate 60(bBtn3) Binding 0
+                              Decorate 62(sout) Flat
                               MemberDecorate 63(S) 0 Invariant
                               MemberDecorate 63(S) 1 Invariant
                               MemberDecorate 63(S) 2 Invariant
index 2d464de..21c389a 100755 (executable)
@@ -44,8 +44,11 @@ Linked fragment stage:
                               Name 128  "samp2D"
                               Name 134  "foo"
                               Name 135  "foo2"
+                              Decorate 15(foo3) Flat
                               Decorate 90(condition) Flat
                               Decorate 128(samp2D) DescriptorSet 0
+                              Decorate 134(foo) Flat
+                              Decorate 135(foo2) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
new file mode 100755 (executable)
index 0000000..db5a417
--- /dev/null
@@ -0,0 +1,61 @@
+spv.specConst.vert
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked vertex stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 27
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 13 25 26
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 11  "gl_PerVertex"
+                              MemberName 11(gl_PerVertex) 0  "gl_Position"
+                              MemberName 11(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 11(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 13  ""
+                              Name 25  "gl_VertexID"
+                              Name 26  "gl_InstanceID"
+                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 11(gl_PerVertex) Block
+                              Decorate 18 SpecId 11
+                              Decorate 25(gl_VertexID) BuiltIn VertexId
+                              Decorate 26(gl_InstanceID) BuiltIn InstanceId
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypeInt 32 0
+               9:      8(int) Constant 1
+              10:             TypeArray 6(float) 9
+11(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 10 10
+              12:             TypePointer Output 11(gl_PerVertex)
+              13:     12(ptr) Variable Output
+              14:             TypeInt 32 1
+              15:     14(int) Constant 0
+              16:    6(float) Constant 1065353216
+              17:    7(fvec4) ConstantComposite 16 16 16 16
+              18:     14(int) SpecConstant 8
+              22:             TypePointer Output 7(fvec4)
+              24:             TypePointer Input 14(int)
+ 25(gl_VertexID):     24(ptr) Variable Input
+26(gl_InstanceID):     24(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+              19:    6(float) ConvertSToF 18
+              20:    7(fvec4) CompositeConstruct 19 19 19 19
+              21:    7(fvec4) FDiv 17 20
+              23:     22(ptr) AccessChain 13 15
+                              Store 23 21
+                              Return
+                              FunctionEnd
index b84b5ba..1f8ee96 100755 (executable)
@@ -39,6 +39,9 @@ Linked fragment stage:
                               Name 63  "coord"
                               Name 69  "constructed"
                               Decorate 10(Count) Flat
+                              Decorate 20(foo3) Flat
+                              Decorate 34(foo2) Flat
+                              Decorate 36(foo) Flat
                               Decorate 59(samp2D) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
index 97c3b2b..7306078 100644 (file)
@@ -138,4 +138,11 @@ const cag a0[3] = cag[3](cag(3, 2.0, true), cag(1, 5.0, true), cag(1, 9.0, false
 void foo4()\r
 {\r
     int a = int(a0[2].f);\r
-}
\ No newline at end of file
+}\r
+\r
+const bool cval1 = all(bvec4(true, true, true, true));\r
+const bool cval2 = all(bvec4(false, false, false, false));\r
+const bool cval3 = all(bvec4(true, true, false, true));\r
+const bool cval4 = any(bvec4(true, true, true, true));\r
+const bool cval5 = any(bvec4(false, false, false, false));\r
+const bool cval6 = any(bvec4(false, true, false, false));\r
index 15ebc60..e5c3ed0 100644 (file)
@@ -68,3 +68,8 @@ void aggCall()
     float F;\r
     m(ivec2(F));  // test input conversion of single argument that's an aggregate; other function tests in 120.vert\r
 }\r
+\r
+vec4 badConv()\r
+{\r
+    return u;     // ERROR, can change scalar to vector\r
+}
\ No newline at end of file
diff --git a/Test/glspv.esversion.vert b/Test/glspv.esversion.vert
new file mode 100644 (file)
index 0000000..23501bf
--- /dev/null
@@ -0,0 +1,5 @@
+#version 310 es\r
+\r
+void main()\r
+{\r
+}\r
diff --git a/Test/glspv.frag b/Test/glspv.frag
new file mode 100644 (file)
index 0000000..cea8e13
--- /dev/null
@@ -0,0 +1,14 @@
+#version 330\r
+\r
+#ifdef GL_SPIRV\r
+#error GL_SPIRV is set ( correct, not an error )\r
+#if GL_SPIRV == 100\r
+#error GL_SPIR is 100\r
+#endif\r
+#endif\r
+\r
+void main()\r
+{\r
+}\r
+\r
+layout(input_attachment_index = 1) uniform subpassInput sub; // ERROR, no inputs\r
diff --git a/Test/glspv.version.frag b/Test/glspv.version.frag
new file mode 100644 (file)
index 0000000..c9c6779
--- /dev/null
@@ -0,0 +1,5 @@
+#version 330 compatibility\r
+\r
+void main()\r
+{\r
+}\r
diff --git a/Test/glspv.version.vert b/Test/glspv.version.vert
new file mode 100644 (file)
index 0000000..c8573b7
--- /dev/null
@@ -0,0 +1,5 @@
+#version 150\r
+\r
+void main()\r
+{\r
+}\r
diff --git a/Test/glspv.vert b/Test/glspv.vert
new file mode 100644 (file)
index 0000000..d2724ca
--- /dev/null
@@ -0,0 +1,20 @@
+#version 450\r
+\r
+layout(push_constant) uniform Material { int a; } mat;            // ERROR, can't use push_constant\r
+\r
+layout(set = 0, binding = 0, std140) uniform Bt1 { int a; } bt1;\r
+layout(set = 1, binding = 0, std140) uniform Bt2 { int a; } bt2;  // ERROR, set has to be 0\r
+\r
+layout(shared) uniform Bt3 { int a; } bt3;                        // ERROR, no shared\r
+layout(packed) uniform Bt4 { int a; } bt4;                        // ERROR, no shared\r
+\r
+void main()\r
+{\r
+    gl_VertexIndex;   // ERROR, not preset\r
+    gl_InstanceIndex; // ERROR, not present\r
+    gl_VertexID;\r
+    gl_InstanceID;\r
+    gl_DepthRangeParameters; // ERROR, not present\r
+}\r
+\r
+uniform sampler s; // ERROR, no sampler\r
diff --git a/Test/hlsl.discard.frag b/Test/hlsl.discard.frag
new file mode 100644 (file)
index 0000000..e8b5267
--- /dev/null
@@ -0,0 +1,14 @@
+void foo(float f)
+{
+       if (f < 1.0)
+               discard;
+}
+
+float4 PixelShaderFunction(float4 input) : COLOR0
+{
+    foo(input.z);
+       if (input.x)
+               discard;
+       float f = input.x;
+       discard;
+}
index 9109de7..2495e6e 100644 (file)
@@ -5,4 +5,9 @@ float4 PixelShaderFunction(float4 input) : COLOR0
     [unroll] for (; input != input; ) {}
     for (; input != input; ) { return -input; }
     for (--input; input != input; input += 2) { return -input; }
+       for (;;) if (input.x > 2.0) break;
+       for (;;) if (input.x > 2.0) continue;
+       float ii;
+       for (int ii = -1; ii < 3; ++ii) if (ii == 2) continue;
+       --ii;
 }
index 1f0dde7..1f6dc41 100644 (file)
@@ -25,4 +25,9 @@ float4 PixelShaderFunction(float4 input) : COLOR0
     } else {
         return -input;
     }
+
+       int ii;
+       if (float ii = input.z)
+           ++ii;
+       ++ii;
 }
diff --git a/Test/hlsl.init.frag b/Test/hlsl.init.frag
new file mode 100644 (file)
index 0000000..5acf55d
--- /dev/null
@@ -0,0 +1,24 @@
+float4 a1 = float4(1, 0.5, 0, 1), b1 = float4(2.0, 2.5, 2.1, 2.2);
+float4 a1i = {1, 0.5, 0, 1}, b1i = {2.0, 2.5, 2.1, 2.2};
+float a2 = 0.2, b2;
+float a3, b3 = 0.3;
+float a4, b4 = 0.4, c4;
+float a5 = 0.5, b5, c5 = 1.5;
+
+float4 ShaderFunction(float4 input) : COLOR0
+{
+    float4 a2 = float4(0.2, 0.3, 0.4, 0.5);
+    struct S1 {
+        float f;
+        int i;
+    };
+    struct S2 {
+        int  j;
+        float g;
+        S1 s1;
+    };
+    S2 s2i = { 9, a5, { (a3,a4), 12} }, s2 = S2(9, a5, S1((a3,a4), 12));
+    float a8 = (a2, b2), a9 = a5;
+
+    return input * a1;
+}
index 79f3d7d..642a0fc 100644 (file)
@@ -13,7 +13,7 @@ gs uint4 gs_ua4;
 gs uint4 gs_ub4;
 gs uint4 gs_uc4;
 
-float ComputeShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1)
+float ComputeShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
 {
     uint out_u1;
 
@@ -41,13 +41,13 @@ float ComputeShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint
     return 0.0;
 }
 
-float1 ComputeShaderFunction(float1 inF0, float1 inF1, float1 inF2)
+float1 ComputeShaderFunction1(float1 inF0, float1 inF1, float1 inF2)
 {
     // TODO: ... add when float1 prototypes are generated
     return 0.0;
 }
 
-float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
+float2 ComputeShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
 {
     uint2 out_u2;
 
@@ -74,7 +74,7 @@ float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0,
     return float2(1,2);
 }
 
-float3 ComputeShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
+float3 ComputeShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
 {
     uint3 out_u3;
     
diff --git a/Test/hlsl.intrinsics.double.frag b/Test/hlsl.intrinsics.double.frag
new file mode 100644 (file)
index 0000000..013422a
--- /dev/null
@@ -0,0 +1,11 @@
+
+float PixelShaderFunction(double inDV1a, double inDV1b, double inDV1c,
+                          double2 inDV2, double3 inDV3, double4 inDV4,
+                          uint inU1a, uint inU1b)
+{
+    double  r00 = fma(inDV1a, inDV1b, inDV1c);
+    double  r01 = asdouble(inU1a, inU1b);
+
+    return 0.0;
+}
+
index 4a68a67..91ff33e 100644 (file)
@@ -1,24 +1,24 @@
-float PixelShaderFunction(float inF0)
+float PixelShaderFunctionS(float inF0)
 {
     f32tof16(inF0);
 
     return 0.0;
 }
 
-float1 PixelShaderFunction(float1 inF0)
+float1 PixelShaderFunction1(float1 inF0)
 {
     // TODO: ... add when float1 prototypes are generated
     return 0.0;
 }
 
-float2 PixelShaderFunction(float2 inF0)
+float2 PixelShaderFunction2(float2 inF0)
 {
     f32tof16(inF0);
 
     return float2(1,2);
 }
 
-float3 PixelShaderFunction(float3 inF0)
+float3 PixelShaderFunction3(float3 inF0)
 {
     f32tof16(inF0);
 
index a0915c2..dd417a1 100644 (file)
@@ -13,237 +13,243 @@ gs uint4 gs_ua4;
 gs uint4 gs_ub4;
 gs uint4 gs_uc4;
 
-float PixelShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1)
+float PixelShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
 {
     uint out_u1;
 
-    all(inF0);
-    abs(inF0);
-    acos(inF0);
-    any(inF0);
-    asin(inF0);
-    asint(inF0);
-    asuint(inF0);
-    asfloat(inU0);
+    bool r000 = all(inF0);
+    float r001 = abs(inF0);
+    float r002 = acos(inF0);
+    bool r003 = any(inF0);
+    float r004 = asin(inF0);
+    int r005 = asint(inF0);
+    uint r006 = asuint(inF0);
+    float r007 = asfloat(inU0);
     // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
-    atan(inF0);
-    atan2(inF0, inF1);
-    ceil(inF0);
-    clamp(inF0, inF1, inF2);
+    float r009 = atan(inF0);
+    float r010 = atan2(inF0, inF1);
+    float r011 = ceil(inF0);
+    float r012 = clamp(inF0, inF1, inF2);
     clip(inF0);
-    cos(inF0);
-    cosh(inF0);
-    countbits(7);
-    ddx(inF0);
-    ddx_coarse(inF0);
-    ddx_fine(inF0);
-    ddy(inF0);
-    ddy_coarse(inF0);
-    ddy_fine(inF0);
-    degrees(inF0);
+    float r014 = cos(inF0);
+    float r015 = cosh(inF0);
+    uint r016 = countbits(7);
+    float r017 = ddx(inF0);
+    float r018 = ddx_coarse(inF0);
+    float r019 = ddx_fine(inF0);
+    float r020 = ddy(inF0);
+    float r021 = ddy_coarse(inF0);
+    float r022 = ddy_fine(inF0);
+    float r023 = degrees(inF0);
     // EvaluateAttributeAtCentroid(inF0);
     // EvaluateAttributeAtSample(inF0, 0);
     // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
-    exp(inF0);
-    exp2(inF0);
-    firstbithigh(7);
-    firstbitlow(7);
-    floor(inF0);
+    float r027 = exp(inF0);
+    float r028 = exp2(inF0);
+    uint r029 = firstbithigh(7);
+    uint r030 = firstbitlow(7);
+    float r031 = floor(inF0);
     // TODO: fma(inD0, inD1, inD2);
-    fmod(inF0, inF1);
-    frac(inF0);
-    frexp(inF0, inF1);
-    fwidth(inF0);
-    isinf(inF0);
-    isnan(inF0);
-    ldexp(inF0, inF1);
-    log(inF0);
-    log10(inF0);
-    log2(inF0);
-    max(inF0, inF1);
-    min(inF0, inF1);
-    pow(inF0, inF1);
-    radians(inF0);
-    rcp(inF0);
-    reversebits(2);
-    round(inF0);
-    rsqrt(inF0);
-    saturate(inF0);
-    sign(inF0);
-    sin(inF0);
+    float r033 = fmod(inF0, inF1);
+    float r034 = frac(inF0);
+    float r035 = frexp(inF0, inF1);
+    float r036 = fwidth(inF0);
+    bool r037 = isinf(inF0);
+    bool r038 = isnan(inF0);
+    float r039 = ldexp(inF0, inF1);
+    float r039a = lerp(inF0, inF1, inF2);
+    float r040 = log(inF0);
+    float r041 = log10(inF0);
+    float r042 = log2(inF0);
+    float r043 = max(inF0, inF1);
+    float r044 = min(inF0, inF1);
+    float r045 = pow(inF0, inF1);
+    float r046 = radians(inF0);
+    float r047 = rcp(inF0);
+    uint r048 = reversebits(2);
+    float r049 = round(inF0);
+    float r050 = rsqrt(inF0);
+    float r051 = saturate(inF0);
+    float r052 = sign(inF0);
+    float r053 = sin(inF0);
     sincos(inF0, inF1, inF2);
-    sinh(inF0);
-    smoothstep(inF0, inF1, inF2);
-    sqrt(inF0);
-    step(inF0, inF1);
-    tan(inF0);
-    tanh(inF0);
+    float r055 = sinh(inF0);
+    float r056 = smoothstep(inF0, inF1, inF2);
+    float r057 = sqrt(inF0);
+    float r058 = step(inF0, inF1);
+    float r059 = tan(inF0);
+    float r060 = tanh(inF0);
     // TODO: sampler intrinsics, when we can declare the types.
-    trunc(inF0);
+    float r061 = trunc(inF0);
 
     return 0.0;
 }
 
-float1 PixelShaderFunction(float1 inF0, float1 inF1, float1 inF2)
+float1 PixelShaderFunction1(float1 inF0, float1 inF1, float1 inF2)
 {
     // TODO: ... add when float1 prototypes are generated
     return 0.0;
 }
 
-float2 PixelShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
+float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
 {
     uint2 out_u2;
 
-    all(inF0);
-    abs(inF0);
-    acos(inF0);
-    any(inF0);
-    asin(inF0);
-    asint(inF0);
-    asuint(inF0);
-    asfloat(inU0);
+    bool r000 = all(inF0);
+    float2 r001 = abs(inF0);
+    float2 r002 = acos(inF0);
+    bool r003 = any(inF0);
+    float2 r004 = asin(inF0);
+    int2 r005 = asint(inF0);
+    uint2 r006 = asuint(inF0);
+    float2 r007 = asfloat(inU0);
     // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
-    atan(inF0);
-    atan2(inF0, inF1);
-    ceil(inF0);
-    clamp(inF0, inF1, inF2);
+    float2 r009 = atan(inF0);
+    float2 r010 = atan2(inF0, inF1);
+    float2 r011 = ceil(inF0);
+    float2 r012 = clamp(inF0, inF1, inF2);
     clip(inF0);
-    cos(inF0);
-    cosh(inF0);
-    countbits(int2(7,3));
-    ddx(inF0);
-    ddx_coarse(inF0);
-    ddx_fine(inF0);
-    ddy(inF0);
-    ddy_coarse(inF0);
-    ddy_fine(inF0);
-    degrees(inF0);
-    distance(inF0, inF1);
-    dot(inF0, inF1);
+    float2 r013 = cos(inF0);
+    float2 r015 = cosh(inF0);
+    uint2 r016 = countbits(int2(7,3));
+    float2 r017 = ddx(inF0);
+    float2 r018 = ddx_coarse(inF0);
+    float2 r019 = ddx_fine(inF0);
+    float2 r020 = ddy(inF0);
+    float2 r021 = ddy_coarse(inF0);
+    float2 r022 = ddy_fine(inF0);
+    float2 r023 = degrees(inF0);
     // EvaluateAttributeAtCentroid(inF0);
     // EvaluateAttributeAtSample(inF0, 0);
     // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
-    exp(inF0);
-    exp2(inF0);
-    faceforward(inF0, inF1, inF2);
-    firstbithigh(7);
-    firstbitlow(7);
-    floor(inF0);
+    float r026 = distance(inF0, inF1);
+    float r027 = dot(inF0, inF1);
+    // EvaluateAttributeAtCentroid(inF0);
+    // EvaluateAttributeAtSample(inF0, 0);
+    // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
+    float2 r028 = exp(inF0);
+    float2 r029 = exp2(inF0);
+    float2 r030 = faceforward(inF0, inF1, inF2);
+    uint2 r031 = firstbithigh(uint2(7,8));
+    uint2 r032 = firstbitlow(uint2(7,8));
+    float2 r033 = floor(inF0);
     // TODO: fma(inD0, inD1, inD2);
-    fmod(inF0, inF1);
-    frac(inF0);
-    frexp(inF0, inF1);
-    fwidth(inF0);
-    isinf(inF0);
-    isnan(inF0);
-    ldexp(inF0, inF1);
-    length(inF0);
-    log(inF0);
-    log10(inF0);
-    log2(inF0);
-    max(inF0, inF1);
-    min(inF0, inF1);
-    normalize(inF0);
-    pow(inF0, inF1);
-    radians(inF0);
-    rcp(inF0);
-    reflect(inF0, inF1);
-    refract(inF0, inF1, 2.0);
-    reversebits(int2(1,2));
-    round(inF0);
-    rsqrt(inF0);
-    saturate(inF0);
-    sign(inF0);
-    sin(inF0);
+    float2 r035 = fmod(inF0, inF1);
+    float2 r036 = frac(inF0);
+    float2 r037 = frexp(inF0, inF1);
+    float2 r038 = fwidth(inF0);
+    bool2 r039 = isinf(inF0);
+    bool2 r040 = isnan(inF0);
+    float2 r041 = ldexp(inF0, inF1);
+    float2 r039a = lerp(inF0, inF1, inF2);
+    float r042 = length(inF0);
+    float2 r043 = log(inF0);
+    float2 r044 = log10(inF0);
+    float2 r045 = log2(inF0);
+    float2 r046 = max(inF0, inF1);
+    float2 r047 = min(inF0, inF1);
+    float2 r048 = normalize(inF0);
+    float2 r049 = pow(inF0, inF1);
+    float2 r050 = radians(inF0);
+    float2 r051 = rcp(inF0);
+    float2 r052 = reflect(inF0, inF1);
+    float2 r053 = refract(inF0, inF1, 2.0);
+    uint2 r054 = reversebits(uint2(1,2));
+    float2 r055 = round(inF0);
+    float2 r056 = rsqrt(inF0);
+    float2 r057 = saturate(inF0);
+    float2 r058 = sign(inF0);
+    float2 r059 = sin(inF0);
     sincos(inF0, inF1, inF2);
-    sinh(inF0);
-    smoothstep(inF0, inF1, inF2);
-    sqrt(inF0);
-    step(inF0, inF1);
-    tan(inF0);
-    tanh(inF0);
+    float2 r060 = sinh(inF0);
+    float2 r061 = smoothstep(inF0, inF1, inF2);
+    float2 r062 = sqrt(inF0);
+    float2 r063 = step(inF0, inF1);
+    float2 r064 = tan(inF0);
+    float2 r065 = tanh(inF0);
     // TODO: sampler intrinsics, when we can declare the types.
-    trunc(inF0);
+    float2 r066 = trunc(inF0);
 
     // TODO: ... add when float1 prototypes are generated
     return float2(1,2);
 }
 
-float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
+float3 PixelShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
 {
     uint3 out_u3;
     
-    all(inF0);
-    abs(inF0);
-    acos(inF0);
-    any(inF0);
-    asin(inF0);
-    asint(inF0);
-    asuint(inF0);
-    asfloat(inU0);
+    bool r000 = all(inF0);
+    float3 r001 = abs(inF0);
+    float3 r002 = acos(inF0);
+    bool r003 = any(inF0);
+    float3 r004 = asin(inF0);
+    int3 r005 = asint(inF0);
+    uint3 r006 = asuint(inF0);
+    float3 r007 = asfloat(inU0);
     // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
-    atan(inF0);
-    atan2(inF0, inF1);
-    ceil(inF0);
-    clamp(inF0, inF1, inF2);
+    float3 r009 = atan(inF0);
+    float3 r010 = atan2(inF0, inF1);
+    float3 r011 = ceil(inF0);
+    float3 r012 = clamp(inF0, inF1, inF2);
     clip(inF0);
-    cos(inF0);
-    cosh(inF0);
-    countbits(int3(7,3,5));
-    cross(inF0, inF1);
-    ddx(inF0);
-    ddx_coarse(inF0);
-    ddx_fine(inF0);
-    ddy(inF0);
-    ddy_coarse(inF0);
-    ddy_fine(inF0);
-    degrees(inF0);
-    distance(inF0, inF1);
-    dot(inF0, inF1);
+    float3 r013 = cos(inF0);
+    float3 r014 = cosh(inF0);
+    uint3 r015 = countbits(uint3(7,3,5));
+    float3 r016 = cross(inF0, inF1);
+    float3 r017 = ddx(inF0);
+    float3 r018 = ddx_coarse(inF0);
+    float3 r019 = ddx_fine(inF0);
+    float3 r020 = ddy(inF0);
+    float3 r021 = ddy_coarse(inF0);
+    float3 r022 = ddy_fine(inF0);
+    float3 r023 = degrees(inF0);
+    float r024 = distance(inF0, inF1);
+    float r025 = dot(inF0, inF1);
     // EvaluateAttributeAtCentroid(inF0);
     // EvaluateAttributeAtSample(inF0, 0);
     // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
-    exp(inF0);
-    exp2(inF0);
-    faceforward(inF0, inF1, inF2);
-    firstbithigh(7);
-    firstbitlow(7);
-    floor(inF0);
+    float3 r029 = exp(inF0);
+    float3 r030 = exp2(inF0);
+    float3 r031 = faceforward(inF0, inF1, inF2);
+    uint3 r032 = firstbithigh(uint3(2,3,4));
+    uint3 r033 = firstbitlow(uint3(2,3,4));
+    float3 r034 = floor(inF0);
     // TODO: fma(inD0, inD1, inD2);
-    fmod(inF0, inF1);
-    frac(inF0);
-    frexp(inF0, inF1);
-    fwidth(inF0);
-    isinf(inF0);
-    isnan(inF0);
-    ldexp(inF0, inF1);
-    length(inF0);
-    log(inF0);
-    log10(inF0);
-    log2(inF0);
-    max(inF0, inF1);
-    min(inF0, inF1);
-    normalize(inF0);
-    pow(inF0, inF1);
-    radians(inF0);
-    rcp(inF0);
-    reflect(inF0, inF1);
-    refract(inF0, inF1, 2.0);
-    reversebits(int3(1,2,3));
-    round(inF0);
-    rsqrt(inF0);
-    saturate(inF0);
-    sign(inF0);
-    sin(inF0);
+    float3 r036 = fmod(inF0, inF1);
+    float3 r037 = frac(inF0);
+    float3 r038 = frexp(inF0, inF1);
+    float3 r039 = fwidth(inF0);
+    bool3 r040 = isinf(inF0);
+    bool3 r041 = isnan(inF0);
+    float3 r042 = ldexp(inF0, inF1);
+    float3 r039a = lerp(inF0, inF1, inF2);
+    float r043 = length(inF0);
+    float3 r044 = log(inF0);
+    float3 r045 = log10(inF0);
+    float3 r046 = log2(inF0);
+    float3 r047 = max(inF0, inF1);
+    float3 r048 = min(inF0, inF1);
+    float3 r049 = normalize(inF0);
+    float3 r050 = pow(inF0, inF1);
+    float3 r051 = radians(inF0);
+    float3 r052 = rcp(inF0);
+    float3 r053 = reflect(inF0, inF1);
+    float3 r054 = refract(inF0, inF1, 2.0);
+    uint3 r055 = reversebits(uint3(1,2,3));
+    float3 r056 = round(inF0);
+    float3 r057 = rsqrt(inF0);
+    float3 r058 = saturate(inF0);
+    float3 r059 = sign(inF0);
+    float3 r060 = sin(inF0);
     sincos(inF0, inF1, inF2);
-    sinh(inF0);
-    smoothstep(inF0, inF1, inF2);
-    sqrt(inF0);
-    step(inF0, inF1);
-    tan(inF0);
-    tanh(inF0);
+    float3 r061 = sinh(inF0);
+    float3 r062 = smoothstep(inF0, inF1, inF2);
+    float3 r063 = sqrt(inF0);
+    float3 r064 = step(inF0, inF1);
+    float3 r065 = tan(inF0);
+    float3 r066 = tanh(inF0);
     // TODO: sampler intrinsics, when we can declare the types.
-    trunc(inF0);
+    float3 r067 = trunc(inF0);
 
     // TODO: ... add when float1 prototypes are generated
     return float3(1,2,3);
@@ -253,77 +259,78 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, ui
 {
     uint4 out_u4;
 
-    all(inF0);
-    abs(inF0);
-    acos(inF0);
-    any(inF0);
-    asin(inF0);
-    asint(inF0);
-    asuint(inF0);
-    asfloat(inU0);
+    bool r000 = all(inF0);
+    float4 r001 = abs(inF0);
+    float4 r002 = acos(inF0);
+    bool r003 = any(inF0);
+    float4 r004 = asin(inF0);
+    int4 r005 = asint(inF0);
+    uint4 r006 = asuint(inF0);
+    float4 r007 = asfloat(inU0);
     // asdouble(inU0, inU1);  // TODO: enable when HLSL parser used for intrinsics
-    atan(inF0);
-    atan2(inF0, inF1);
-    ceil(inF0);
-    clamp(inF0, inF1, inF2);
+    float4 r009 = atan(inF0);
+    float4 r010 = atan2(inF0, inF1);
+    float4 r011 = ceil(inF0);
+    float4 r012 = clamp(inF0, inF1, inF2);
     clip(inF0);
-    cos(inF0);
-    cosh(inF0);
-    countbits(int4(7,3,5,2));
-    ddx(inF0);
-    ddx_coarse(inF0);
-    ddx_fine(inF0);
-    ddy(inF0);
-    ddy_coarse(inF0);
-    ddy_fine(inF0);
-    degrees(inF0);
-    distance(inF0, inF1);
-    dot(inF0, inF1);
-    dst(inF0, inF1);
+    float4 r013 = cos(inF0);
+    float4 r014 = cosh(inF0);
+    uint4 r015 = countbits(uint4(7,3,5,2));
+    float4 r016 = ddx(inF0);
+    float4 r017 = ddx_coarse(inF0);
+    float4 r018 = ddx_fine(inF0);
+    float4 r019 = ddy(inF0);
+    float4 r020 = ddy_coarse(inF0);
+    float4 r021 = ddy_fine(inF0);
+    float4 r022 = degrees(inF0);
+    float r023 = distance(inF0, inF1);
+    float r024 = dot(inF0, inF1);
+    float4 r025 = dst(inF0, inF1);
     // EvaluateAttributeAtCentroid(inF0);
     // EvaluateAttributeAtSample(inF0, 0);
     // TODO: EvaluateAttributeSnapped(inF0, int2(1,2));
-    exp(inF0);
-    exp2(inF0);
-    faceforward(inF0, inF1, inF2);
-    firstbithigh(7);
-    firstbitlow(7);
-    floor(inF0);
+    float4 r029 = exp(inF0);
+    float4 r030 = exp2(inF0);
+    float4 r031 = faceforward(inF0, inF1, inF2);
+    uint4 r032 = firstbithigh(uint4(7,8,9,10));
+    uint4 r033 = firstbitlow(uint4(7,8,9,10));
+    float4 r034 = floor(inF0);
     // TODO: fma(inD0, inD1, inD2);
-    fmod(inF0, inF1);
-    frac(inF0);
-    frexp(inF0, inF1);
-    fwidth(inF0);
-    isinf(inF0);
-    isnan(inF0);
-    ldexp(inF0, inF1);
-    length(inF0);
-    log(inF0);
-    log10(inF0);
-    log2(inF0);
-    max(inF0, inF1);
-    min(inF0, inF1);
-    normalize(inF0);
-    pow(inF0, inF1);
-    radians(inF0);
-    rcp(inF0);
-    reflect(inF0, inF1);
-    refract(inF0, inF1, 2.0);
-    reversebits(int4(1,2,3,4));
-    round(inF0);
-    rsqrt(inF0);
-    saturate(inF0);
-    sign(inF0);
-    sin(inF0);
+    float4 r036 = fmod(inF0, inF1);
+    float4 r037 = frac(inF0);
+    float4 r038 = frexp(inF0, inF1);
+    float4 r039 = fwidth(inF0);
+    bool4 r040 = isinf(inF0);
+    bool4 r041 = isnan(inF0);
+    float4 r042 = ldexp(inF0, inF1);
+    float4 r039a = lerp(inF0, inF1, inF2);
+    float r043 = length(inF0);
+    float4 r044 = log(inF0);
+    float4 r045 = log10(inF0);
+    float4 r046 = log2(inF0);
+    float4 r047 = max(inF0, inF1);
+    float4 r048 = min(inF0, inF1);
+    float4 r049 = normalize(inF0);
+    float4 r050 = pow(inF0, inF1);
+    float4 r051 = radians(inF0);
+    float4 r052 = rcp(inF0);
+    float4 r053 = reflect(inF0, inF1);
+    float4 r054 = refract(inF0, inF1, 2.0);
+    uint4 r055 = reversebits(uint4(1,2,3,4));
+    float4 r056 = round(inF0);
+    float4 r057 = rsqrt(inF0);
+    float4 r058 = saturate(inF0);
+    float4 r059 = sign(inF0);
+    float4 r060 = sin(inF0);
     sincos(inF0, inF1, inF2);
-    sinh(inF0);
-    smoothstep(inF0, inF1, inF2);
-    sqrt(inF0);
-    step(inF0, inF1);
-    tan(inF0);
-    tanh(inF0);
+    float4 r061 = sinh(inF0);
+    float4 r062 = smoothstep(inF0, inF1, inF2);
+    float4 r063 = sqrt(inF0);
+    float4 r064 = step(inF0, inF1);
+    float4 r065 = tan(inF0);
+    float4 r066 = tanh(inF0);
     // TODO: sampler intrinsics, when we can declare the types.
-    trunc(inF0);
+    float4 r067 = trunc(inF0);
 
     // TODO: ... add when float1 prototypes are generated
     return float4(1,2,3,4);
@@ -335,83 +342,82 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, ui
 //    asuint(inF0); \
 
 // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
-#define MATFNS() \
-    all(inF0); \
-    abs(inF0); \
-    acos(inF0); \
-    any(inF0); \
-    asin(inF0); \
-    atan(inF0); \
-    atan2(inF0, inF1); \
-    ceil(inF0); \
-    clip(inF0); \
-    clamp(inF0, inF1, inF2); \
-    cos(inF0); \
-    cosh(inF0); \
-    ddx(inF0); \
-    ddx_coarse(inF0); \
-    ddx_fine(inF0); \
-    ddy(inF0); \
-    ddy_coarse(inF0); \
-    ddy_fine(inF0); \
-    degrees(inF0); \
-    determinant(inF0); \
-    exp(inF0); \
-    exp2(inF0); \
-    firstbithigh(7); \
-    firstbitlow(7); \
-    floor(inF0); \
-    fmod(inF0, inF1); \
-    frac(inF0); \
-    frexp(inF0, inF1); \
-    fwidth(inF0); \
-    ldexp(inF0, inF1); \
-    log(inF0); \
-    log10(inF0); \
-    log2(inF0);      \
-    max(inF0, inF1); \
-    min(inF0, inF1); \
-    pow(inF0, inF1); \
-    radians(inF0); \
-    round(inF0); \
-    rsqrt(inF0); \
-    saturate(inF0); \
-    sign(inF0); \
-    sin(inF0); \
-    sincos(inF0, inF1, inF2); \
-    sinh(inF0); \
-    smoothstep(inF0, inF1, inF2); \
-    sqrt(inF0); \
-    step(inF0, inF1); \
-    tan(inF0); \
-    tanh(inF0); \
-    transpose(inF0); \
-    trunc(inF0);
+#define MATFNS(MT)                          \
+    bool r000 = all(inF0);                  \
+    MT r001 = abs(inF0);                    \
+    acos(inF0);                             \
+    bool r003 = any(inF0);                  \
+    MT r004 = asin(inF0);                   \
+    MT r005 = atan(inF0);                   \
+    MT r006 = atan2(inF0, inF1);            \
+    MT r007 = ceil(inF0);                   \
+    clip(inF0);                             \
+    MT r008 = clamp(inF0, inF1, inF2);      \
+    MT r009 = cos(inF0);                    \
+    MT r010 = cosh(inF0);                   \
+    MT r011 = ddx(inF0);                    \
+    MT r012 = ddx_coarse(inF0);             \
+    MT r013 = ddx_fine(inF0);               \
+    MT r014 = ddy(inF0);                    \
+    MT r015 = ddy_coarse(inF0);             \
+    MT r016 = ddy_fine(inF0);               \
+    MT r017 = degrees(inF0);                \
+    float r018 = determinant(inF0);         \
+    MT r019 = exp(inF0);                    \
+    MT R020 = exp2(inF0);                   \
+    MT r021 = floor(inF0);                  \
+    MT r022 = fmod(inF0, inF1);             \
+    MT r023 = frac(inF0);                   \
+    MT r024 = frexp(inF0, inF1);            \
+    MT r025 = fwidth(inF0);                 \
+    MT r026 = ldexp(inF0, inF1);            \
+    MT r026a = lerp(inF0, inF1, inF2);      \
+    MT r027 = log(inF0);                    \
+    MT r028 = log10(inF0);                  \
+    MT r029 = log2(inF0);                   \
+    MT r030 = max(inF0, inF1);              \
+    MT r031 = min(inF0, inF1);              \
+    MT r032 = pow(inF0, inF1);              \
+    MT r033 = radians(inF0);                \
+    MT r034 = round(inF0);                  \
+    MT r035 = rsqrt(inF0);                  \
+    MT r036 = saturate(inF0);               \
+    MT r037 = sign(inF0);                   \
+    MT r038 = sin(inF0);                    \
+    sincos(inF0, inF1, inF2);               \
+    MT r039 = sinh(inF0);                   \
+    MT r049 = smoothstep(inF0, inF1, inF2); \
+    MT r041 = sqrt(inF0);                   \
+    MT r042 = step(inF0, inF1);             \
+    MT r043 = tan(inF0);                    \
+    MT r044 = tanh(inF0);                   \
+    transpose(inF0);                        \
+    MT r046 = trunc(inF0);
 
 // TODO: turn on non-square matrix tests when protos are available.
 
-float2x2 PixelShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2)
+float2x2 PixelShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
-    MATFNS()
+    MATFNS(float2x2);
 
     // TODO: ... add when float1 prototypes are generated
     return float2x2(2,2,2,2);
 }
 
-float3x3 PixelShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2)
+float3x3 PixelShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
-    MATFNS()
+    MATFNS(float3x3);
 
     // TODO: ... add when float1 prototypes are generated
     return float3x3(3,3,3,3,3,3,3,3,3);
 }
 
-float4x4 PixelShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2)
+float4x4 PixelShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
-    MATFNS()
+    MATFNS(float4x4);
 
     // TODO: ... add when float1 prototypes are generated
     return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4);
@@ -429,23 +435,49 @@ float4x4 PixelShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2)
     MT r8 = mul(inFM0, inFM1);
 
 
-void TestGenMul(float inF0, float inF1,
+void TestGenMul2(float inF0, float inF1,
                 float2 inFV0, float2 inFV1,
                 float2x2 inFM0, float2x2 inFM1)
 {
     TESTGENMUL(float, float2, float2x2);
 }
 
-void TestGenMul(float inF0, float inF1,
+void TestGenMul3(float inF0, float inF1,
                 float3 inFV0, float3 inFV1,
                 float3x3 inFM0, float3x3 inFM1)
 {
     TESTGENMUL(float, float3, float3x3);
 }
 
-void TestGenMul(float inF0, float inF1,
+void TestGenMul4(float inF0, float inF1,
                 float4 inFV0, float4 inFV1,
                 float4x4 inFM0, float4x4 inFM1)
 {
     TESTGENMUL(float, float4, float4x4);
 }
+
+// Test some non-square mats
+void TestGenMulNxM(float inF0, float inF1,
+                   float2 inFV2, float3 inFV3,
+                   float2x3 inFM2x3, float3x2 inFM3x2,
+                   float3x3 inFM3x3, float3x4 inFM3x4,
+                   float2x4 inFM2x4)
+{
+    float  r00 = mul(inF0,  inF1);  // S=S*S
+    float2 r01 = mul(inFV2, inF0);  // V=V*S
+    float3 r02 = mul(inFV3, inF0);  // V=V*S
+    float2 r03 = mul(inF0,  inFV2); // V=S*V
+    float3 r04 = mul(inF0,  inFV3); // V=S*V
+    float  r05 = mul(inFV2, inFV2); // S=V*V
+    float  r06 = mul(inFV3, inFV3); // S=V*V
+    float3 r07 = mul(inFV2, inFM2x3); // V=V*M (return V dim is Mcols)
+    float2 r08 = mul(inFV3, inFM3x2); // V=V*M (return V dim is Mcols)
+    float2 r09 = mul(inFM2x3, inFV3); // V=M*V (return V dim is Mrows)
+    float3 r10 = mul(inFM3x2, inFV2); // V=M*V (return V dim is Mrows)
+    float2x3 r11 = mul(inFM2x3, inF0);
+    float3x2 r12 = mul(inFM3x2, inF0);
+    float2x2 r13 = mul(inFM2x3, inFM3x2);
+    float2x3 r14 = mul(inFM2x3, inFM3x3);
+    float2x4 r15 = mul(inFM2x3, inFM3x4);
+    float3x4 r16 = mul(inFM3x2, inFM2x4);
+}
index 1b2ecd9..c89d04b 100644 (file)
@@ -1,4 +1,4 @@
-float ComputeShaderFunction(float inF0, float inF1, float inF2, int inI0)
+float ComputeShaderFunctionS(float inF0, float inF1, float inF2, int inI0)
 {
     uint out_u1;
 
@@ -23,7 +23,7 @@ float ComputeShaderFunction(float inF0, float inF1, float inF2, int inI0)
     f16tof32(inF0);                           // expected error: only integer inputs
     firstbithigh(inF0);                       // expected error: only integer inputs
     firstbitlow(inF0);                        // expected error: only integer inputs
-    fma(inF0, inF1, inF2);                    // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     fwidth(inF0);                             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua, gs_ub);             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua, gs_ub, out_u1);     // expected error: only valid in pixel stage
@@ -53,7 +53,7 @@ float ComputeShaderFunction(float inF0, float inF1, float inF2, int inI0)
     return 0.0;
 }
 
-float1 ComputeShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
+float1 ComputeShaderFunction1(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
 {
     // TODO: ... add when float1 prototypes are generated
 
@@ -62,7 +62,7 @@ float1 ComputeShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
     return 0.0;
 }
 
-float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
+float2 ComputeShaderFunction2(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
 {
     uint2 out_u2;
 
@@ -84,7 +84,7 @@ float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
     f16tof32(inF0);               // expected error: only integer inputs
     firstbithigh(inF0);           // expected error: only integer inputs
     firstbitlow(inF0);            // expected error: only integer inputs
-    fma(inF0, inF1, inF2);        // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     fwidth(inF0);                 // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua2, gs_ub2);         // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage
@@ -109,7 +109,7 @@ float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
     return float2(1,2);
 }
 
-float3 ComputeShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
+float3 ComputeShaderFunction3(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
 {
     uint3 out_u3;
 
@@ -129,7 +129,7 @@ float3 ComputeShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
     f16tof32(inF0);                                             // expected error: only integer inputs
     firstbithigh(inF0);                                         // expected error: only integer inputs
     firstbitlow(inF0);                                          // expected error: only integer inputs
-    fma(inF0, inF1, inF2);                                      // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     fwidth(inF0);                                               // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua3, gs_ub3);                             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua3, gs_ub3, out_u3);                     // expected error: only valid in pixel stage
@@ -174,7 +174,7 @@ float4 ComputeShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
     f16tof32(inF0);                                             // expected error: only integer inputs
     firstbithigh(inF0);                                         // expected error: only integer inputs
     firstbitlow(inF0);                                          // expected error: only integer inputs
-    fma(inF0, inF1, inF2);                                      // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     fwidth(inF0);                                               // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua4, gs_ub4);                             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua4, gs_ub4, out_u4);                     // expected error: only valid in pixel stage
index ddbac06..8afaf87 100644 (file)
@@ -1,4 +1,4 @@
-float PixelShaderFunction(float inF0, float inF1, float inF2, int inI0)
+float PixelShaderFunctionS(float inF0, float inF1, float inF2, int inI0)
 {
     // AllMemoryBarrier();              // TODO: expected error: invalid in fragment stage
     // AllMemoryBarrierWithGroupSync(); // TODO: expected error: invalid in fragment stage
@@ -12,7 +12,7 @@ float PixelShaderFunction(float inF0, float inF1, float inF2, int inI0)
     f16tof32(inF0);                           // expected error: only integer inputs
     firstbithigh(inF0);                       // expected error: only integer inputs
     firstbitlow(inF0);                        // expected error: only integer inputs
-    fma(inF0, inF1, inF2);                    // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     // InterlockedAdd(inI0, inI0, 3);            // expected error: last parameter is out TODO: accepted even though marked as out in proto generator
     // InterlockedAnd(inI0, inI0, 3);            // expected error: last parameter is out TODO: accepted even though marked as out i    // InterlockedMax(inI0, inI0, 3);            // expected error: last parameter is out TODO: accepted even though marked as out in proto generator
     // InterlockedMin(inI0, inI0, 3);            // expected error: last parameter is out TODO: accepted even though marked as out in proto generator
@@ -32,7 +32,7 @@ float PixelShaderFunction(float inF0, float inF1, float inF2, int inI0)
     return 0.0;
 }
 
-float1 PixelShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
+float1 PixelShaderFunction1(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
 {
     // TODO: ... add when float1 prototypes are generated
 
@@ -41,7 +41,7 @@ float1 PixelShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
     return 0.0;
 }
 
-float2 PixelShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
+float2 PixelShaderFunction2(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
 {
     asdouble(inF0, inF1);         // expected error: only integer inputs
     CheckAccessFullyMapped(inF0); // expected error: only valid on scalars
@@ -52,14 +52,14 @@ float2 PixelShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
     f16tof32(inF0);               // expected error: only integer inputs
     firstbithigh(inF0);           // expected error: only integer inputs
     firstbitlow(inF0);            // expected error: only integer inputs
-    fma(inF0, inF1, inF2);        // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     reversebits(inF0);            // expected error: only integer inputs
     transpose(inF0);              // expected error: only valid on mats
 
     return float2(1,2);
 }
 
-float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
+float3 PixelShaderFunction3(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
 {
     CheckAccessFullyMapped(inF0);  // expected error: only valid on scalars
     countbits(inF0);            // expected error: only integer inputs
@@ -68,7 +68,7 @@ float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
     f16tof32(inF0);             // expected error: only integer inputs
     firstbithigh(inF0);         // expected error: only integer inputs
     firstbitlow(inF0);          // expected error: only integer inputs
-    fma(inF0, inF1, inF2);      // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     reversebits(inF0);          // expected error: only integer inputs
     transpose(inF0);            // expected error: only valid on mats
 
@@ -85,7 +85,7 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
     f16tof32(inF0);               // expected error: only integer inputs
     firstbithigh(inF0);           // expected error: only integer inputs
     firstbitlow(inF0);            // expected error: only integer inputs
-    fma(inF0, inF1, inF2);        // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     reversebits(inF0);            // expected error: only integer inputs
     transpose(inF0);              // expected error: only valid on mats
 
@@ -100,7 +100,6 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
     f16tof32(inF0);           \
     firstbithigh(inF0);       \
     firstbitlow(inF0);        \
-    fma(inF0, inF1, inF2);    \
     reversebits(inF0);        \
     length(inF0);             \
     noise(inF0);              \
@@ -112,7 +111,7 @@ float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
 
 // TODO: turn on non-square matrix tests when protos are available.
 
-float2x2 PixelShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2)
+float2x2 PixelShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS()
@@ -120,7 +119,7 @@ float2x2 PixelShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2)
     return float2x2(2,2,2,2);
 }
 
-float3x3 PixelShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2)
+float3x3 PixelShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS()
@@ -128,7 +127,7 @@ float3x3 PixelShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2)
     return float3x3(3,3,3,3,3,3,3,3,3);
 }
 
-float4x4 PixelShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2)
+float4x4 PixelShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS()
index e716c68..a5030cf 100644 (file)
@@ -11,7 +11,7 @@ uint4 gs_ua4;
 uint4 gs_ub4;
 uint4 gs_uc4;
 
-float VertexShaderFunction(float inF0, float inF1, float inF2, int inI0)
+float VertexShaderFunctionS(float inF0, float inF1, float inF2, int inI0)
 {
     uint out_u1;
 
@@ -39,7 +39,7 @@ float VertexShaderFunction(float inF0, float inF1, float inF2, int inI0)
     f16tof32(inF0);                           // expected error: only integer inputs
     firstbithigh(inF0);                       // expected error: only integer inputs
     firstbitlow(inF0);                        // expected error: only integer inputs
-    fma(inF0, inF1, inF2);                    // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     fwidth(inF0);                             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua, gs_ub);             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua, gs_ub, out_u1);     // expected error: only valid in pixel stage
@@ -71,7 +71,7 @@ float VertexShaderFunction(float inF0, float inF1, float inF2, int inI0)
     return 0.0;
 }
 
-float1 VertexShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
+float1 VertexShaderFunction1(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
 {
     // TODO: ... add when float1 prototypes are generated
 
@@ -80,7 +80,7 @@ float1 VertexShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0)
     return 0.0;
 }
 
-float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
+float2 VertexShaderFunction2(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
 {
     uint2 out_u2;
 
@@ -102,7 +102,7 @@ float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
     f16tof32(inF0);                                             // expected error: only integer inputs
     firstbithigh(inF0);                                         // expected error: only integer inputs
     firstbitlow(inF0);                                          // expected error: only integer inputs
-    fma(inF0, inF1, inF2);                                      // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     fwidth(inF0);                                               // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua2, gs_ub2);                             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua2, gs_ub2, out_u2);                     // expected error: only valid in pixel stage
@@ -127,7 +127,7 @@ float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0)
     return float2(1,2);
 }
 
-float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
+float3 VertexShaderFunction3(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
 {
     uint3 out_u3;
 
@@ -147,7 +147,7 @@ float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0)
     f16tof32(inF0);                                             // expected error: only integer inputs
     firstbithigh(inF0);                                         // expected error: only integer inputs
     firstbitlow(inF0);                                          // expected error: only integer inputs
-    fma(inF0, inF1, inF2);                                      // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     fwidth(inF0);                                               // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua3, gs_ub3);                             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua3, gs_ub3, out_u3);                     // expected error: only valid in pixel stage
@@ -192,7 +192,7 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
     f16tof32(inF0);                                             // expected error: only integer inputs
     firstbithigh(inF0);                                         // expected error: only integer inputs
     firstbitlow(inF0);                                          // expected error: only integer inputs
-    fma(inF0, inF1, inF2);                                      // expected error: only double inputs
+    // fma(inF0, inF1, inF2); // TODO: this might auto-promote: need to check against FXC
     fwidth(inF0);                                               // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua4, gs_ub4);                             // expected error: only valid in pixel stage
     InterlockedAdd(gs_ua4, gs_ub4, out_u4);                     // expected error: only valid in pixel stage
@@ -234,7 +234,6 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
     f16tof32(inF0);                          \
     firstbithigh(inF0);                      \
     firstbitlow(inF0);                       \
-    fma(inF0, inF1, inF2);                   \
     fwidth(inF0);                            \
     noise(inF0);                             \
     reversebits(inF0);                       \
@@ -248,7 +247,7 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0)
 
 // TODO: turn on non-square matrix tests when protos are available.
 
-float2x2 VertexShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2)
+float2x2 VertexShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS()
@@ -256,7 +255,7 @@ float2x2 VertexShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2)
     return float2x2(2,2,2,2);
 }
 
-float3x3 VertexShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2)
+float3x3 VertexShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS()
@@ -264,7 +263,7 @@ float3x3 VertexShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2)
     return float3x3(3,3,3,3,3,3,3,3,3);
 }
 
-float4x4 VertexShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2)
+float4x4 VertexShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS()
index c77404e..de9476c 100644 (file)
@@ -1,4 +1,4 @@
-float VertexShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1)
+float VertexShaderFunctionS(float inF0, float inF1, float inF2, uint inU0, uint inU1)
 {
     all(inF0);
     abs(inF0);
@@ -32,6 +32,7 @@ float VertexShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint i
     isinf(inF0);
     isnan(inF0);
     ldexp(inF0, inF1);
+    lerp(inF0, inF1, inF2);
     log(inF0);
     log10(inF0);
     log2(inF0);
@@ -59,13 +60,13 @@ float VertexShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint i
     return 0.0;
 }
 
-float1 VertexShaderFunction(float1 inF0, float1 inF1, float1 inF2)
+float1 VertexShaderFunction1(float1 inF0, float1 inF1, float1 inF2)
 {
     // TODO: ... add when float1 prototypes are generated
     return 0.0;
 }
 
-float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
+float2 VertexShaderFunction2(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1)
 {
     all(inF0);
     abs(inF0);
@@ -102,6 +103,7 @@ float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, u
     isinf(inF0);
     isnan(inF0);
     ldexp(inF0, inF1);
+    lerp(inF0, inF1, inF2);
     length(inF0);
     log(inF0);
     log10(inF0);
@@ -134,7 +136,7 @@ float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, u
     return float2(1,2);
 }
 
-float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
+float3 VertexShaderFunction3(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1)
 {
     all(inF0);
     abs(inF0);
@@ -172,6 +174,7 @@ float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, u
     isinf(inF0);
     isnan(inF0);
     ldexp(inF0, inF1);
+    lerp(inF0, inF1, inF2);
     length(inF0);
     log(inF0);
     log10(inF0);
@@ -204,7 +207,7 @@ float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, u
     return float3(1,2,3);
 }
 
-float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1)
+float4 VertexShaderFunction4(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1)
 {
     all(inF0);
     abs(inF0);
@@ -242,6 +245,7 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, u
     isinf(inF0);
     isnan(inF0);
     ldexp(inF0, inF1);
+    lerp(inF0, inF1, inF2);
     length(inF0);
     log(inF0);
     log10(inF0);
@@ -303,6 +307,7 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, u
     frac(inF0); \
     frexp(inF0, inF1); \
     ldexp(inF0, inF1); \
+    lerp(inF0, inF1, inF2); \
     log(inF0); \
     log10(inF0); \
     log2(inF0); \
@@ -327,7 +332,7 @@ float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, u
 
 // TODO: turn on non-square matrix tests when protos are available.
 
-float2x2 VertexShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2)
+float2x2 VertexShaderFunction2x2(float2x2 inF0, float2x2 inF1, float2x2 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS();
@@ -336,7 +341,7 @@ float2x2 VertexShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2)
     return float2x2(2,2,2,2);
 }
 
-float3x3 VertexShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2)
+float3x3 VertexShaderFunction3x3(float3x3 inF0, float3x3 inF1, float3x3 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS();
@@ -345,7 +350,7 @@ float3x3 VertexShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2)
     return float3x3(3,3,3,3,3,3,3,3,3);
 }
 
-float4x4 VertexShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2)
+float4x4 VertexShaderFunction4x4(float4x4 inF0, float4x4 inF1, float4x4 inF2)
 {
     // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without.
     MATFNS();
@@ -366,23 +371,49 @@ float4x4 VertexShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2)
     MT r8 = mul(inFM0, inFM1);
 
 
-void TestGenMul(float inF0, float inF1,
-                float2 inFV0, float2 inFV1,
-                float2x2 inFM0, float2x2 inFM1)
+void TestGenMul2(float inF0, float inF1,
+                 float2 inFV0, float2 inFV1,
+                 float2x2 inFM0, float2x2 inFM1)
 {
     TESTGENMUL(float, float2, float2x2);
 }
 
-void TestGenMul(float inF0, float inF1,
-                float3 inFV0, float3 inFV1,
-                float3x3 inFM0, float3x3 inFM1)
+void TestGenMul3(float inF0, float inF1,
+                 float3 inFV0, float3 inFV1,
+                 float3x3 inFM0, float3x3 inFM1)
 {
     TESTGENMUL(float, float3, float3x3);
 }
 
-void TestGenMul(float inF0, float inF1,
-                float4 inFV0, float4 inFV1,
-                float4x4 inFM0, float4x4 inFM1)
+void TestGenMul4(float inF0, float inF1,
+                 float4 inFV0, float4 inFV1,
+                 float4x4 inFM0, float4x4 inFM1)
 {
     TESTGENMUL(float, float4, float4x4);
 }
+
+// Test some non-square mats
+void TestGenMulNxM(float inF0, float inF1,
+                   float2 inFV2, float3 inFV3,
+                   float2x3 inFM2x3, float3x2 inFM3x2,
+                   float3x3 inFM3x3, float3x4 inFM3x4,
+                   float2x4 inFM2x4)
+{
+    float  r00 = mul(inF0,  inF1);  // S=S*S
+    float2 r01 = mul(inFV2, inF0);  // V=V*S
+    float3 r02 = mul(inFV3, inF0);  // V=V*S
+    float2 r03 = mul(inF0,  inFV2); // V=S*V
+    float3 r04 = mul(inF0,  inFV3); // V=S*V
+    float  r05 = mul(inFV2, inFV2); // S=V*V
+    float  r06 = mul(inFV3, inFV3); // S=V*V
+    float3 r07 = mul(inFV2, inFM2x3); // V=V*M (return V dim is Mcols)
+    float2 r08 = mul(inFV3, inFM3x2); // V=V*M (return V dim is Mcols)
+    float2 r09 = mul(inFM2x3, inFV3); // V=M*V (return V dim is Mrows)
+    float3 r10 = mul(inFM3x2, inFV2); // V=M*V (return V dim is Mrows)
+    float2x3 r11 = mul(inFM2x3, inF0);
+    float3x2 r12 = mul(inFM3x2, inF0);
+    float2x2 r13 = mul(inFM2x3, inFM3x2);
+    float2x3 r14 = mul(inFM2x3, inFM3x3);
+    float2x4 r15 = mul(inFM2x3, inFM3x4);
+    float3x4 r16 = mul(inFM3x2, inFM2x4);
+}
diff --git a/Test/hlsl.switch.frag b/Test/hlsl.switch.frag
new file mode 100644 (file)
index 0000000..88239c2
--- /dev/null
@@ -0,0 +1,55 @@
+float4 PixelShaderFunction(float4 input, int c, int d) : COLOR0
+{
+    switch(c)
+    {
+    }
+
+    switch(c)
+    {
+    default:
+    }
+
+    switch (c) {
+    case 1:
+        ++input;
+        break;
+    case 2:
+        --input;
+        break;
+    }
+
+    switch (c) {
+    case 1:
+        ++input;
+        break;
+    case 2:
+        switch (d) {
+        case 2:
+            input += 2.0;
+            break;
+        case 3:
+            input += 3.0;
+            break;
+        }
+        break;
+    default:
+        input += 4.0;
+    }
+
+    switch (c) {
+    case 1:
+    }
+
+    switch (c) {
+    case 1:
+    case 2:
+    case 3:
+        ++input;
+        break;
+    case 4:
+    case 5:
+        --input;
+    }
+
+    return input;
+}
diff --git a/Test/hlsl.templatetypes.frag b/Test/hlsl.templatetypes.frag
new file mode 100644 (file)
index 0000000..379120d
--- /dev/null
@@ -0,0 +1,47 @@
+
+float PixelShaderFunction()
+{
+    vector r00 = float4(1,2,3,4);  // vector means float4
+    float4 r01 = vector(2,3,4,5);  // vector means float4
+
+    vector<bool, 1>   r12 = bool1(false);
+    vector<int, 1>    r13 = int1(1);
+    vector<float, 1>  r14 = float1(1);
+    vector<double, 1> r15 = double1(1);
+    vector<uint, 1>   r16 = uint1(1);
+
+    vector<bool, 2>   r20 = bool2(false, true);
+    vector<int, 2>    r21 = int2(1,2);
+    vector<float, 2>  r22 = float2(1,2);
+    vector<double, 2> r23 = double2(1,2);
+    vector<uint, 2>   r24 = uint2(1,2);
+    
+    vector<bool, 3>   r30 = bool3(false, true, true);
+    vector<int, 3>    r31 = int3(1,2,3);
+    vector<float, 3>  r32 = float3(1,2,3);
+    vector<double, 3> r33 = double3(1,2,3);
+    vector<uint, 3>   r34 = uint3(1,2,3);
+
+    vector<bool, 4>   r40 = bool4(false, true, true, false);
+    vector<int, 4>    r41 = int4(1,2,3,4);
+    vector<float, 4>  r42 = float4(1,2,3,4);
+    vector<double, 4> r43 = double4(1,2,3,4);
+    vector<uint, 4>   r44 = uint4(1,2,3,4);
+
+    matrix   r50 = float4x4(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4
+    float4x4 r51 = matrix(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);   // matrix means float4x4
+
+    // matrix<bool, 2, 3>  r60 = bool2x3(false, true, false, true, false, true);   // TODO: 
+    matrix<float, 2, 3> r61 = float2x3(1,2,3,4,5,6);
+    matrix<float, 3, 2> r62 = float3x2(1,2,3,4,5,6);
+    // matrix<float, 4, 1> r63 = float4x1(1,2,3,4);  // TODO: 
+    // matrix<float, 1, 4> r64 = float1x4(1,2,3,4);  // TODO: 
+    matrix<float, 4, 2> r65 = float4x2(1,2,3,4,5,6,7,8);
+    matrix<float, 4, 3> r66 = float4x3(1,2,3,4,5,6,7,8,9,10,11,12);
+
+    // TODO: bool mats
+    // TODO: int mats
+    
+    return 0.0;
+}
+
diff --git a/Test/hlsl.templatetypes.negative.frag b/Test/hlsl.templatetypes.negative.frag
new file mode 100644 (file)
index 0000000..aa54f3c
--- /dev/null
@@ -0,0 +1,23 @@
+
+float PixelShaderFunction()
+{
+    // TODO: All of the below should fail, although presently the first failure
+    // aborts compilation and the rest are skipped.  Having a separate test for
+    // each would be cumbersome.
+
+    vector<void, 2>    r00;  // cannot declare vectors of voids
+    matrix<void, 2, 3> r01;  // cannot declare matrices of voids
+
+    vector<float, 2, 3> r02;  // too many parameters to vector
+    matrix<float, 2>    r03;  // not enough parameters to matrix
+
+    int three = 3;
+    vector<void, three> r04; // size must be a literal constant integer
+    matrix<void, three, three> r05; // size must be a literal constant integer
+
+    vector<vector<int, 3>, 3> r06;  // type must be a simple scalar
+    vector<float3, 3> r07;          // type must be a simple scalar
+
+    return 0.0;
+}
+
diff --git a/Test/hlsl.typedef.frag b/Test/hlsl.typedef.frag
new file mode 100644 (file)
index 0000000..b09785e
--- /dev/null
@@ -0,0 +1,11 @@
+typedef float4 myVec4;
+
+float4 ShaderFunction(float4 input, int ii) : COLOR0
+{
+    typedef int myInt;
+    myVec4 a1 = myVec4(1.0);
+    myInt i = 2;
+    typedef myInt myInt2;
+    myInt2 j = ii;
+    return input * a1 + myVec4(i + j);
+}
diff --git a/Test/maxClipDistances.vert b/Test/maxClipDistances.vert
new file mode 100644 (file)
index 0000000..62ddfeb
--- /dev/null
@@ -0,0 +1,7 @@
+#version 130
+
+out float gl_ClipDistance[8];  // OK, 8 is gl_MaxClipDistances
+
+void main()
+{
+}
index d54fb58..ae7ed45 100755 (executable)
@@ -6,27 +6,6 @@ EXE=../build/install/bin/glslangValidator
 HASERROR=0
 mkdir -p localResults
 
-#
-# configuration file tests
-#
-echo running configuration file test
-$EXE -c > $TARGETDIR/test.conf
-diff -b $BASEDIR/test.conf $TARGETDIR/test.conf || HASERROR=1
-$EXE -i -l $TARGETDIR/test.conf specExamples.vert > $TARGETDIR/specExamples.vert.out
-diff -b $BASEDIR/specExamples.vert.out $TARGETDIR || HASERROR=1
-$EXE -l 100Limits.vert 100.conf >  $TARGETDIR/100LimitsConf.vert.out
-diff -b $BASEDIR/100LimitsConf.vert.out $TARGETDIR/100LimitsConf.vert.out || HASERROR=1
-
-#
-# isolated compilation tests
-#
-while read t; do
-    echo Running $t...
-    b=`basename $t`
-    $EXE -i -l $t > $TARGETDIR/$b.out
-    diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1
-done < testlist
-
 if [ -a localtestlist ]
   then
     while read t; do
@@ -37,87 +16,21 @@ if [ -a localtestlist ]
     done < localtestlist
 fi
 
-#
-# SPIR-V code generation tests
-#
-while read t; do
-  case $t in
-    \#*)
-      # Skip comment lines in the test list file.
-      ;;
-    *)
-      echo Running SPIR-V $t...
-      b=`basename $t`
-      $EXE -H $t > $TARGETDIR/$b.out
-      diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1
-      ;;
-  esac
-done < test-spirv-list
 rm -f comp.spv frag.spv geom.spv tesc.spv tese.spv vert.spv
 
 #
-# HLSL -> SPIR-V code generation tests
-#
-while read t; do
-  case $t in
-    \#*)
-      # Skip comment lines in the test list file.
-      ;;
-    *)
-      echo Running HLSL-to-SPIR-V $t...
-      b=`basename $t`
-      $EXE -D -e PixelShaderFunction -H -i $t > $TARGETDIR/$b.out
-      diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1
-      ;;
-  esac
-done < test-hlsl-spirv-list
-rm -f comp.spv frag.spv geom.spv tesc.spv tese.spv vert.spv
-
-#
-# Preprocessor tests
-#
-while read t; do
-    echo Running Preprocessor $t...
-    b=`basename $t`
-    $EXE -E $t > $TARGETDIR/$b.out 2> $TARGETDIR/$b.err
-    diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1
-    diff -b $BASEDIR/$b.err $TARGETDIR/$b.err || HASERROR=1
-done < test-preprocessor-list
-
-#
-# grouped shaders for bulk (faster) tests
-#
-function runBulkTest {
-    echo Running $*...
-    $EXE -i -l -t $* > $TARGETDIR/$1.out
-    diff -b $BASEDIR/$1.out $TARGETDIR/$1.out || HASERROR=1
-}
-
-runBulkTest mains1.frag mains2.frag noMain1.geom noMain2.geom
-runBulkTest noMain.vert mains.frag
-runBulkTest link1.frag link2.frag link3.frag
-runBulkTest es-link1.frag es-link2.frag
-runBulkTest recurse1.vert recurse1.frag recurse2.frag
-runBulkTest 300link.frag
-runBulkTest 300link2.frag
-runBulkTest 300link3.frag
-runBulkTest empty.frag empty2.frag empty3.frag
-runBulkTest 150.tesc 150.tese 400.tesc 400.tese 410.tesc 420.tesc 420.tese
-runBulkTest max_vertices_0.geom
-
-#
 # reflection tests
 #
 echo Running reflection...
-$EXE -l -q reflection.vert > $TARGETDIR/reflection.vert.out
+$EXE -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
 diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1
 
 #
 # multi-threaded test
 #
 echo Comparing single thread to multithread for all tests in current directory...
-$EXE -i *.vert *.geom *.frag *.tes* *.comp > singleThread.out
-$EXE -i *.vert *.geom *.frag *.tes* *.comp -t > multiThread.out
+$EXE -i -C *.vert *.geom *.frag *.tes* *.comp > singleThread.out
+$EXE -i -C *.vert *.geom *.frag *.tes* *.comp -t > multiThread.out
 diff singleThread.out multiThread.out || HASERROR=1
 
 if [ $HASERROR -eq 0 ]
diff --git a/Test/spv.430.frag b/Test/spv.430.frag
new file mode 100644 (file)
index 0000000..e547f61
--- /dev/null
@@ -0,0 +1,10 @@
+#version 430 core\r
+\r
+out vec4 color;\r
+\r
+void main()\r
+{\r
+     color = vec4(1.0);\r
+     color *= gl_Layer;\r
+     color *= gl_ViewportIndex;\r
+}\r
diff --git a/Test/spv.450.tesc b/Test/spv.450.tesc
new file mode 100644 (file)
index 0000000..0f8ec5c
--- /dev/null
@@ -0,0 +1,20 @@
+#version 450 core\r
+\r
+layout(vertices = 4) out;\r
+\r
+patch out vec4 patchOut;\r
+\r
+struct S {\r
+    float sMem1;  // should not see a patch decoration\r
+    float sMem2;  // should not see a patch decoration\r
+};\r
+\r
+layout(location = 12) patch out TheBlock {\r
+    highp float bMem1;  // should not see a location decoration\r
+    highp float bMem2;\r
+    S s;                // should see a patch decoration\r
+} tcBlock[2];\r
+\r
+void main()\r
+{\r
+}\r
index dc1fe6e..8ab846e 100644 (file)
@@ -1,4 +1,4 @@
-#version 310 es\r
+#version 450\r
 \r
 \r
 \r
@@ -22,6 +22,7 @@ void main()
     func(counter);\r
     uint val = atomicCounter(countArr[2]);\r
     atomicCounterDecrement(counter);\r
+    atomicCounterIncrement(counter);\r
 }\r
 \r
 shared int atomi;\r
diff --git a/Test/spv.glFragColor.frag b/Test/spv.glFragColor.frag
new file mode 100644 (file)
index 0000000..12dbcb2
--- /dev/null
@@ -0,0 +1,6 @@
+#version 330\r
+\r
+void main()\r
+{\r
+    gl_FragColor = vec4(1.0);\r
+}\r
diff --git a/Test/spv.specConst.vert b/Test/spv.specConst.vert
new file mode 100644 (file)
index 0000000..3ea2498
--- /dev/null
@@ -0,0 +1,8 @@
+#version 450\r
+\r
+layout(constant_id = 11) const int a = 8;\r
+\r
+void main()\r
+{\r
+    gl_Position = vec4(1.0) / a;\r
+}\r
diff --git a/Test/test-hlsl-spirv-list b/Test/test-hlsl-spirv-list
deleted file mode 100644 (file)
index d98a3cb..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-# Test looping constructs.
-# No tests yet for making sure break and continue from a nested loop
-# goes to the innermost target.
-hlsl.frag
diff --git a/Test/test-preprocessor-list b/Test/test-preprocessor-list
deleted file mode 100644 (file)
index bd7e963..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-preprocessor.cpp_style_line_directive.vert
-preprocessor.cpp_style___FILE__.vert
-preprocessor.edge_cases.vert
-preprocessor.errors.vert
-preprocessor.extensions.vert
-preprocessor.function_macro.vert
-preprocessor.include.enabled.vert
-preprocessor.include.disabled.vert
-preprocessor.line.vert
-preprocessor.line.frag
-preprocessor.pragma.vert
-preprocessor.simple.vert
-preprocessor.success_if_parse_would_fail.vert
-preprocessor.defined.vert
-preprocessor.many.endif.vert
-preprocessor.eof_missing.vert
diff --git a/Test/test-spirv-list b/Test/test-spirv-list
deleted file mode 100644 (file)
index 03f4432..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-# Test looping constructs.
-# No tests yet for making sure break and continue from a nested loop
-# goes to the innermost target.
-spv.do-simple.vert
-spv.do-while-continue-break.vert
-spv.for-complex-condition.vert
-spv.for-continue-break.vert
-spv.for-simple.vert
-spv.for-notest.vert
-spv.for-nobody.vert
-spv.while-continue-break.vert
-spv.while-simple.vert
-# vulkan-specific tests
-spv.set.vert
-spv.double.comp
-spv.100ops.frag
-spv.130.frag
-spv.140.frag
-spv.150.geom
-spv.150.vert
-spv.300BuiltIns.vert
-spv.300layout.frag
-spv.300layout.vert
-spv.300layoutp.vert
-spv.310.comp
-spv.330.geom
-spv.400.frag
-spv.400.tesc
-spv.400.tese
-spv.420.geom
-spv.430.vert
-spv.accessChain.frag
-spv.aggOps.frag
-spv.always-discard.frag
-spv.always-discard2.frag
-spv.bitCast.frag
-spv.bool.vert
-spv.boolInBlock.frag
-spv.branch-return.vert
-spv.conditionalDiscard.frag
-spv.conversion.frag
-spv.dataOut.frag
-spv.dataOutIndirect.frag
-spv.dataOutIndirect.vert
-spv.deepRvalue.frag
-spv.depthOut.frag
-spv.discard-dce.frag
-spv.doWhileLoop.frag
-spv.earlyReturnDiscard.frag
-spv.flowControl.frag
-spv.forLoop.frag
-spv.forwardFun.frag
-spv.functionCall.frag
-spv.functionSemantics.frag
-spv.interpOps.frag
-spv.int64.frag
-spv.layoutNested.vert
-spv.length.frag
-spv.localAggregates.frag
-spv.loops.frag
-spv.loopsArtificial.frag
-spv.matFun.vert
-spv.matrix.frag
-spv.matrix2.frag
-spv.memoryQualifier.frag
-spv.merge-unreachable.frag
-spv.newTexture.frag
-spv.noDeadDecorations.vert
-spv.nonSquare.vert
-spv.Operations.frag
-spv.intOps.vert
-spv.precision.frag
-spv.prepost.frag
-spv.qualifiers.vert
-spv.shaderBallot.comp
-spv.shaderGroupVote.comp
-spv.shiftOps.frag
-spv.simpleFunctionCall.frag
-spv.simpleMat.vert
-spv.sparseTexture.frag
-spv.sparseTextureClamp.frag
-spv.structAssignment.frag
-spv.structDeref.frag
-spv.structure.frag
-spv.switch.frag
-spv.swizzle.frag
-spv.test.frag
-spv.test.vert
-spv.texture.frag
-spv.texture.vert
-spv.image.frag
-spv.types.frag
-spv.uint.frag
-spv.uniformArray.frag
-spv.variableArrayIndex.frag
-spv.varyingArray.frag
-spv.varyingArrayIndirect.frag
-spv.voidFunction.frag
-spv.whileLoop.frag
-spv.AofA.frag
-spv.queryL.frag
-spv.separate.frag
-spv.shortCircuit.frag
-spv.pushConstant.vert
-spv.subpass.frag
-spv.specConstant.vert
-spv.specConstant.comp
-spv.specConstantComposite.vert
-spv.specConstantOperations.vert
-spv.precise.tese
-spv.precise.tesc
-# GLSL-level semantics
-vulkan.frag
-vulkan.vert
-vulkan.comp
diff --git a/Test/testlist b/Test/testlist
deleted file mode 100644 (file)
index dd682b2..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-sample.frag
-sample.vert
-decls.frag
-specExamples.frag
-specExamples.vert
-versionsClean.frag
-versionsClean.vert
-versionsErrors.frag
-versionsErrors.vert
-100.frag
-120.vert
-120.frag
-130.vert
-130.frag
-140.vert
-140.frag
-150.vert
-150.geom
-150.frag
-precision.frag
-precision.vert
-nonSquare.vert
-matrixError.vert
-cppSimple.vert
-cppIndent.vert
-cppNest.vert
-cppComplexExpr.vert
-badChars.frag
-pointCoord.frag
-array.frag
-array100.frag
-comment.frag
-300.vert
-300.frag
-300BuiltIns.frag
-300layout.vert
-300layout.frag
-300operations.frag
-300block.frag
-310.comp
-310.vert
-310.geom
-310.frag
-310.tesc
-310.tese
-310implicitSizeArrayError.vert
-310AofA.vert
-330.frag
-330comp.frag
-constErrors.frag
-constFold.frag
-errors.frag
-forwardRef.frag
-uint.frag
-switch.frag
-tokenLength.vert
-100Limits.vert
-100scope.vert
-110scope.vert
-300scope.vert
-400.frag
-420.frag
-420.vert
-420.geom
-420_size_gl_in.geom
-430scope.vert
-lineContinuation100.vert
-lineContinuation.vert
-numeral.frag
-400.geom
-400.tesc
-400.tese
-410.tesc
-420.tesc
-420.tese
-410.geom
-430.vert
-430.comp
-430AofA.frag
-440.vert
-440.frag
-450.vert
-450.geom
-450.tesc
-450.tese
-450.frag
-450.comp
-dce.frag
-atomic_uint.frag
-aggOps.frag
-always-discard.frag
-always-discard2.frag
-conditionalDiscard.frag
-conversion.frag
-dataOut.frag
-dataOutIndirect.frag
-deepRvalue.frag
-depthOut.frag
-discard-dce.frag
-doWhileLoop.frag
-earlyReturnDiscard.frag
-flowControl.frag
-forLoop.frag
-functionCall.frag
-functionSemantics.frag
-length.frag
-localAggregates.frag
-loops.frag
-loopsArtificial.frag
-matrix.frag
-matrix2.frag
-newTexture.frag
-Operations.frag
-prepost.frag
-simpleFunctionCall.frag
-structAssignment.frag
-structDeref.frag
-structure.frag
-swizzle.frag
-syntaxError.frag
-test.frag
-texture.frag
-types.frag
-uniformArray.frag
-variableArrayIndex.frag
-varyingArray.frag
-varyingArrayIndirect.frag
-voidFunction.frag
-whileLoop.frag
-nonVulkan.frag
-negativeArraySize.comp
-spv.atomic.comp
-precise.tesc
-precise_struct_block.vert
index e37c77c..cdf8200 100644 (file)
@@ -1553,6 +1553,13 @@ public:
         if (structure) {
             s.append("{");
             for (size_t i = 0; i < structure->size(); ++i) {
+                if (s.size() > 3 * GlslangMaxTypeLength) {
+                    // If we are getting too long, cut it short,
+                    // just need to draw the line somewhere, as there is no limit to
+                    // how large a struct/block type can get.
+                    s.append("...");
+                    break;
+                }
                 if (! (*structure)[i].type->hiddenMember()) {
                     s.append((*structure)[i].type->getCompleteString());
                     s.append(" ");
index 1dee257..d9982a3 100644 (file)
@@ -523,6 +523,8 @@ enum TOperator {
     EOpF32tof16,                         // HLSL conversion: half of a PackHalf2x16
     EOpF16tof32,                         // HLSL conversion: half of an UnpackHalf2x16
     EOpLit,                              // HLSL lighting coefficient vector
+    EOpTextureBias,                      // HLSL texture bias: will be lowered to EOpTexture
+    EOpAsDouble,                         // slightly different from EOpUint64BitsToDouble
 };
 
 class TIntermTraverser;
@@ -577,7 +579,10 @@ public:
     virtual const glslang::TIntermSymbol*        getAsSymbolNode()    const { return 0; }
     virtual const glslang::TIntermBranch*        getAsBranchNode()    const { return 0; }
     virtual ~TIntermNode() { }
+
 protected:
+    TIntermNode(const TIntermNode&);
+    TIntermNode& operator=(const TIntermNode&);
     glslang::TSourceLoc loc;
 };
 
@@ -619,6 +624,7 @@ public:
     TString getCompleteString() const { return type.getCompleteString(); }
 
 protected:
+    TIntermTyped& operator=(const TIntermTyped&);
     TType type;
 };
 
@@ -700,6 +706,7 @@ public:
     const TConstUnionArray& getConstArray() const { return constArray; }
     void setConstSubtree(TIntermTyped* subtree) { constSubtree = subtree; }
     TIntermTyped* getConstSubtree() const { return constSubtree; }
+
 protected:
     int id;                      // the unique id of the symbol this node represents
     TString name;                // the name of the symbol this node represents
@@ -719,7 +726,10 @@ public:
     void setLiteral() { literal = true; }
     void setExpression() { literal = false; }
     bool isLiteral() const { return literal; }
+
 protected:
+    TIntermConstantUnion& operator=(const TIntermConstantUnion&);
+
     const TConstUnionArray constArray;
     bool literal;  // true if node represents a literal in the source code
 };
index 03033bc..4adfd47 100644 (file)
@@ -399,6 +399,27 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
         break;
     }
 
+    case EOpAny:
+    {
+        bool result = false;
+        for (int i = 0; i < objectSize; i++) {
+            if (unionArray[i].getBConst())
+                result = true;
+        }
+        newConstArray[0].setBConst(result);
+        break;
+    }
+    case EOpAll:
+    {
+        bool result = true;
+        for (int i = 0; i < objectSize; i++) {
+            if (! unionArray[i].getBConst())
+                result = false;
+        }
+        newConstArray[0].setBConst(result);
+        break;
+    }
+
     // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out
 
     case EOpPackSnorm2x16:
@@ -412,11 +433,8 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
     case EOpDeterminant:
     case EOpMatrixInverse:
     case EOpTranspose:
-
-    case EOpAny:
-    case EOpAll:
         return 0;
-    
+
     default:
         assert(componentWise);
         break;
index e8327c4..871e788 100644 (file)
@@ -948,9 +948,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         (profile != EEsProfile && version >= 420)) {
         commonBuiltins.append(
             "highp uint packSnorm2x16(vec2);"
-            "highp vec2 unpackSnorm2x16(highp uint);"
+            "      vec2 unpackSnorm2x16(highp uint);"
             "highp uint packHalf2x16(mediump vec2);"
-            "mediump vec2 unpackHalf2x16(highp uint);"
+            "      vec2 unpackHalf2x16(highp uint);"
             "\n");
     }
 
@@ -958,9 +958,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         (profile != EEsProfile && version >= 400)) {
         commonBuiltins.append(
             "highp   uint packSnorm4x8  (mediump vec4);"
-            "mediump vec4 unpackSnorm4x8(highp   uint);"
+            "        vec4 unpackSnorm4x8(highp   uint);"
             "highp   uint packUnorm4x8  (mediump vec4);"
-            "mediump vec4 unpackUnorm4x8(highp   uint);"
+            "        vec4 unpackUnorm4x8(highp   uint);"
             "\n");
     }
 
@@ -1259,7 +1259,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
     }
 
     if (spvVersion.vulkan == 0) {
-        // gl_spirv TODO
         //
         // Atomic counter functions.
         //
@@ -1298,15 +1297,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "uvec3 bitfieldInsert(uvec3 base, uvec3, int, int);"
             "uvec4 bitfieldInsert(uvec4 base, uvec4, int, int);"
 
-            "lowp   int findLSB(  int);"
-            "lowp ivec2 findLSB(ivec2);"
-            "lowp ivec3 findLSB(ivec3);"
-            "lowp ivec4 findLSB(ivec4);"
+            "  int findLSB(  int);"
+            "ivec2 findLSB(ivec2);"
+            "ivec3 findLSB(ivec3);"
+            "ivec4 findLSB(ivec4);"
 
-            "lowp   int findLSB( uint);"
-            "lowp ivec2 findLSB(uvec2);"
-            "lowp ivec3 findLSB(uvec3);"
-            "lowp ivec4 findLSB(uvec4);"
+            "  int findLSB( uint);"
+            "ivec2 findLSB(uvec2);"
+            "ivec3 findLSB(uvec3);"
+            "ivec4 findLSB(uvec4);"
 
             "\n");
     }
@@ -1398,25 +1397,25 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "highp uvec3 bitfieldReverse(highp uvec3);"
             "highp uvec4 bitfieldReverse(highp uvec4);"
 
-            "lowp   int bitCount(  int);"
-            "lowp ivec2 bitCount(ivec2);"
-            "lowp ivec3 bitCount(ivec3);"
-            "lowp ivec4 bitCount(ivec4);"
-
-            "lowp   int bitCount( uint);"
-            "lowp ivec2 bitCount(uvec2);"
-            "lowp ivec3 bitCount(uvec3);"
-            "lowp ivec4 bitCount(uvec4);"
-
-            "lowp   int findMSB(highp   int);"
-            "lowp ivec2 findMSB(highp ivec2);"
-            "lowp ivec3 findMSB(highp ivec3);"
-            "lowp ivec4 findMSB(highp ivec4);"
-
-            "lowp   int findMSB(highp  uint);"
-            "lowp ivec2 findMSB(highp uvec2);"
-            "lowp ivec3 findMSB(highp uvec3);"
-            "lowp ivec4 findMSB(highp uvec4);"
+            "  int bitCount(  int);"
+            "ivec2 bitCount(ivec2);"
+            "ivec3 bitCount(ivec3);"
+            "ivec4 bitCount(ivec4);"
+
+            "  int bitCount( uint);"
+            "ivec2 bitCount(uvec2);"
+            "ivec3 bitCount(uvec3);"
+            "ivec4 bitCount(uvec4);"
+
+            "  int findMSB(highp   int);"
+            "ivec2 findMSB(highp ivec2);"
+            "ivec3 findMSB(highp ivec3);"
+            "ivec4 findMSB(highp ivec4);"
+
+            "  int findMSB(highp  uint);"
+            "ivec2 findMSB(highp uvec2);"
+            "ivec3 findMSB(highp uvec3);"
+            "ivec4 findMSB(highp uvec4);"
             
             "\n");
     }
@@ -1986,17 +1985,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                 "\n");
         }
         if (version >= 130 && spvVersion.vulkan == 0)
-            // gl_spirv TODO
             stageBuiltins[EShLangVertex].append(
                 "int gl_VertexID;"            // needs qualifier fixed later
                 );
         if (version >= 140 && spvVersion.vulkan == 0)
-            // gl_spirv TODO
             stageBuiltins[EShLangVertex].append(
                 "int gl_InstanceID;"          // needs qualifier fixed later
                 );
         if (spvVersion.vulkan >= 100 && version >= 140)
-            // gl_spirv TODO
             stageBuiltins[EShLangVertex].append(
                 "in int gl_VertexIndex;"
                 "in int gl_InstanceIndex;"
@@ -2017,13 +2013,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
                 );
         } else {
             if (spvVersion.vulkan == 0)
-                // gl_spirv TODO
                 stageBuiltins[EShLangVertex].append(
                     "in highp int gl_VertexID;"      // needs qualifier fixed later
                     "in highp int gl_InstanceID;"    // needs qualifier fixed later
                     );
             if (spvVersion.vulkan >= 100)
-                // gl_spirv TODO
                 stageBuiltins[EShLangVertex].append(
                     "in highp int gl_VertexIndex;"
                     "in highp int gl_InstanceIndex;"
@@ -3634,13 +3628,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
         }
 
         if (spvVersion.vulkan == 0) {
-            // gl_spirv TODO
             SpecialQualifier("gl_VertexID",   EvqVertexId,   EbvVertexId,   symbolTable);
             SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable);
         }
 
-        BuiltInVariable("gl_VertexIndex",   EbvVertexIndex,   symbolTable);
-        BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
+        if (spvVersion.vulkan >= 100) {
+            BuiltInVariable("gl_VertexIndex",   EbvVertexIndex,   symbolTable);
+            BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
+        }
 
         // Fall through
 
index 8d7ecde..bd4b3c9 100644 (file)
@@ -377,6 +377,9 @@ void C_DECL TParseContext::error(const TSourceLoc& loc, const char* szReason, co
     va_start(args, szExtraInfoFormat);
     outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
     va_end(args);
+
+    if ((messages & EShMsgCascadingErrors) == 0)
+        currentScanner->setEndOfInput();
 }
 
 void C_DECL TParseContext::warn(const TSourceLoc& loc, const char* szReason, const char* szToken,
@@ -397,6 +400,9 @@ void C_DECL TParseContext::ppError(const TSourceLoc& loc, const char* szReason,
     va_start(args, szExtraInfoFormat);
     outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
     va_end(args);
+
+    if ((messages & EShMsgCascadingErrors) == 0)
+        currentScanner->setEndOfInput();
 }
 
 void C_DECL TParseContext::ppWarn(const TSourceLoc& loc, const char* szReason, const char* szToken,
@@ -1199,6 +1205,28 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
     return result;
 }
 
+TIntermNode* TParseContext::handleReturnValue(const TSourceLoc& loc, TIntermTyped* value)
+{
+    functionReturnsValue = true;
+    if (currentFunctionType->getBasicType() == EbtVoid) {
+        error(loc, "void function cannot return a value", "return", "");
+        return intermediate.addBranch(EOpReturn, loc);
+    } else if (*currentFunctionType != value->getType()) {
+        TIntermTyped* converted = intermediate.addConversion(EOpReturn, *currentFunctionType, value);
+        if (converted) {
+            if (*currentFunctionType != converted->getType())
+                error(loc, "cannot convert return value to function return type", "return", "");
+            if (version < 420)
+                warn(loc, "type conversion on return values was not explicitly allowed until version 420", "return", "");
+            return intermediate.addBranch(EOpReturn, converted, loc);
+        } else {
+            error(loc, "type does not match, or is not convertible to, the function's return type", "return", "");
+            return intermediate.addBranch(EOpReturn, value, loc);
+        }
+    } else
+        return intermediate.addBranch(EOpReturn, value, loc);
+}
+
 // See if the operation is being done in an illegal location.
 void TParseContext::checkLocation(const TSourceLoc& loc, TOperator op)
 {
@@ -1908,7 +1936,13 @@ void TParseContext::variableCheck(TIntermTyped*& nodePtr)
         return;
 
     if (symbol->getType().getBasicType() == EbtVoid) {
-        error(symbol->getLoc(), "undeclared identifier", symbol->getName().c_str(), "");
+        const char *extraInfoFormat = "";
+        if (spvVersion.vulkan != 0 && symbol->getName() == "gl_VertexID") {
+          extraInfoFormat = "(Did you mean gl_VertexIndex?)";
+        } else if (spvVersion.vulkan != 0 && symbol->getName() == "gl_InstanceID") {
+          extraInfoFormat = "(Did you mean gl_InstanceIndex?)";
+        }
+        error(symbol->getLoc(), "undeclared identifier", symbol->getName().c_str(), extraInfoFormat);
 
         // Add to symbol table to prevent future error messages on the same name
         if (symbol->getName().size() > 0) {
@@ -3824,7 +3858,7 @@ void TParseContext::arrayLimitCheck(const TSourceLoc& loc, const TString& identi
         limitCheck(loc, size, "gl_MaxCullDistances", "gl_CullDistance array size");
 }
 
-// See if the provided value is less than the symbol indicated by limit,
+// See if the provided value is less than or equal to the symbol indicated by limit,
 // which should be a constant in the symbol table.
 void TParseContext::limitCheck(const TSourceLoc& loc, int value, const char* limit, const char* feature)
 {
@@ -3832,8 +3866,8 @@ void TParseContext::limitCheck(const TSourceLoc& loc, int value, const char* lim
     assert(symbol->getAsVariable());
     const TConstUnionArray& constArray = symbol->getAsVariable()->getConstArray();
     assert(! constArray.empty());
-    if (value >= constArray[0].getIConst())
-        error(loc, "must be less than", feature, "%s (%d)", limit, constArray[0].getIConst());
+    if (value > constArray[0].getIConst())
+        error(loc, "must be less than or equal to", feature, "%s (%d)", limit, constArray[0].getIConst());
 }
 
 //
@@ -4081,7 +4115,10 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
     std::transform(id.begin(), id.end(), id.begin(), ::tolower);
     
     if (id == "offset") {
-        const char* feature = "uniform offset";
+        // "offset" can be for either
+        //  - uniform offsets
+        //  - atomic_uint offsets
+        const char* feature = "offset";
         requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
         const char* exts[2] = { E_GL_ARB_enhanced_layouts, E_GL_ARB_shader_atomic_counters };
         profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, 2, exts, feature);
@@ -4112,6 +4149,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
             error(loc, "set is too large", id.c_str(), "");
         else
             publicType.qualifier.layoutSet = value;
+        if (value != 0)
+            requireVulkan(loc, "descriptor set");
         return;
     } else if (id == "binding") {
         profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, "binding");
index 67815bb..2f5e095 100644 (file)
@@ -197,6 +197,7 @@ public:
     TFunction* handleFunctionDeclarator(const TSourceLoc&, TFunction& function, bool prototype);
     TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&);
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
+    TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*);
     void checkLocation(const TSourceLoc&, TOperator);
     TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*);
     void addInputArgumentConversions(const TFunction&, TIntermNode*&) const;
index 1cc437c..4282cd5 100644 (file)
@@ -40,7 +40,7 @@
 
 namespace glslang {
 
-// Use a global end-of-input character, so no tranlation is needed across
+// Use a global end-of-input character, so no translation is needed across
 // layers of encapsulation.  Characters are all 8 bit, and positive, so there is
 // no aliasing of character 255 onto -1, for example.
 const int EndOfInput = -1;
@@ -82,7 +82,8 @@ public:
     int get()
     {
         int ret = peek();
-        if (ret == EndOfInput)  return ret;
+        if (ret == EndOfInput)
+            return ret;
         ++loc[currentSource].column;
         ++logicalSourceLoc.column;
         if (ret == '\n') {
@@ -123,7 +124,8 @@ public:
     void unget()
     {
         // Do not roll back once we've reached the end of the file.
-        if (endOfFileReached) return;
+        if (endOfFileReached)
+            return;
 
         if (currentChar > 0) {
             --currentChar;
@@ -173,7 +175,7 @@ public:
         loc[getLastValidSourceIndex()].name = filename;
     }
 
-    void setFile(const char* filename, size_t i)
+    void setFile(const char* filename, int i)
     {
         if (i == getLastValidSourceIndex()) {
             logicalSourceLoc.name = filename;
@@ -196,6 +198,12 @@ public:
         loc[getLastValidSourceIndex()].column = col;
     }
 
+    void setEndOfInput()
+    {
+        endOfFileReached = true;
+        currentSource = numSources;
+    }
+
     const TSourceLoc& getSourceLoc() const
     {
         if (singleLogical) {
@@ -255,7 +263,7 @@ protected:
     bool singleLogical; // treats the strings as a single logical string.
                         // locations will be reported from the first string.
 
-    // set to true once peak() returns EndOfFile, so that we won't roll back
+    // Set to true once peek() returns EndOfFile, so that we won't roll back
     // once we've reached EndOfFile.
     bool endOfFileReached;
 };
index 9766fa3..dccc1f0 100644 (file)
@@ -81,42 +81,70 @@ TBuiltInParseables* CreateBuiltInParseables(TInfoSink& infoSink, EShSource sourc
 
 // Local mapping functions for making arrays of symbol tables....
 
+const int VersionCount = 15;  // index range in MapVersionToIndex
+
 int MapVersionToIndex(int version)
 {
-        switch (version) {
-        case 100: return  0;
-        case 110: return  1;
-        case 120: return  2;
-        case 130: return  3;
-        case 140: return  4;
-        case 150: return  5;
-        case 300: return  6;
-        case 330: return  7;
-        case 400: return  8;
-        case 410: return  9;
-        case 420: return 10;
-        case 430: return 11;
-        case 440: return 12;
-        case 310: return 13;
-        case 450: return 14;
-        default:       // |
-            return  0; // |
-        }              // |
-}                      // V
-const int VersionCount = 15;  // number of case statements above
+    int index = 0;
+
+    switch (version) {
+    case 100: index =  0; break;
+    case 110: index =  1; break;
+    case 120: index =  2; break;
+    case 130: index =  3; break;
+    case 140: index =  4; break;
+    case 150: index =  5; break;
+    case 300: index =  6; break;
+    case 330: index =  7; break;
+    case 400: index =  8; break;
+    case 410: index =  9; break;
+    case 420: index = 10; break;
+    case 430: index = 11; break;
+    case 440: index = 12; break;
+    case 310: index = 13; break;
+    case 450: index = 14; break;
+    default:              break;
+    }
+
+    assert(index < VersionCount);
+
+    return index;
+}
+
+const int SpvVersionCount = 3;  // index range in MapSpvVersionToIndex
+
+int MapSpvVersionToIndex(const SpvVersion& spvVersion)
+{
+    int index = 0;
+
+    if (spvVersion.openGl > 0)
+        index = 1;
+    else if (spvVersion.vulkan > 0)
+        index = 2;
+
+    assert(index < SpvVersionCount);
+
+    return index;
+}
+
+const int ProfileCount = 4;   // index range in MapProfileToIndex
 
 int MapProfileToIndex(EProfile profile)
 {
+    int index = 0;
+
     switch (profile) {
-    case ENoProfile:             return 0;
-    case ECoreProfile:           return 1;
-    case ECompatibilityProfile:  return 2;
-    case EEsProfile:             return 3;
-    default:                         // |
-        return 0;                    // |
-    }                                // |
-}                                    // V
-const int ProfileCount                = 4;   // number of case statements above
+    case ENoProfile:            index = 0; break;
+    case ECoreProfile:          index = 1; break;
+    case ECompatibilityProfile: index = 2; break;
+    case EEsProfile:            index = 3; break;
+    default:                               break;
+    }
+
+    assert(index < ProfileCount);
+
+    return index;
+}
 
 // only one of these needed for non-ES; ES needs 2 for different precision defaults of built-ins
 enum EPrecisionClass {
@@ -133,8 +161,8 @@ enum EPrecisionClass {
 // Each has a different set of built-ins, and we want to preserve that from
 // compile to compile.
 //
-TSymbolTable* CommonSymbolTable[VersionCount][ProfileCount][EPcCount] = {};
-TSymbolTable* SharedSymbolTables[VersionCount][ProfileCount][EShLangCount] = {};
+TSymbolTable* CommonSymbolTable[VersionCount][SpvVersionCount][ProfileCount][EPcCount] = {};
+TSymbolTable* SharedSymbolTables[VersionCount][SpvVersionCount][ProfileCount][EShLangCount] = {};
 
 TPoolAllocator* PerProcessGPA = 0;
 
@@ -275,8 +303,9 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp
 
     // See if it's already been done for this version/profile combination
     int versionIndex = MapVersionToIndex(version);
+    int spvVersionIndex = MapSpvVersionToIndex(spvVersion);
     int profileIndex = MapProfileToIndex(profile);
-    if (CommonSymbolTable[versionIndex][profileIndex][EPcGeneral]) {
+    if (CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][EPcGeneral]) {
         glslang::ReleaseGlobalLock();
 
         return;
@@ -304,17 +333,18 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp
     // Copy the local symbol tables from the new pool to the global tables using the process-global pool
     for (int precClass = 0; precClass < EPcCount; ++precClass) {
         if (! commonTable[precClass]->isEmpty()) {
-            CommonSymbolTable[versionIndex][profileIndex][precClass] = new TSymbolTable;
-            CommonSymbolTable[versionIndex][profileIndex][precClass]->copyTable(*commonTable[precClass]);
-            CommonSymbolTable[versionIndex][profileIndex][precClass]->readOnly();
+            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][precClass] = new TSymbolTable;
+            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][precClass]->copyTable(*commonTable[precClass]);
+            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][precClass]->readOnly();
         }
     }
     for (int stage = 0; stage < EShLangCount; ++stage) {
         if (! stageTables[stage]->isEmpty()) {
-            SharedSymbolTables[versionIndex][profileIndex][stage] = new TSymbolTable;
-            SharedSymbolTables[versionIndex][profileIndex][stage]->adoptLevels(*CommonSymbolTable[versionIndex][profileIndex][CommonIndex(profile, (EShLanguage)stage)]);
-            SharedSymbolTables[versionIndex][profileIndex][stage]->copyTable(*stageTables[stage]);
-            SharedSymbolTables[versionIndex][profileIndex][stage]->readOnly();
+            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][stage] = new TSymbolTable;
+            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][stage]->adoptLevels(*CommonSymbolTable
+                              [versionIndex][spvVersionIndex][profileIndex][CommonIndex(profile, (EShLanguage)stage)]);
+            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][stage]->copyTable(*stageTables[stage]);
+            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][stage]->readOnly();
         }    
     }
 
@@ -338,8 +368,8 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
     bool correct = true;
 
     if (source == EShSourceHlsl) {
-        version = 450;         // TODO: GLSL parser is still used for builtins.
-        profile = ENoProfile;
+        version = 450;          // TODO: GLSL parser is still used for builtins.
+        profile = ECoreProfile; // allow doubles in prototype parsing
         return correct;
     }
 
@@ -438,7 +468,11 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
                 infoSink.info.message(EPrefixError, "#version: ES shaders for Vulkan SPIR-V require version 310 or higher");
                 version = 310;
             }
-            // gl_spirv TODO: test versions
+            if (spvVersion.openGl >= 100) {
+                correct = false;
+                infoSink.info.message(EPrefixError, "#version: ES shaders for OpenGL SPIR-V are not supported");
+                version = 310;
+            }
             break;
         case ECompatibilityProfile:
             infoSink.info.message(EPrefixError, "#version: compilation for SPIR-V does not support the compatibility profile");
@@ -449,7 +483,11 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
                 infoSink.info.message(EPrefixError, "#version: Desktop shaders for Vulkan SPIR-V require version 140 or higher");
                 version = 140;
             }
-            // gl_spirv TODO: test versions
+            if (spvVersion.openGl >= 100 && version < 330) {
+                correct = false;
+                infoSink.info.message(EPrefixError, "#version: Desktop shaders for OpenGL SPIR-V require version 330 or higher");
+                version = 330;
+            }
             break;
         }
     }
@@ -593,6 +631,10 @@ bool ProcessDeferred(
     if (messages & EShMsgSpvRules)
         spvVersion.spv = 0x00010000;    // TODO: eventually have this come from the outside
     EShSource source = (messages & EShMsgReadHlsl) ? EShSourceHlsl : EShSourceGlsl;
+    if (messages & EShMsgVulkanRules)
+        spvVersion.vulkan = 100;     // TODO: eventually have this come from the outside
+    else if (spvVersion.spv != 0)
+        spvVersion.openGl = 100;     // TODO: eventually have this come from the outside
     bool goodVersion = DeduceVersionProfile(compiler->infoSink, compiler->getLanguage(), versionNotFirst, defaultVersion, source, version, profile, spvVersion);
     bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
     bool warnVersionNotFirst = false;
@@ -603,10 +645,6 @@ bool ProcessDeferred(
             versionWillBeError = true;
     }
 
-    if (messages & EShMsgVulkanRules)
-        spvVersion.vulkan = 100;     // TODO: eventually have this come from the outside
-    else if (spvVersion.spv != 0)
-        spvVersion.openGl = 100;
     intermediate.setSource(source);
     intermediate.setVersion(version);
     intermediate.setProfile(profile);
@@ -616,6 +654,7 @@ bool ProcessDeferred(
     SetupBuiltinSymbolTable(version, profile, spvVersion, source);
     
     TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)]
+                                                  [MapSpvVersionToIndex(spvVersion)]
                                                   [MapProfileToIndex(profile)]
                                                   [compiler->getLanguage()];
     
@@ -744,6 +783,8 @@ public:
     void setLineNum(int newLineNum) { lastLine = newLineNum; }
 
 private:
+    SourceLineSynchronizer& operator=(const SourceLineSynchronizer&);
+
     // A function for getting the index of the last valid source string we've
     // read tokens from.
     const std::function<int()> getLastSourceIndex;
@@ -768,8 +809,8 @@ struct DoPreprocessing {
     explicit DoPreprocessing(std::string* string): outputString(string) {}
     bool operator()(TParseContextBase& parseContext, TPpContext& ppContext,
                     TInputScanner& input, bool versionWillBeError,
-                    TSymbolTable& , TIntermediate& ,
-                    EShOptimizationLevel , EShMessages )
+                    TSymbolTable&, TIntermediate&,
+                    EShOptimizationLevel, EShMessages)
     {
         // This is a list of tokens that do not require a space before or after.
         static const std::string unNeededSpaceTokens = ";()[]";
@@ -1049,19 +1090,23 @@ void ShDestruct(ShHandle handle)
 int __fastcall ShFinalize()
 {
     for (int version = 0; version < VersionCount; ++version) {
-        for (int p = 0; p < ProfileCount; ++p) {
-            for (int lang = 0; lang < EShLangCount; ++lang) {
-                delete SharedSymbolTables[version][p][lang];
-                SharedSymbolTables[version][p][lang] = 0;
+        for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
+            for (int p = 0; p < ProfileCount; ++p) {
+                for (int lang = 0; lang < EShLangCount; ++lang) {
+                    delete SharedSymbolTables[version][spvVersion][p][lang];
+                    SharedSymbolTables[version][spvVersion][p][lang] = 0;
+                }
             }
         }
     }
 
     for (int version = 0; version < VersionCount; ++version) {
-        for (int p = 0; p < ProfileCount; ++p) {
-            for (int pc = 0; pc < EPcCount; ++pc) {
-                delete CommonSymbolTable[version][p][pc];
-                CommonSymbolTable[version][p][pc] = 0;
+        for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
+            for (int p = 0; p < ProfileCount; ++p) {
+                for (int pc = 0; pc < EPcCount; ++pc) {
+                    delete CommonSymbolTable[version][spvVersion][p][pc];
+                    CommonSymbolTable[version][spvVersion][p][pc] = 0;
+                }
             }
         }
     }
index 7d5a81e..e46118a 100644 (file)
@@ -176,7 +176,6 @@ void TParseVersions::initializeExtensionBehavior()
     extensionBehavior[E_GL_ARB_shader_texture_image_samples] = EBhDisable;
     extensionBehavior[E_GL_ARB_viewport_array]               = EBhDisable;
     extensionBehavior[E_GL_ARB_gpu_shader_int64]             = EBhDisable;
-    extensionBehavior[E_GL_ARB_gl_spirv]                     = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_ballot]                = EBhDisable;
     extensionBehavior[E_GL_ARB_sparse_texture2]              = EBhDisable;
     extensionBehavior[E_GL_ARB_sparse_texture_clamp]         = EBhDisable;
@@ -282,7 +281,6 @@ void TParseVersions::getPreamble(std::string& preamble)
             "#define GL_ARB_shader_texture_image_samples 1\n"
             "#define GL_ARB_viewport_array 1\n"
             "#define GL_ARB_gpu_shader_int64 1\n"
-            "#define GL_ARB_gl_spirv 1\n"
             "#define GL_ARB_shader_ballot 1\n"
             "#define GL_ARB_sparse_texture2 1\n"
             "#define GL_ARB_sparse_texture_clamp 1\n"
@@ -298,14 +296,22 @@ void TParseVersions::getPreamble(std::string& preamble)
             ;
 
     // #define VULKAN XXXX
+    const int numberBufSize = 12;
+    char numberBuf[numberBufSize];
     if (spvVersion.vulkan > 0) {
         preamble += "#define VULKAN ";
-        char number[12];
-        snprintf(number, 12, "%d", spvVersion.vulkan);
-        preamble += number;
+        snprintf(numberBuf, numberBufSize, "%d", spvVersion.vulkan);
+        preamble += numberBuf;
         preamble += "\n";
     }
-    // gl_spirv TODO
+    // #define GL_SPIRV XXXX
+    if (spvVersion.openGl > 0) {
+        preamble += "#define GL_SPIRV ";
+        snprintf(numberBuf, numberBufSize, "%d", spvVersion.openGl);
+        preamble += numberBuf;
+        preamble += "\n";
+    }
+
 }
 
 //
index 3a212a0..19d101d 100644 (file)
@@ -79,7 +79,7 @@ struct SpvVersion {
     SpvVersion() : spv(0), vulkan(0), openGl(0) {}
     unsigned int spv; // the version of the targeted SPIR-V, as defined by SPIR-V in word 1 of the SPIR-V binary header
     int vulkan;       // the version of semantics for Vulkan; e.g., for GLSL from KHR_vulkan_glsl "#define VULKAN"
-    int openGl;       // the version of semantics for OpenGL; gl_spirv TODO
+    int openGl;       // the version of semantics for OpenGL; e.g., for GLSL from KHR_vulkan_glsl "#define GL_SPIRV"
 };
 
 //
@@ -124,7 +124,6 @@ const char* const E_GL_ARB_derivative_control           = "GL_ARB_derivative_con
 const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture_image_samples";
 const char* const E_GL_ARB_viewport_array               = "GL_ARB_viewport_array";
 const char* const E_GL_ARB_gpu_shader_int64             = "GL_ARB_gpu_shader_int64";
-const char* const E_GL_ARB_gl_spirv                     = "GL_ARB_gl_spirv";
 const char* const E_GL_ARB_shader_ballot                = "GL_ARB_shader_ballot";
 const char* const E_GL_ARB_sparse_texture2              = "GL_ARB_sparse_texture2";
 const char* const E_GL_ARB_sparse_texture_clamp         = "GL_ARB_sparse_texture_clamp";
index 4f8e3fc..2cd1cc6 100644 (file)
@@ -2633,22 +2633,7 @@ jump_statement
             parseContext.postMainReturn = true;
     }
     | RETURN expression SEMICOLON {
-        parseContext.functionReturnsValue = true;
-        if (parseContext.currentFunctionType->getBasicType() == EbtVoid) {
-            parseContext.error($1.loc, "void function cannot return a value", "return", "");
-            $$ = parseContext.intermediate.addBranch(EOpReturn, $1.loc);
-        } else if (*(parseContext.currentFunctionType) != $2->getType()) {
-            TIntermTyped* converted = parseContext.intermediate.addConversion(EOpReturn, *parseContext.currentFunctionType, $2);
-            if (converted) {
-                if (parseContext.version < 420)
-                    parseContext.warn($1.loc, "type conversion on return values was not explicitly allowed until version 420", "return", "");
-                $$ = parseContext.intermediate.addBranch(EOpReturn, converted, $1.loc);
-            } else {
-                parseContext.error($1.loc, "type does not match, or is not convertible to, the function's return type", "return", "");
-                $$ = parseContext.intermediate.addBranch(EOpReturn, $2, $1.loc);
-            }
-        } else
-            $$ = parseContext.intermediate.addBranch(EOpReturn, $2, $1.loc);
+        $$ = parseContext.handleReturnValue($1.loc, $2);
     }
     | DISCARD SEMICOLON {
         parseContext.requireStage($1.loc, EShLangFragment, "discard");
index a284fda..c8664f9 100644 (file)
@@ -827,8 +827,8 @@ static const yytype_uint16 yyrline[] =
     2399,  2399,  2413,  2416,  2424,  2432,  2443,  2444,  2448,  2455,
     2459,  2467,  2471,  2484,  2484,  2504,  2507,  2513,  2525,  2537,
     2537,  2552,  2552,  2568,  2568,  2589,  2592,  2598,  2601,  2607,
-    2611,  2618,  2623,  2628,  2635,  2653,  2662,  2666,  2673,  2676,
-    2682,  2682
+    2611,  2618,  2623,  2628,  2635,  2638,  2647,  2651,  2658,  2661,
+    2667,  2667
 };
 #endif
 
@@ -7360,80 +7360,65 @@ yyreduce:
   case 414:
 #line 2635 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.functionReturnsValue = true;
-        if (parseContext.currentFunctionType->getBasicType() == EbtVoid) {
-            parseContext.error((yyvsp[-2].lex).loc, "void function cannot return a value", "return", "");
-            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-2].lex).loc);
-        } else if (*(parseContext.currentFunctionType) != (yyvsp[-1].interm.intermTypedNode)->getType()) {
-            TIntermTyped* converted = parseContext.intermediate.addConversion(EOpReturn, *parseContext.currentFunctionType, (yyvsp[-1].interm.intermTypedNode));
-            if (converted) {
-                if (parseContext.version < 420)
-                    parseContext.warn((yyvsp[-2].lex).loc, "type conversion on return values was not explicitly allowed until version 420", "return", "");
-                (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, converted, (yyvsp[-2].lex).loc);
-            } else {
-                parseContext.error((yyvsp[-2].lex).loc, "type does not match, or is not convertible to, the function's return type", "return", "");
-                (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
-            }
-        } else
-            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
+        (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 7381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 415:
-#line 2653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2638 "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 7390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 416:
-#line 2662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2647 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 417:
-#line 2666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2651 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 7408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 418:
-#line 2673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2658 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 419:
-#line 2676 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 7424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 420:
-#line 2682 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2667 "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 7433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 421:
-#line 2686 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 2671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -7449,11 +7434,11 @@ yyreduce:
         (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
         (yyval.interm.intermNode)->getAsAggregate()->addToPragmaTable(parseContext.contextPragma.pragmaTable);
     }
-#line 7453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
 
-#line 7457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7442 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -7681,5 +7666,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 2703 "MachineIndependent/glslang.y" /* yacc.c:1906  */
+#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1906  */
 
index 4e47fa0..23021e2 100644 (file)
@@ -487,6 +487,8 @@ protected:
         }
 
     private:
+        TokenizableIncludeFile& operator=(const TokenizableIncludeFile&);
+
         // Stores the prologue for this string.
         const std::string prologue_;
 
index 835f57f..e599f4d 100644 (file)
@@ -244,6 +244,8 @@ public:
     bool visitBranch(glslang::TVisit, glslang::TIntermBranch*) override;
 
 protected:
+    TSymbolDefinitionCollectingTraverser& operator=(const TSymbolDefinitionCollectingTraverser&);
+
     // The mapping from symbol node IDs to their defining nodes. This should be
     // populated along traversing the AST.
     NodeMapping& symbol_definition_mapping_;
@@ -548,6 +550,8 @@ public:
     }
 
 protected:
+    TNoContractionAssigneeCheckingTraverser& operator=(const TNoContractionAssigneeCheckingTraverser&);
+
     bool visitBinary(glslang::TVisit, glslang::TIntermBinary* node) override;
     void visitSymbol(glslang::TIntermSymbol* node) override;
 
@@ -648,6 +652,8 @@ public:
     }
 
 protected:
+    TNoContractionPropagator& operator=(const TNoContractionPropagator&);
+
     // Visits an aggregate node. The node can be a initializer list, in which
     // case we need to find the 'precise' or 'precise' containing object node
     // with the access chain record. In other cases, just need to traverse all
index 64d6ab9..4b4d0fc 100644 (file)
@@ -37,6 +37,8 @@
 #include "../Include/ResourceLimits.h"
 #include "../MachineIndependent/Versions.h"
 
+#include <string.h>
+
 #ifdef _WIN32
 #define C_DECL __cdecl
 //#ifdef SH_EXPORTING
@@ -139,6 +141,7 @@ enum EShMessages {
     EShMsgVulkanRules      = (1 << 4),  // issue messages for Vulkan-requirements of GLSL for SPIR-V
     EShMsgOnlyPreprocessor = (1 << 5),  // only print out errors produced by the preprocessor
     EShMsgReadHlsl         = (1 << 6),  // use HLSL parsing rules and semantics
+    EShMsgCascadingErrors  = (1 << 7),  // get cascading errors; risks error-recovery issues, instead of an early exit
 };
 
 //
@@ -307,7 +310,7 @@ public:
     // 2. Call parse with an Includer.
     //
     // When the Glslang parser encounters an #include directive, it calls
-    // the Includer's include method with the the requested include name
+    // the Includer's include method with the requested include name
     // together with the current string name.  The returned IncludeResult
     // contains the fully resolved name of the included source, together
     // with the source text that should replace the #include directive
@@ -323,8 +326,10 @@ public:
         // An IncludeResult contains the resolved name and content of a source
         // inclusion.
         struct IncludeResult {
+            IncludeResult(const std::string& file_name, const char* const file_data, const size_t file_length, void* user_data) :
+                file_name(file_name), file_data(file_data), file_length(file_length), user_data(user_data) { }
             // For a successful inclusion, the fully resolved name of the requested
-            // include.  For example, in a filesystem-based includer, full resolution
+            // include.  For example, in a file system-based includer, full resolution
             // should convert a relative path name into an absolute path name.
             // For a failed inclusion, this is an empty string.
             const std::string file_name;
@@ -337,6 +342,9 @@ public:
             const size_t file_length;
             // Include resolver's context.
             void* user_data;
+        protected:
+            IncludeResult& operator=(const IncludeResult&);
+            IncludeResult();
         };
 
         // Resolves an inclusion request by name, type, current source name,
@@ -365,11 +373,8 @@ public:
     public:
         IncludeResult* include(const char*, IncludeType, const char*, size_t) override
         {
-            static const char unexpected_include[] =
-                "unexpected include directive";
-            static const IncludeResult unexpectedIncludeResult =
-                {"", unexpected_include, sizeof(unexpected_include) - 1, nullptr};
-            return new IncludeResult(unexpectedIncludeResult);
+            const char* unexpected_include = "unexpected include directive";
+            return new IncludeResult(std::string(""), unexpected_include, strlen(unexpected_include), nullptr);
         }
         virtual void releaseInclude(IncludeResult* result) override
         {
index 38d6d0a..6f4abef 100644 (file)
@@ -185,7 +185,10 @@ INSTANTIATE_TEST_CASE_P(
         "voidFunction.frag",
         "whileLoop.frag",
         "nonVulkan.frag",
-        "spv.atomic.comp",
+        "negativeArraySize.comp",
+        "precise.tesc",
+        "precise_struct_block.vert",
+        "maxClipDistances.vert",
     })),
     FileNameAsCustomTestSuffix
 );
index 20c98be..7bc6a70 100644 (file)
@@ -97,8 +97,8 @@ TEST_P(ConfigTest, FromFile)
 INSTANTIATE_TEST_CASE_P(
     Glsl, ConfigTest,
     ::testing::ValuesIn(std::vector<TestCaseSpec>({
-        {"specExamples.vert", "baseResults/test.conf", "specExamples.vert.out", EShMsgAST},
-        {"100Limits.vert", "100.conf", "100LimitsConf.vert.out", EShMsgDefault},
+        {"specExamples.vert", "baseResults/test.conf", "specExamples.vert.out", (EShMessages)(EShMsgAST | EShMsgCascadingErrors)},
+        {"100Limits.vert", "100.conf", "100LimitsConf.vert.out", EShMsgCascadingErrors},
     })),
 );
 // clang-format on
index 51be6f7..a004419 100644 (file)
@@ -76,14 +76,17 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.assoc.frag", "PixelShaderFunction"},
         {"hlsl.attribute.frag", "PixelShaderFunction"},
         {"hlsl.cast.frag", "PixelShaderFunction"},
+        {"hlsl.discard.frag", "PixelShaderFunction"},
         {"hlsl.doLoop.frag", "PixelShaderFunction"},
         {"hlsl.float1.frag", "PixelShaderFunction"},
         {"hlsl.float4.frag", "PixelShaderFunction"},
         {"hlsl.forLoop.frag", "PixelShaderFunction"},
         {"hlsl.if.frag", "PixelShaderFunction"},
+        {"hlsl.init.frag", "ShaderFunction"},
         {"hlsl.intrinsics.barriers.comp", "ComputeShaderFunction"},
         {"hlsl.intrinsics.comp", "ComputeShaderFunction"},
         {"hlsl.intrinsics.evalfns.frag", "main"},
+        {"hlsl.intrinsics.double.frag", "PixelShaderFunction"},
         {"hlsl.intrinsics.f1632.frag", "PixelShaderFunction"},
         {"hlsl.intrinsics.frag", "PixelShaderFunction"},
         {"hlsl.intrinsics.lit.frag", "PixelShaderFunction"},
@@ -98,7 +101,10 @@ INSTANTIATE_TEST_CASE_P(
         {"hlsl.scope.frag", "PixelShaderFunction"},
         {"hlsl.sin.frag", "PixelShaderFunction"},
         {"hlsl.struct.frag", "PixelShaderFunction"},
+        {"hlsl.switch.frag", "PixelShaderFunction"},
         {"hlsl.swizzle.frag", "PixelShaderFunction"},
+        {"hlsl.templatetypes.frag", "PixelShaderFunction"},
+        {"hlsl.typedef.frag", "PixelShaderFunction"},
         {"hlsl.whileLoop.frag", "PixelShaderFunction"},
         {"hlsl.void.frag", "PixelShaderFunction"},
     }),
index 3cafb52..34af9ad 100644 (file)
@@ -51,7 +51,7 @@ namespace glslangtest {
 // gets fixed.
 class GlslangInitializer {
 public:
-    GlslangInitializer() : lastMessages(EShMsgDefault)
+    GlslangInitializer() : lastMessages(EShMsgCascadingErrors)
     {
         glslang::InitializeProcess();
     }
index 331c5b2..b324b9a 100644 (file)
@@ -48,8 +48,7 @@ TEST_P(LinkTest, FromFile)
 {
     const auto& fileNames = GetParam();
     const size_t fileCount = fileNames.size();
-    const EShMessages controls = DeriveOptions(
-            Source::GLSL, Semantics::OpenGL, Target::AST);
+    const EShMessages controls = DeriveOptions(Source::GLSL, Semantics::OpenGL, Target::AST);
     GlslangResult result;
 
     // Compile each input shader file.
index 01bdfc3..04ac3f7 100644 (file)
@@ -65,6 +65,7 @@ INSTANTIATE_TEST_CASE_P(
         "preprocessor.success_if_parse_would_fail.vert",
         "preprocessor.defined.vert",
         "preprocessor.many.endif.vert",
+        "preprocessor.eof_missing.vert",
     })),
     FileNameAsCustomTestSuffix
 );
index fd9a38b..dbe0507 100644 (file)
 namespace glslangtest {
 namespace {
 
-using CompileToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
+using OpenGLSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 using VulkanAstSemantics = GlslangTest<::testing::TestWithParam<std::string>>;
 
 // Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully
 // generate SPIR-V.
-TEST_P(CompileToSpirvTest, FromFile)
+TEST_P(CompileVulkanToSpirvTest, FromFile)
 {
     loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
                             Source::GLSL, Semantics::Vulkan,
                             Target::Spv);
 }
 
+// Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully
+// generate SPIR-V.
+TEST_P(CompileOpenGLToSpirvTest, FromFile)
+{
+    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
+                            Source::GLSL, Semantics::OpenGL,
+                            Target::Spv);
+}
+
 // GLSL-level Vulkan semantics test. Expected to error out before generating
 // SPIR-V.
 TEST_P(VulkanSemantics, FromFile)
@@ -63,6 +74,15 @@ TEST_P(VulkanSemantics, FromFile)
                             Target::Spv);
 }
 
+// GLSL-level Vulkan semantics test. Expected to error out before generating
+// SPIR-V.
+TEST_P(OpenGLSemantics, FromFile)
+{
+    loadFileCompileAndCheck(GLSLANG_TEST_DIRECTORY, GetParam(),
+                            Source::GLSL, Semantics::OpenGL,
+                            Target::Spv);
+}
+
 // GLSL-level Vulkan semantics test that need to see the AST for validation.
 TEST_P(VulkanAstSemantics, FromFile)
 {
@@ -73,7 +93,7 @@ TEST_P(VulkanAstSemantics, FromFile)
 
 // clang-format off
 INSTANTIATE_TEST_CASE_P(
-    Glsl, CompileToSpirvTest,
+    Glsl, CompileVulkanToSpirvTest,
     ::testing::ValuesIn(std::vector<std::string>({
         // Test looping constructs.
         // No tests yet for making sure break and continue from a nested loop
@@ -106,7 +126,9 @@ INSTANTIATE_TEST_CASE_P(
         "spv.400.tesc",
         "spv.400.tese",
         "spv.420.geom",
+        "spv.430.frag",
         "spv.430.vert",
+        "spv.450.tesc",
         "spv.accessChain.frag",
         "spv.aggOps.frag",
         "spv.always-discard.frag",
@@ -184,6 +206,20 @@ INSTANTIATE_TEST_CASE_P(
         "spv.specConstant.vert",
         "spv.specConstant.comp",
         "spv.specConstantComposite.vert",
+        "spv.specConstantOperations.vert",
+        "spv.precise.tese",
+        "spv.precise.tesc",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
+// clang-format off
+INSTANTIATE_TEST_CASE_P(
+    Glsl, CompileOpenGLToSpirvTest,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.atomic.comp",
+        "spv.glFragColor.frag",
+        "spv.specConst.vert",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -199,6 +235,18 @@ INSTANTIATE_TEST_CASE_P(
 );
 
 INSTANTIATE_TEST_CASE_P(
+    Glsl, OpenGLSemantics,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "glspv.esversion.vert",
+        "glspv.version.frag",
+        "glspv.version.vert",
+        "glspv.frag",
+        "glspv.vert",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
+INSTANTIATE_TEST_CASE_P(
     Glsl, VulkanAstSemantics,
     ::testing::ValuesIn(std::vector<std::string>({
         "vulkan.ast.vert",
index 2cf7070..f170f36 100644 (file)
@@ -68,7 +68,7 @@ EShLanguage GetShaderStage(const std::string& stage)
 
 EShMessages DeriveOptions(Source source, Semantics semantics, Target target)
 {
-    EShMessages result = EShMsgDefault;
+    EShMessages result = EShMsgCascadingErrors;
 
     switch (source) {
         case Source::GLSL:
@@ -107,7 +107,7 @@ std::pair<bool, std::string> ReadFile(const std::string& path)
     if (fstream) {
         std::string contents;
         fstream.seekg(0, std::ios::end);
-        contents.reserve(fstream.tellg());
+        contents.reserve((std::string::size_type)fstream.tellg());
         fstream.seekg(0, std::ios::beg);
         contents.assign((std::istreambuf_iterator<char>(fstream)),
                         std::istreambuf_iterator<char>());
index e71bab1..8dffb80 100644 (file)
@@ -180,8 +180,7 @@ public:
         shader->setStringsWithLengths(&shaderStrings, &shaderLengths, 1);
         if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str());
         // Reinitialize glslang if the semantics change.
-        GlslangInitializer::InitializationToken token =
-            GlobalTestSettings.initializer->acquire(controls);
+        GlobalTestSettings.initializer->acquire(controls);
         return shader->parse(
                 (resources ? resources : &glslang::DefaultTBuiltInResource),
                 defaultVersion, isForwardCompatible, controls);
@@ -265,8 +264,7 @@ public:
         tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
 
         const EShMessages controls = DeriveOptions(source, semantics, target);
-        GlslangResult result =
-            compileAndLink(testName, input, entryPointName, controls);
+        GlslangResult result = compileAndLink(testName, input, entryPointName, controls);
 
         // Generate the hybrid output in the way of glslangValidator.
         std::ostringstream stream;
@@ -291,7 +289,7 @@ public:
         glslang::TShader::ForbidInclude includer;
         const bool success = shader.preprocess(
             &glslang::DefaultTBuiltInResource, defaultVersion, defaultProfile,
-            forceVersionProfile, isForwardCompatible, EShMsgOnlyPreprocessor,
+            forceVersionProfile, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors),
             &ppShader, includer);
 
         std::string log = shader.getInfoLog();
index 17ec820..ee8ebf3 100755 (executable)
@@ -1,5 +1,6 @@
 //
 //Copyright (C) 2016 Google, Inc.
+//Copyright (C) 2016 LunarG, Inc.
 //
 //All rights reserved.
 //
@@ -105,70 +106,148 @@ bool HlslGrammar::acceptCompilationUnit()
 }
 
 // declaration
-//      : SEMICOLON
-//      : fully_specified_type SEMICOLON
-//      | fully_specified_type identifier array_specifier post_decls (EQUAL expression)opt SEMICOLON
-//      | fully_specified_type identifier function_parameters post_decls SEMICOLON           // function prototype
+//      : fully_specified_type declarator_list SEMICOLON
 //      | fully_specified_type identifier function_parameters post_decls compound_statement  // function definition
+//      | typedef declaration
 //
-// 'node' could get created if the declaration creates code, like an initializer
+// declarator_list
+//      : declarator COMMA declarator COMMA declarator...  // zero or more declarators
+//
+// declarator
+//      : identifier array_specifier post_decls
+//      | identifier array_specifier post_decls EQUAL assignment_expression
+//      | identifier function_parameters post_decls                                          // function prototype
+//
+// Parsing has to go pretty far in to know whether it's a variable, prototype, or
+// function definition, so the implementation below doesn't perfectly divide up the grammar
+// as above.  (The 'identifier' in the first item in init_declarator list is the
+// same as 'identifier' for function declarations.)
+//
+// 'node' could get populated if the declaration creates code, like an initializer
 // or a function body.
 //
 bool HlslGrammar::acceptDeclaration(TIntermNode*& node)
 {
     node = nullptr;
+    bool list = false;
+
+    // typedef
+    bool typedefDecl = acceptTokenClass(EHTokTypedef);
 
     // fully_specified_type
     TType type;
     if (! acceptFullySpecifiedType(type))
         return false;
+    if (type.getQualifier().storage == EvqTemporary && parseContext.symbolTable.atGlobalLevel())
+        type.getQualifier().storage = EvqGlobal;
 
     // identifier
     HlslToken idToken;
-    if (acceptIdentifier(idToken)) {
-        // array_specifier
-        TArraySizes* arraySizes = nullptr;
-        acceptArraySpecifier(arraySizes);
-
-        // post_decls
-        acceptPostDecls(type);
-
-        // EQUAL expression
-        TIntermTyped* expressionNode = nullptr;
-        if (acceptTokenClass(EHTokAssign)) {
-            if (! acceptExpression(expressionNode)) {
-                expected("initializer");
-                return false;
-            }
-        }
-
-        // SEMICOLON
-        if (acceptTokenClass(EHTokSemicolon)) {
-            node = parseContext.declareVariable(idToken.loc, *idToken.string, type, arraySizes, expressionNode);
-            return true;
-        }
-
+    while (acceptIdentifier(idToken)) {
         // function_parameters
         TFunction* function = new TFunction(idToken.string, type);
         if (acceptFunctionParameters(*function)) {
             // post_decls
             acceptPostDecls(type);
 
-            // compound_statement
-            if (peekTokenClass(EHTokLeftBrace))
+            // compound_statement (function body definition) or just a prototype?
+            if (peekTokenClass(EHTokLeftBrace)) {
+                if (list)
+                    parseContext.error(idToken.loc, "function body can't be in a declarator list", "{", "");
+                if (typedefDecl)
+                    parseContext.error(idToken.loc, "function body can't be in a typedef", "{", "");
                 return acceptFunctionDefinition(*function, node);
+            } else {
+                if (typedefDecl)
+                    parseContext.error(idToken.loc, "function typedefs not implemented", "{", "");
+                parseContext.handleFunctionDeclarator(idToken.loc, *function, true);
+            }
+        } else {
+            // a variable declaration
 
-            // SEMICOLON
-            if (acceptTokenClass(EHTokSemicolon))
-                return true;
+            // array_specifier
+            TArraySizes* arraySizes = nullptr;
+            acceptArraySpecifier(arraySizes);
 
-            return false;
+            // post_decls
+            acceptPostDecls(type);
+
+            // EQUAL assignment_expression
+            TIntermTyped* expressionNode = nullptr;
+            if (acceptTokenClass(EHTokAssign)) {
+                if (typedefDecl)
+                    parseContext.error(idToken.loc, "can't have an initializer", "typedef", "");
+                if (! acceptAssignmentExpression(expressionNode)) {
+                    expected("initializer");
+                    return false;
+                }
+            }
+
+            if (typedefDecl)
+                parseContext.declareTypedef(idToken.loc, *idToken.string, type, arraySizes);
+            else {
+                // Declare the variable and add any initializer code to the AST.
+                // The top-level node is always made into an aggregate, as that's
+                // historically how the AST has been.
+                node = intermediate.growAggregate(node,
+                                                  parseContext.declareVariable(idToken.loc, *idToken.string, type,
+                                                                               arraySizes, expressionNode),
+                                                  idToken.loc);
+            }
         }
-    }
+
+        if (acceptTokenClass(EHTokComma)) {
+            list = true;
+            continue;
+        }
+    };
+
+    // The top-level node is a sequence.
+    if (node != nullptr)
+        node->getAsAggregate()->setOperator(EOpSequence);
 
     // SEMICOLON
-    if (acceptTokenClass(EHTokSemicolon))
-        return true;
+    if (! acceptTokenClass(EHTokSemicolon)) {
+        expected(";");
+        return false;
+    }
+    
+    return true;
+}
+
+// control_declaration
+//      : fully_specified_type identifier EQUAL expression
+//
+bool HlslGrammar::acceptControlDeclaration(TIntermNode*& node)
+{
+    node = nullptr;
+
+    // fully_specified_type
+    TType type;
+    if (! acceptFullySpecifiedType(type))
+        return false;
+
+    // identifier
+    HlslToken idToken;
+    if (! acceptIdentifier(idToken)) {
+        expected("identifier");
+        return false;
+    }
+
+    // EQUAL
+    TIntermTyped* expressionNode = nullptr;
+    if (! acceptTokenClass(EHTokAssign)) {
+        expected("=");
+        return false;
+    }
+
+    // expression
+    if (! acceptExpression(expressionNode)) {
+        expected("initializer");
+        return false;
+    }
+
+    node = parseContext.declareVariable(idToken.loc, *idToken.string, type, 0, expressionNode);
 
     return true;
 }
@@ -254,12 +333,174 @@ void HlslGrammar::acceptQualifier(TQualifier& qualifier)
     } while (true);
 }
 
+// template_type
+//      : FLOAT
+//      | DOUBLE
+//      | INT
+//      | DWORD
+//      | UINT
+//      | BOOL
+//
+bool HlslGrammar::acceptTemplateType(TBasicType& basicType)
+{
+    switch (peek()) {
+    case EHTokFloat:
+        basicType = EbtFloat;
+        break;
+    case EHTokDouble:
+        basicType = EbtDouble;
+        break;
+    case EHTokInt:
+    case EHTokDword:
+        basicType = EbtInt;
+        break;
+    case EHTokUint:
+        basicType = EbtUint;
+        break;
+    case EHTokBool:
+        basicType = EbtBool;
+        break;
+    default:
+        return false;
+    }
+
+    advanceToken();
+
+    return true;
+}
+
+// vector_template_type
+//      : VECTOR
+//      | VECTOR LEFT_ANGLE template_type COMMA integer_literal RIGHT_ANGLE
+//
+bool HlslGrammar::acceptVectorTemplateType(TType& type)
+{
+    if (! acceptTokenClass(EHTokVector))
+        return false;
+
+    if (! acceptTokenClass(EHTokLeftAngle)) {
+        // in HLSL, 'vector' alone means float4.
+        new(&type) TType(EbtFloat, EvqTemporary, 4);
+        return true;
+    }
+
+    TBasicType basicType;
+    if (! acceptTemplateType(basicType)) {
+        expected("scalar type");
+        return false;
+    }
+
+    // COMMA
+    if (! acceptTokenClass(EHTokComma)) {
+        expected(",");
+        return false;
+    }
+
+    // integer
+    if (! peekTokenClass(EHTokIntConstant)) {
+        expected("literal integer");
+        return false;
+    }
+
+    TIntermTyped* vecSize;
+    if (! acceptLiteral(vecSize))
+        return false;
+
+    const int vecSizeI = vecSize->getAsConstantUnion()->getConstArray()[0].getIConst();
+
+    new(&type) TType(basicType, EvqTemporary, vecSizeI);
+
+    if (vecSizeI == 1)
+        type.makeVector();
+
+    if (!acceptTokenClass(EHTokRightAngle)) {
+        expected("right angle bracket");
+        return false;
+    }
+
+    return true;
+}
+
+// matrix_template_type
+//      : MATRIX
+//      | MATRIX LEFT_ANGLE template_type COMMA integer_literal COMMA integer_literal RIGHT_ANGLE
+//
+bool HlslGrammar::acceptMatrixTemplateType(TType& type)
+{
+    if (! acceptTokenClass(EHTokMatrix))
+        return false;
+
+    if (! acceptTokenClass(EHTokLeftAngle)) {
+        // in HLSL, 'matrix' alone means float4x4.
+        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 4);
+        return true;
+    }
+
+    TBasicType basicType;
+    if (! acceptTemplateType(basicType)) {
+        expected("scalar type");
+        return false;
+    }
+
+    // COMMA
+    if (! acceptTokenClass(EHTokComma)) {
+        expected(",");
+        return false;
+    }
+
+    // integer rows
+    if (! peekTokenClass(EHTokIntConstant)) {
+        expected("literal integer");
+        return false;
+    }
+
+    TIntermTyped* rows;
+    if (! acceptLiteral(rows))
+        return false;
+
+    // COMMA
+    if (! acceptTokenClass(EHTokComma)) {
+        expected(",");
+        return false;
+    }
+    
+    // integer cols
+    if (! peekTokenClass(EHTokIntConstant)) {
+        expected("literal integer");
+        return false;
+    }
+
+    TIntermTyped* cols;
+    if (! acceptLiteral(cols))
+        return false;
+
+    new(&type) TType(basicType, EvqTemporary, 0,
+                     cols->getAsConstantUnion()->getConstArray()[0].getIConst(),
+                     rows->getAsConstantUnion()->getConstArray()[0].getIConst());
+
+    if (!acceptTokenClass(EHTokRightAngle)) {
+        expected("right angle bracket");
+        return false;
+    }
+
+    return true;
+}
+
+
 // If token is for a type, update 'type' with the type information,
 // and return true and advance.
 // Otherwise, return false, and don't advance
 bool HlslGrammar::acceptType(TType& type)
 {
     switch (peek()) {
+    case EHTokVector:
+        return acceptVectorTemplateType(type);
+        break;
+
+    case EHTokMatrix:
+        return acceptMatrixTemplateType(type);
+        break;
+
     case EHTokStruct:
         return acceptStruct(type);
         break;
@@ -349,6 +590,7 @@ bool HlslGrammar::acceptType(TType& type)
         new(&type) TType(EbtUint, EvqTemporary, 4);
         break;
 
+
     case EHTokBool:
         new(&type) TType(EbtBool);
         break;
@@ -833,7 +1075,9 @@ bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& no
 
 // Accept an expression with parenthesis around it, where
 // the parenthesis ARE NOT expression parenthesis, but the
-// syntactically required ones like in "if ( expression )"
+// syntactically required ones like in "if ( expression )".
+//
+// Also accepts a declaration expression; "if (int a = expression)".
 //
 // Note this one is not set up to be speculative; as it gives
 // errors if not found.
@@ -844,9 +1088,21 @@ bool HlslGrammar::acceptParenExpression(TIntermTyped*& expression)
     if (! acceptTokenClass(EHTokLeftParen))
         expected("(");
 
-    if (! acceptExpression(expression)) {
-        expected("expression");
-        return false;
+    bool decl = false;
+    TIntermNode* declNode = nullptr;
+    decl = acceptControlDeclaration(declNode);
+    if (decl) {
+        if (declNode == nullptr || declNode->getAsTyped() == nullptr) {
+            expected("initialized declaration");
+            return false;
+        } else
+            expression = declNode->getAsTyped();
+    } else {
+        // no declaration
+        if (! acceptExpression(expression)) {
+            expected("expression");
+            return false;
+        }
     }
 
     // RIGHT_PAREN
@@ -891,28 +1147,77 @@ bool HlslGrammar::acceptExpression(TIntermTyped*& node)
     } while (true);
 }
 
+// initializer
+//      : LEFT_BRACE initializer_list RIGHT_BRACE
+//
+// initializer_list
+//      : assignment_expression COMMA assignment_expression COMMA ...
+//
+bool HlslGrammar::acceptInitializer(TIntermTyped*& node)
+{
+    // LEFT_BRACE
+    if (! acceptTokenClass(EHTokLeftBrace))
+        return false;
+
+    // initializer_list
+    TSourceLoc loc = token.loc;
+    node = nullptr;
+    do {
+        // assignment_expression
+        TIntermTyped* expr;
+        if (! acceptAssignmentExpression(expr)) {
+            expected("assignment expression in initializer list");
+            return false;
+        }
+        node = intermediate.growAggregate(node, expr, loc);
+
+        // COMMA
+        if (acceptTokenClass(EHTokComma))
+            continue;
+
+        // RIGHT_BRACE
+        if (acceptTokenClass(EHTokRightBrace))
+            return true;
+
+        expected(", or }");
+        return false;
+    } while (true);
+}
+
 // Accept an assignment expression, where assignment operations
-// associate right-to-left.  This is, it is implicit, for example
+// associate right-to-left.  That is, it is implicit, for example
 //
 //    a op (b op (c op d))
 //
 // assigment_expression
 //      : binary_expression op binary_expression op binary_expression ...
+//      | initializer
 //
 bool HlslGrammar::acceptAssignmentExpression(TIntermTyped*& node)
 {
+    // initializer
+    if (peekTokenClass(EHTokLeftBrace)) {
+        if (acceptInitializer(node))
+            return true;
+
+        expected("initializer");
+        return false;
+    }
+
+    // binary_expression
     if (! acceptBinaryExpression(node, PlLogicalOr))
         return false;
 
+    // assignment operation?
     TOperator assignOp = HlslOpMap::assignment(peek());
     if (assignOp == EOpNull)
         return true;
 
-    // ... op
+    // assignment op
     TSourceLoc loc = token.loc;
     advanceToken();
 
-    // ... binary_expression
+    // binary_expression
     // But, done by recursing this function, which automatically
     // gets the right-to-left associativity.
     TIntermTyped* rightNode = nullptr;
@@ -1271,8 +1576,16 @@ bool HlslGrammar::acceptCompoundStatement(TIntermNode*& retStatement)
     // statement statement ...
     TIntermNode* statement = nullptr;
     while (acceptStatement(statement)) {
-        // hook it up
-        compoundStatement = intermediate.growAggregate(compoundStatement, statement);
+        TIntermBranch* branch = statement ? statement->getAsBranchNode() : nullptr;
+        if (branch != nullptr && (branch->getFlowOp() == EOpCase ||
+                                  branch->getFlowOp() == EOpDefault)) {
+            // hook up individual subsequences within a switch statement
+            parseContext.wrapupSwitchSubsequence(compoundStatement, statement);
+            compoundStatement = nullptr;
+        } else {
+            // hook it up to the growing compound statement
+            compoundStatement = intermediate.growAggregate(compoundStatement, statement);
+        }
     }
     if (compoundStatement)
         compoundStatement->setOperator(EOpSequence);
@@ -1346,6 +1659,8 @@ bool HlslGrammar::acceptStatement(TIntermNode*& statement)
 
     case EHTokCase:
         return acceptCaseLabel(statement);
+    case EHTokDefault:
+        return acceptDefaultLabel(statement);
 
     case EHTokSemicolon:
         return acceptTokenClass(EHTokSemicolon);
@@ -1476,9 +1791,34 @@ bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement)
     return true;
 }
 
+// switch_statement
+//      : SWITCH LEFT_PAREN expression RIGHT_PAREN compound_statement
+//
 bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement)
 {
-    return false;
+    // SWITCH
+    TSourceLoc loc = token.loc;
+    if (! acceptTokenClass(EHTokSwitch))
+        return false;
+
+    // LEFT_PAREN expression RIGHT_PAREN
+    parseContext.pushScope();
+    TIntermTyped* switchExpression;
+    if (! acceptParenExpression(switchExpression)) {
+        parseContext.popScope();
+        return false;
+    }
+
+    // compound_statement
+    parseContext.pushSwitchSequence(new TIntermSequence);
+    bool statementOkay = acceptCompoundStatement(statement);
+    if (statementOkay)
+        statement = parseContext.addSwitch(loc, switchExpression, statement ? statement->getAsAggregate() : nullptr);
+
+    parseContext.popSwitchSequence();
+    parseContext.popScope();
+
+    return statementOkay;
 }
 
 // iteration_statement
@@ -1567,9 +1907,14 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
         // of the for sub-statement
         parseContext.pushScope();
 
-        // initializer SEMI_COLON
-        TIntermTyped* initializer = nullptr; // TODO, "for (initializer" needs to support decl. statement
-        acceptExpression(initializer);
+        // initializer
+        TIntermNode* initNode = nullptr;
+        if (! acceptControlDeclaration(initNode)) {
+            TIntermTyped* initExpr = nullptr;
+            acceptExpression(initExpr);
+            initNode = initExpr;
+        }
+        // SEMI_COLON
         if (! acceptTokenClass(EHTokSemicolon))
             expected(";");
 
@@ -1592,7 +1937,7 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
             return false;
         }
 
-        statement = intermediate.addForLoop(statement, initializer, condition, iterator, true, loc);
+        statement = intermediate.addForLoop(statement, initNode, condition, iterator, true, loc);
 
         parseContext.popScope();
         parseContext.unnestLooping();
@@ -1614,42 +1959,96 @@ bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement)
 //
 bool HlslGrammar::acceptJumpStatement(TIntermNode*& statement)
 {
-    switch (peek()) {
+    EHlslTokenClass jump = peek();
+    switch (jump) {
     case EHTokContinue:
     case EHTokBreak:
     case EHTokDiscard:
-        // TODO
-        return false;
-
     case EHTokReturn:
-        // return
-        if (acceptTokenClass(EHTokReturn)) {
-            // expression
-            TIntermTyped* node;
-            if (acceptExpression(node)) {
-                // hook it up
-                statement = intermediate.addBranch(EOpReturn, node, token.loc);
-            } else
-                statement = intermediate.addBranch(EOpReturn, token.loc);
+        advanceToken();
+        break;
+    default:
+        // not something we handle in this function
+        return false;
+    }
 
-            // SEMICOLON
-            if (! acceptTokenClass(EHTokSemicolon)) {
-                expected(";");
-                return false;
-            }
+    switch (jump) {
+    case EHTokContinue:
+        statement = intermediate.addBranch(EOpContinue, token.loc);
+        break;
+    case EHTokBreak:
+        statement = intermediate.addBranch(EOpBreak, token.loc);
+        break;
+    case EHTokDiscard:
+        statement = intermediate.addBranch(EOpKill, token.loc);
+        break;
 
-            return true;
-        }
+    case EHTokReturn:
+    {
+        // expression
+        TIntermTyped* node;
+        if (acceptExpression(node)) {
+            // hook it up
+            statement = intermediate.addBranch(EOpReturn, node, token.loc);
+        } else
+            statement = intermediate.addBranch(EOpReturn, token.loc);
+        break;
+    }
 
     default:
+        assert(0);
         return false;
     }
-}
 
+    // SEMICOLON
+    if (! acceptTokenClass(EHTokSemicolon))
+        expected(";");
+    
+    return true;
+}
 
+// case_label
+//      : CASE expression COLON
+//
 bool HlslGrammar::acceptCaseLabel(TIntermNode*& statement)
 {
-    return false;
+    TSourceLoc loc = token.loc;
+    if (! acceptTokenClass(EHTokCase))
+        return false;
+
+    TIntermTyped* expression;
+    if (! acceptExpression(expression)) {
+        expected("case expression");
+        return false;
+    }
+
+    if (! acceptTokenClass(EHTokColon)) {
+        expected(":");
+        return false;
+    }
+
+    statement = parseContext.intermediate.addBranch(EOpCase, expression, loc);
+
+    return true;
+}
+
+// default_label
+//      : DEFAULT COLON
+//
+bool HlslGrammar::acceptDefaultLabel(TIntermNode*& statement)
+{
+    TSourceLoc loc = token.loc;
+    if (! acceptTokenClass(EHTokDefault))
+        return false;
+
+    if (! acceptTokenClass(EHTokColon)) {
+        expected(":");
+        return false;
+    }
+
+    statement = parseContext.intermediate.addBranch(EOpDefault, loc);
+
+    return true;
 }
 
 // array_specifier
index b4a948f..437c316 100755 (executable)
@@ -1,5 +1,6 @@
 //
 //Copyright (C) 2016 Google, Inc.
+//Copyright (C) 2016 LunarG, Inc.
 //
 //All rights reserved.
 //
@@ -54,13 +55,20 @@ namespace glslang {
         bool parse();
 
     protected:
+        HlslGrammar();
+        HlslGrammar& operator=(const HlslGrammar&);
+
         void expected(const char*);
         bool acceptIdentifier(HlslToken&);
         bool acceptCompilationUnit();
         bool acceptDeclaration(TIntermNode*& node);
+        bool acceptControlDeclaration(TIntermNode*& node);
         bool acceptFullySpecifiedType(TType&);
         void acceptQualifier(TQualifier&);
         bool acceptType(TType&);
+        bool acceptTemplateType(TBasicType&);
+        bool acceptVectorTemplateType(TType&);
+        bool acceptMatrixTemplateType(TType&);
         bool acceptStruct(TType&);
         bool acceptStructDeclarationList(TTypeList*&);
         bool acceptFunctionParameters(TFunction&);
@@ -68,6 +76,7 @@ namespace glslang {
         bool acceptFunctionDefinition(TFunction&, TIntermNode*&);
         bool acceptParenExpression(TIntermTyped*&);
         bool acceptExpression(TIntermTyped*&);
+        bool acceptInitializer(TIntermTyped*&);
         bool acceptAssignmentExpression(TIntermTyped*&);
         bool acceptBinaryExpression(TIntermTyped*&, PrecedenceLevel);
         bool acceptUnaryExpression(TIntermTyped*&);
@@ -87,6 +96,7 @@ namespace glslang {
         bool acceptIterationStatement(TIntermNode*&);
         bool acceptJumpStatement(TIntermNode*&);
         bool acceptCaseLabel(TIntermNode*&);
+        bool acceptDefaultLabel(TIntermNode*&);
         void acceptArraySpecifier(TArraySizes*&);
         void acceptPostDecls(TType&);
 
index 228ac4f..02c9c58 100755 (executable)
@@ -409,7 +409,7 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc,
     return result;
 }
 
-void HlslParseContext::checkIndex(const TSourceLoc& loc, const TType& type, int& index)
+void HlslParseContext::checkIndex(const TSourceLoc& /*loc*/, const TType& /*type*/, int& /*index*/)
 {
     // HLSL todo: any rules for index fixups?
 }
@@ -527,7 +527,7 @@ int HlslParseContext::getIoArrayImplicitSize() const
         return 0;
 }
 
-void HlslParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredSize, const char* feature, TType& type, const TString& name)
+void HlslParseContext::checkIoArrayConsistency(const TSourceLoc& /*loc*/, int requiredSize, const char* /*feature*/, TType& type, const TString& /*name*/)
 {
     if (type.isImplicitlySizedArray())
         type.changeOuterArraySize(requiredSize);
@@ -652,12 +652,6 @@ TFunction* HlslParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFu
     // If this is a definition, the definition production code will check for redefinitions
     // (we don't know at this point if it's a definition or not).
     //
-    // Redeclarations (full signature match) are allowed.  But, return types and parameter qualifiers must also match.
-    //  - except ES 100, which only allows a single prototype
-    //
-    // ES 100 does not allow redefining, but does allow overloading of built-in functions.
-    // ES 300 does not allow redefining or overloading of built-in functions.
-    //
     bool builtIn;
     TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn);
     const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0;
@@ -799,6 +793,68 @@ TOperator HlslParseContext::mapAtomicOp(const TSourceLoc& loc, TOperator op, boo
     }
 }
 
+//
+// Change texture parameters to match AST & SPIR-V semantics
+//
+void HlslParseContext::textureParameters(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
+{
+    if (!node || !node->getAsOperator())
+        return;
+
+    const TOperator op  = node->getAsOperator()->getOp();
+    const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr;
+
+    switch (op) {
+    case EOpTexture:
+        {
+            // Texture with ddx & ddy is really gradient form
+            if (argAggregate->getSequence().size() == 4) {
+                node->getAsAggregate()->setOperator(EOpTextureGrad);
+                break;
+            }
+
+            break;
+        }
+
+    case EOpTextureBias:
+        {
+            TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();  // sampler
+            TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();  // coord
+
+            // HLSL puts bias in W component of coordinate.  We extract it and add it to
+            // the argument list, instead
+            TIntermTyped* w = intermediate.addConstantUnion(3, loc, true);
+            TIntermTyped* bias = intermediate.addIndex(EOpIndexDirect, arg1, w, loc);
+
+            TOperator constructOp = EOpNull;
+            switch (arg0->getType().getSampler().dim) {
+            case Esd1D:   constructOp = EOpConstructFloat; break; // 1D
+            case Esd2D:   constructOp = EOpConstructVec2;  break; // 2D
+            case Esd3D:   constructOp = EOpConstructVec3;  break; // 3D
+            case EsdCube: constructOp = EOpConstructVec3;  break; // also 3D
+            default: break;
+            }
+            
+            TIntermAggregate* constructCoord = new TIntermAggregate(constructOp);
+            constructCoord->getSequence().push_back(arg1);
+            constructCoord->setLoc(loc);
+
+            TIntermAggregate* tex = new TIntermAggregate(EOpTexture);
+            tex->getSequence().push_back(arg0);           // sampler
+            tex->getSequence().push_back(constructCoord); // coordinate
+            tex->getSequence().push_back(bias);           // bias
+            tex->setLoc(loc);
+            node = tex;
+
+            break;
+        }
+
+    default:
+        break; // most pass through unchanged
+    }
+}
+
+//
 // Optionally decompose intrinsics to AST opcodes.
 //
 void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments)
@@ -875,6 +931,7 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
             compoundStatement = intermediate.growAggregate(compoundStatement, cosAssign);
             compoundStatement->setOperator(EOpSequence);
             compoundStatement->setLoc(loc);
+            compoundStatement->setType(TType(EbtVoid));
 
             node = compoundStatement;
 
@@ -1105,6 +1162,35 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*&
             break;
         }
 
+    case EOpAsDouble:
+        {
+            // asdouble accepts two 32 bit ints.  we can use EOpUint64BitsToDouble, but must
+            // first construct a uint64.
+            TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped();
+            TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped();
+
+            if (arg0->getType().isVector()) { // TODO: ...
+                error(loc, "double2 conversion not implemented", "asdouble", "");
+                break;
+            }
+
+            TIntermAggregate* uint64 = new TIntermAggregate(EOpConstructUVec2);
+
+            uint64->getSequence().push_back(arg0);
+            uint64->getSequence().push_back(arg1);
+            uint64->setType(TType(EbtUint, EvqTemporary, 2));  // convert 2 uints to a uint2
+            uint64->setLoc(loc);
+
+            // bitcast uint2 to a double
+            TIntermTyped* convert = new TIntermUnary(EOpUint64BitsToDouble);
+            convert->getAsUnaryNode()->setOperand(uint64);
+            convert->setLoc(loc);
+            convert->setType(TType(EbtDouble, EvqTemporary));
+            node = convert;
+            
+            break;
+        }
+        
     case EOpF16tof32:
     case EOpF32tof16:
         {
@@ -1168,15 +1254,15 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
 
             if (arguments) {
                 // Make sure qualifications work for these arguments.
-                TIntermAggregate* aggregate = arguments->getAsAggregate();
-                for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
-                    // At this early point there is a slight ambiguity between whether an aggregate 'arguments'
-                    // is the single argument itself or its children are the arguments.  Only one argument
-                    // means take 'arguments' itself as the one argument.
-                    TIntermNode* arg = fnCandidate->getParamCount() == 1 ? arguments : (aggregate ? aggregate->getSequence()[i] : arguments);
-                    TQualifier& formalQualifier = (*fnCandidate)[i].type->getQualifier();
-                    TQualifier& argQualifier = arg->getAsTyped()->getQualifier();
-                }
+                //TIntermAggregate* aggregate = arguments->getAsAggregate();
+                //for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
+                //    // At this early point there is a slight ambiguity between whether an aggregate 'arguments'
+                //    // is the single argument itself or its children are the arguments.  Only one argument
+                //    // means take 'arguments' itself as the one argument.
+                //    TIntermNode* arg = fnCandidate->getParamCount() == 1 ? arguments : (aggregate ? aggregate->getSequence()[i] : arguments);
+                //    TQualifier& formalQualifier = (*fnCandidate)[i].type->getQualifier();
+                //    TQualifier& argQualifier = arg->getAsTyped()->getQualifier();
+                //}
 
                 // Convert 'in' arguments
                 addInputArgumentConversions(*fnCandidate, arguments);  // arguments may be modified if it's just a single argument node
@@ -1222,6 +1308,7 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct
             }
 
             decomposeIntrinsic(loc, result, arguments);
+            textureParameters(loc, result, arguments);
         }
     }
 
@@ -1808,7 +1895,7 @@ void HlslParseContext::globalCheck(const TSourceLoc& loc, const char* token)
 }
 
 
-bool HlslParseContext::builtInName(const TString& identifier)
+bool HlslParseContext::builtInName(const TString& /*identifier*/)
 {
     return false;
 }
@@ -1820,7 +1907,8 @@ bool HlslParseContext::builtInName(const TString& identifier)
 //
 // Returns true if there was an error in construction.
 //
-bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, TFunction& function, TOperator op, TType& type)
+bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* /*node*/, TFunction& function,
+                                        TOperator op, TType& type)
 {
     type.shallowCopy(function.getType());
 
@@ -1956,7 +2044,7 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node
         return true;
     }
 
-    TIntermTyped* typed = node->getAsTyped();
+    // TIntermTyped* typed = node->getAsTyped();
 
     return false;
 }
@@ -2045,7 +2133,7 @@ void HlslParseContext::boolCheck(const TSourceLoc& loc, const TIntermTyped* type
 //
 // Fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level.
 //
-void HlslParseContext::globalQualifierFix(const TSourceLoc& loc, TQualifier& qualifier)
+void HlslParseContext::globalQualifierFix(const TSourceLoc&, TQualifier& qualifier)
 {
     // move from parameter/unknown qualifiers to pipeline in/out qualifiers
     switch (qualifier.storage) {
@@ -2311,7 +2399,9 @@ void HlslParseContext::updateImplicitArraySize(const TSourceLoc& loc, TIntermNod
 //
 // Returns a redeclared and type-modified variable if a redeclared occurred.
 //
-TSymbol* HlslParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TString& identifier, const TQualifier& qualifier, const TShaderQualifiers& publicType, bool& newDeclaration)
+TSymbol* HlslParseContext::redeclareBuiltinVariable(const TSourceLoc& /*loc*/, const TString& identifier,
+                                                    const TQualifier& /*qualifier*/,
+                                                    const TShaderQualifiers& /*publicType*/, bool& /*newDeclaration*/)
 {
     if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
         return nullptr;
@@ -2611,7 +2701,7 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& pu
 void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publicType, TString& id, const TIntermTyped* node)
 {
     const char* feature = "layout-id value";
-    const char* nonLiteralFeature = "non-literal layout-id value";
+    //const char* nonLiteralFeature = "non-literal layout-id value";
 
     integerCheck(node, feature);
     const TIntermConstantUnion* constUnion = node->getAsConstantUnion();
@@ -2751,7 +2841,6 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& pu
 
     case EShLangFragment:
         if (id == "index") {
-            const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
             publicType.qualifier.layoutIndex = value;
             return;
         }
@@ -2866,7 +2955,7 @@ void HlslParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQuali
 //
 const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn)
 {
-    const TFunction* function = nullptr;
+    // const TFunction* function = nullptr;
 
     if (symbolTable.isFunctionNameVariable(call.getName())) {
         error(loc, "can't use function syntax on variable", call.getName().c_str(), "");
@@ -2932,6 +3021,27 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu
 }
 
 //
+// Do everything necessary to handle a typedef declaration, for a single symbol.
+// 
+// 'parseType' is the type part of the declaration (to the left)
+// 'arraySizes' is the arrayness tagged on the identifier (to the right)
+//
+void HlslParseContext::declareTypedef(const TSourceLoc& loc, TString& identifier, const TType& parseType, TArraySizes* arraySizes)
+{
+    TType type;
+    type.deepCopy(parseType);
+
+    // Arrayness is potentially coming both from the type and from the 
+    // variable: "int[] a[];" or just one or the other.
+    // Merge it all to the type, so all arrayness is part of the type.
+    arrayDimMerge(type, arraySizes);
+
+    TVariable* typeSymbol = new TVariable(&identifier, type, true);
+    if (! symbolTable.insert(*typeSymbol))
+        error(loc, "name already defined", "typedef", identifier.c_str());
+}
+
+//
 // Do everything necessary to handle a variable (non-block) declaration.
 // Either redeclaring a variable, or making a new one, updating the symbol
 // table, and all error checking.
@@ -2939,7 +3049,7 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, const TFu
 // Returns a subtree node that computes an initializer, if needed.
 // Returns nullptr if there is no code to execute for initialization.
 //
-// 'publicType' is the type part of the declaration (to the left)
+// 'parseType' is the type part of the declaration (to the left)
 // 'arraySizes' is the arrayness tagged on the identifier (to the right)
 //
 TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& identifier, const TType& parseType, TArraySizes* arraySizes, TIntermTyped* initializer)
@@ -2949,7 +3059,7 @@ TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& i
     if (type.isImplicitlySizedArray()) {
         // Because "int[] a = int[2](...), b = int[3](...)" makes two arrays a and b
         // of different sizes, for this case sharing the shallow copy of arrayness
-        // with the publicType oversubscribes it, so get a deep copy of the arrayness.
+        // with the parseType oversubscribes it, so get a deep copy of the arrayness.
         type.newArraySizes(*parseType.getArraySizes());
     }
 
@@ -2958,7 +3068,7 @@ TIntermNode* HlslParseContext::declareVariable(const TSourceLoc& loc, TString& i
 
     // Check for redeclaration of built-ins and/or attempting to declare a reserved name
     bool newDeclaration = false;    // true if a new entry gets added to the symbol table
-    TSymbol* symbol = nullptr; // = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers, newDeclaration);
+    TSymbol* symbol = nullptr; // = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), parseType.shaderQualifiers, newDeclaration);
 
     inheritGlobalDefaults(type.getQualifier());
 
@@ -3758,7 +3868,7 @@ void HlslParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc,
 {
     if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) {
         assert(language == EShLangTessControl || language == EShLangGeometry);
-        const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices";
+        // const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices";
 
         if (language == EShLangTessControl)
             checkIoArraysConsistency(loc);
@@ -3876,8 +3986,6 @@ void HlslParseContext::wrapupSwitchSubsequence(TIntermAggregate* statements, TIn
     TIntermSequence* switchSequence = switchSequenceStack.back();
 
     if (statements) {
-        if (switchSequence->size() == 0)
-            error(statements->getLoc(), "cannot have statements before first case/default label", "switch", "");
         statements->setOperator(EOpSequence);
         switchSequence->push_back(statements);
     }
index dd97e49..ed1955e 100755 (executable)
@@ -60,8 +60,8 @@ public:
     void C_DECL ppWarn(const TSourceLoc&, const char* szReason, const char* szToken,
         const char* szExtraInfoFormat, ...);
 
-    void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op) { }
-    bool lineContinuationCheck(const TSourceLoc&, bool endOfComment) { return true; }
+    void reservedPpErrorCheck(const TSourceLoc&, const char* /*name*/, const char* /*op*/) { }
+    bool lineContinuationCheck(const TSourceLoc&, bool /*endOfComment*/) { return true; }
     bool lineDirectiveShouldSetNextLine() const { return true; }
     bool builtInName(const TString&);
 
@@ -87,6 +87,7 @@ public:
     void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg);
     TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
     void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
+    void textureParameters(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
     TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*);
     void addInputArgumentConversions(const TFunction&, TIntermNode*&) const;
     TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&) const;
@@ -125,6 +126,7 @@ public:
     void checkNoShaderLayouts(const TSourceLoc&, const TShaderQualifiers&);
 
     const TFunction* findFunction(const TSourceLoc& loc, const TFunction& call, bool& builtIn);
+    void declareTypedef(const TSourceLoc&, TString& identifier, const TType&, TArraySizes* typeArray = 0);
     TIntermNode* declareVariable(const TSourceLoc&, TString& identifier, const TType&, TArraySizes* typeArray = 0, TIntermTyped* initializer = 0);
     TIntermTyped* addConstructor(const TSourceLoc&, TIntermNode*, const TType&, TOperator);
     TIntermTyped* constructAggregate(TIntermNode*, const TType&, int, const TSourceLoc&);
@@ -146,6 +148,9 @@ public:
     void pushScope()       { symbolTable.push(); }
     void popScope()        { symbolTable.pop(0); }
 
+    void pushSwitchSequence(TIntermSequence* sequence) { switchSequenceStack.push_back(sequence); }
+    void popSwitchSequence() { switchSequenceStack.pop_back(); }
+
 protected:
     void inheritGlobalDefaults(TQualifier& dst) const;
     TVariable* makeInternalVariable(const char* name, const TType&) const;
@@ -165,7 +170,6 @@ protected:
     int structNestingLevel;      // 0 if outside blocks and structures
     int controlFlowNestingLevel; // 0 if outside all flow control
     TList<TIntermSequence*> switchSequenceStack;  // case, node, case, case, node, ...; ensure only one node between cases;   stack of them for nesting
-    TList<int> switchLevel;      // the statementNestingLevel the current switch statement is at, which must match the level of its case statements
     bool inEntrypoint;           // if inside a function, true if the function is the entry point
     bool postMainReturn;         // if inside a function, true if the function is the entry point and this is after a return statement
     const TType* currentFunctionType;  // the return type of the function that's currently being parsed
index cf8574c..b454d4b 100755 (executable)
@@ -54,6 +54,8 @@
 
 namespace {  // anonymous namespace functions
 
+const bool UseHlslTypes = false;
+
 const char* BaseTypeName(const char* argOrder, const char* scalarName, const char* vecName, const char* matName)
 {
     switch (*argOrder) {
@@ -74,22 +76,38 @@ const char* BaseTypeName(const char* argOrder, const char* scalarName, const cha
 glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, const char* argType, int dim0, int dim1)
 {
     const bool transpose = (argOrder[0] == '^');
+    const bool matMul    = (argOrder[0] == '#');
 
-    // Take transpose of matrix dimensions
-    if (transpose) {
-        std::swap(dim0, dim1);
+    if (transpose) {  // Take transpose of matrix dimensions
+        std::swap(dim0, dim1); 
+        ++argOrder;
+    } else if (matMul) {
+        dim0 = dim1;  // set vector dimension to mat col
         ++argOrder;
     }
 
-    switch (*argType) {
-    case '-': s += "void"; break;
-    case 'F': s += BaseTypeName(argOrder, "float",   "vec",     "mat");  break;
-    case 'D': s += BaseTypeName(argOrder, "double",  "dvec",    "dmat"); break;
-    case 'I': s += BaseTypeName(argOrder, "int",     "ivec",    "imat"); break;
-    case 'U': s += BaseTypeName(argOrder, "uint",    "uvec",    "umat"); break;
-    case 'B': s += BaseTypeName(argOrder, "bool",    "bvec",    "bmat"); break;
-    case 'S': s += BaseTypeName(argOrder, "sampler", "sampler", "sampler"); break; // TODO: 
-    default:  s += "UNKNOWN_TYPE"; break;
+    if (UseHlslTypes) {
+        switch (*argType) {
+        case '-': s += "void";    break;
+        case 'F': s += "float";   break;
+        case 'D': s += "double";  break;
+        case 'I': s += "int";     break;
+        case 'U': s += "uint";    break;
+        case 'B': s += "bool";    break;
+        case 'S': s += "sampler"; break;
+        default:  s += "UNKNOWN_TYPE"; break;
+        }
+    } else {
+        switch (*argType) {
+        case '-': s += "void"; break;
+        case 'F': s += BaseTypeName(argOrder, "float",   "vec",     "mat");  break;
+        case 'D': s += BaseTypeName(argOrder, "double",  "dvec",    "dmat"); break;
+        case 'I': s += BaseTypeName(argOrder, "int",     "ivec",    "imat"); break;
+        case 'U': s += BaseTypeName(argOrder, "uint",    "uvec",    "umat"); break;
+        case 'B': s += BaseTypeName(argOrder, "bool",    "bvec",    "bmat"); break;
+        case 'S': s += BaseTypeName(argOrder, "sampler", "sampler", "sampler"); break; // TODO: 
+        default:  s += "UNKNOWN_TYPE"; break;
+        }
     }
 
     // handle fixed vector sizes, such as float3, and only ever 3.
@@ -118,8 +136,16 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
     switch (*argOrder) {
     case '-': break;  // no dimensions for voids
     case 'S': break;  // no dimensions on scalars
-    case 'V': s += ('0' + dim0); break;
-    case 'M': s += ('0' + dim0); s += 'x'; s += ('0' + dim1); break;
+    case 'V': s += ('0' + (char)dim0); break;
+    case 'M': 
+        {
+            if (!UseHlslTypes)  // GLSL has column first for mat types
+                std::swap(dim0, dim1);
+            s += ('0' + (char)dim0);
+            s += 'x';
+            s += ('0' + (char)dim1);
+            break;
+        }
     }
 
     return s;
@@ -128,21 +154,19 @@ glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, cons
 // TODO: the GLSL parser is currently used to parse HLSL prototypes.  However, many valid HLSL prototypes
 // are not valid GLSL prototypes.  This rejects the invalid ones.  Thus, there is a single switch below
 // to enable creation of the entire HLSL space.
-inline bool IsValidGlsl(const char* cname, char retOrder, char retType, char argOrder, char argType,
+inline bool IsValidGlsl(const char* cname, char retOrder, char retType, char /*argOrder*/, char argType,
                         int dim0, int dim1, int dim0Max, int dim1Max)
 {
     const bool isVec = dim0Max > 1 || argType == 'V';
     const bool isMat = dim1Max > 1 || argType == 'M';
 
-    if (argType == 'D'                  ||  // avoid double args
-        retType == 'D'                  ||  // avoid double return
-        (isVec && dim0 == 1)            ||  // avoid vec1
+    if ((isVec && dim0 == 1)            ||  // avoid vec1
         (isMat && dim0 == 1 && dim1 == 1))  // avoid mat1x1
         return false;
 
     const std::string name(cname);  // for ease of comparison. slow, but temporary, until HLSL parser is online.
                                 
-    if (isMat && dim0 != dim1)  // TODO: avoid mats until we find the right GLSL profile
+    if (isMat && dim1 == 1)  // TODO: avoid mat Nx1 until we find the right GLSL profile
         return false;
 
     if (isMat && (argType == 'I' || argType == 'U' || argType == 'B') ||
@@ -186,7 +210,7 @@ inline const char* NthArg(const char* arg, int n)
     return arg;
 }
 
-inline void FindVectorMatrixBounds(const char* argOrder, int fixedVecSize, int& dim0Min, int& dim0Max, int& dim1Min, int& dim1Max)
+inline void FindVectorMatrixBounds(const char* argOrder, int fixedVecSize, int& dim0Min, int& dim0Max, int& /*dim1Min*/, int& dim1Max)
 {
     for (int arg = 0; ; ++arg) {
         const char* nthArgOrder(NthArg(argOrder, arg));
@@ -210,6 +234,39 @@ TBuiltInParseablesHlsl::TBuiltInParseablesHlsl()
 {
 }
 
+
+//
+// Handle creation of mat*mat specially, since it doesn't fall conveniently out of
+// the generic prototype creation code below.
+//
+void TBuiltInParseablesHlsl::createMatTimesMat()
+{
+    TString& s = commonBuiltins;
+
+    const int first = (UseHlslTypes ? 1 : 2);
+
+    for (int xRows = first; xRows <=4; xRows++) {
+        for (int xCols = first; xCols <=4; xCols++) {
+            const int yRows = xCols;
+            for (int yCols = first; yCols <=4; yCols++) {
+                const int retRows = xRows;
+                const int retCols = yCols;
+
+                AppendTypeName(s, "M", "F", retRows, retCols);  // add return type
+                s.append(" ");                                  // space between type and name
+                s.append("mul");                                // intrinsic name
+                s.append("(");                                  // open paren
+
+                AppendTypeName(s, "M", "F", xRows, xCols);      // add X input
+                s.append(", ");
+                AppendTypeName(s, "M", "F", yRows, yCols);      // add Y input
+
+                s.append(");\n");                               // close paren
+            }
+        }
+    }
+}
+
 //
 // Add all context-independent built-in functions and variables that are present
 // for the given version and profile.  Share common ones across stages, otherwise
@@ -218,7 +275,7 @@ TBuiltInParseablesHlsl::TBuiltInParseablesHlsl()
 // Most built-ins variables can be added as simple text strings.  Some need to
 // be added programmatically, which is done later in IdentifyBuiltIns() below.
 //
-void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, const SpvVersion& spvVersion)
+void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, const SpvVersion& /*spvVersion*/)
 {
     static const EShLanguageMask EShLangAll = EShLanguageMask(EShLangCount - 1);
 
@@ -232,6 +289,7 @@ void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, const Spv
     // '>' as first letter of order creates an output parameter
     // '<' as first letter of order creates an input parameter
     // '^' as first letter of order takes transpose dimensions
+    // '#' as first letter of order sets rows=cols for mats
 
     static const struct {
         const char*   name;      // intrinsic name
@@ -321,6 +379,7 @@ void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, const Spv
         { "isnan",                            nullptr, "B" ,      "SVM",        "F",      EShLangAll },
         { "ldexp",                            nullptr, nullptr,   "SVM,",       "F,",     EShLangAll },
         { "length",                           "S",     "F",       "V",          "F",      EShLangAll },
+        { "lerp",                             nullptr, nullptr,   "SVM,,",      "F,,",    EShLangAll },
         { "lit",                              "V4",    "F",       "S,,",        "F,,",    EShLangAll },
         { "log",                              nullptr, nullptr,   "SVM",        "F",      EShLangAll },
         { "log10",                            nullptr, nullptr,   "SVM",        "F",      EShLangAll },
@@ -330,16 +389,15 @@ void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, const Spv
         { "min",                              nullptr, nullptr,   "SVM,",       "FI,",    EShLangAll },
         { "modf",                             nullptr, nullptr,   "SVM,>",      "FI,",    EShLangAll },
         { "msad4",                            "V4",    "U",       "S,V2,V4",    "U,,",    EShLangAll },
-        // TODO: fix matrix return size for non-square mats used with mul opcode
         { "mul",                              "S",     nullptr,   "S,S",        "FI,",    EShLangAll },
         { "mul",                              "V",     nullptr,   "S,V",        "FI,",    EShLangAll },
         { "mul",                              "M",     nullptr,   "S,M",        "FI,",    EShLangAll },
         { "mul",                              "V",     nullptr,   "V,S",        "FI,",    EShLangAll },
         { "mul",                              "S",     nullptr,   "V,V",        "FI,",    EShLangAll },
-        { "mul",                              "V",     nullptr,   "V,M",        "FI,",    EShLangAll },
+        { "mul",                              "#V",    nullptr,   "V,M",        "FI,",    EShLangAll },
         { "mul",                              "M",     nullptr,   "M,S",        "FI,",    EShLangAll },
-        { "mul",                              "V",     nullptr,   "M,V",        "FI,",    EShLangAll },
-        { "mul",                              "M",     nullptr,   "M,M",        "FI,",    EShLangAll },
+        { "mul",                              "V",     nullptr,   "M,#V",       "FI,",    EShLangAll },
+        // mat*mat form of mul is handled in createMatTimesMat()
         { "noise",                            "S",     "F",       "V",          "F",      EShLangFragmentMask },
         { "normalize",                        nullptr, nullptr,   "V",          "F",      EShLangAll },
         { "pow",                              nullptr, nullptr,   "SVM,",       "F,",     EShLangAll },
@@ -465,7 +523,7 @@ void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, const Spv
                                 if (*nthArgOrder == ',' || *nthArgOrder == '\0') nthArgOrder = argOrder;
                                 if (*nthArgType == ',' || *nthArgType == '\0') nthArgType = argType;
 
-                                AppendTypeName(s, nthArgOrder, nthArgType, dim0, dim1); // Add first argument
+                                AppendTypeName(s, nthArgOrder, nthArgType, dim0, dim1); // Add arguments
                             }
                             
                             s.append(");\n");            // close paren and trailing semicolon
@@ -482,6 +540,8 @@ void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, const Spv
         }
     }
 
+    createMatTimesMat(); // handle this case separately, for convenience
+
     // printf("Common:\n%s\n",   getCommonString().c_str());
     // printf("Frag:\n%s\n",     getStageString(EShLangFragment).c_str());
     // printf("Vertex:\n%s\n",   getStageString(EShLangVertex).c_str());
@@ -498,8 +558,8 @@ void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, const Spv
 // add stage-specific entries to the commonBuiltins, and only if that stage
 // was requested.
 //
-void TBuiltInParseablesHlsl::initialize(const TBuiltInResource &resources, int version, EProfile profile,
-                                        const SpvVersion& spvVersion, EShLanguage language)
+void TBuiltInParseablesHlsl::initialize(const TBuiltInResource& /*resources*/, int /*version*/, EProfile /*profile*/,
+                                        const SpvVersion& /*spvVersion*/, EShLanguage /*language*/)
 {
 }
 
@@ -512,7 +572,7 @@ void TBuiltInParseablesHlsl::initialize(const TBuiltInResource &resources, int v
 // 3) Tag extension-related symbols added to their base version with their extensions, so
 //    that if an early version has the extension turned off, there is an error reported on use.
 //
-void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
+void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profile*/, const SpvVersion& /*spvVersion*/, EShLanguage /*language*/,
                                               TSymbolTable& symbolTable)
 {
     // symbolTable.relateToOperator("abort",                       EOpAbort);
@@ -522,7 +582,7 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, con
     symbolTable.relateToOperator("AllMemoryBarrier",            EOpMemoryBarrier);
     symbolTable.relateToOperator("AllMemoryBarrierWithGroupSync", EOpAllMemoryBarrierWithGroupSync);
     symbolTable.relateToOperator("any",                         EOpAny);
-    symbolTable.relateToOperator("asdouble",                    EOpUint64BitsToDouble);
+    symbolTable.relateToOperator("asdouble",                    EOpAsDouble);
     symbolTable.relateToOperator("asfloat",                     EOpIntBitsToFloat);
     symbolTable.relateToOperator("asin",                        EOpAsin);
     symbolTable.relateToOperator("asint",                       EOpFloatBitsToInt);
@@ -586,11 +646,12 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, con
     symbolTable.relateToOperator("isnan",                       EOpIsNan);
     symbolTable.relateToOperator("ldexp",                       EOpLdexp);
     symbolTable.relateToOperator("length",                      EOpLength);
+    symbolTable.relateToOperator("lerp",                        EOpMix);
     symbolTable.relateToOperator("lit",                         EOpLit);
     symbolTable.relateToOperator("log",                         EOpLog);
     symbolTable.relateToOperator("log10",                       EOpLog10);
     symbolTable.relateToOperator("log2",                        EOpLog2);
-    // symbolTable.relateToOperator("mad");
+    symbolTable.relateToOperator("mad",                         EOpFma);
     symbolTable.relateToOperator("max",                         EOpMax);
     symbolTable.relateToOperator("min",                         EOpMin);
     symbolTable.relateToOperator("modf",                        EOpModf);
@@ -628,25 +689,25 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, con
     symbolTable.relateToOperator("tan",                         EOpTan);
     symbolTable.relateToOperator("tanh",                        EOpTanh);
     symbolTable.relateToOperator("tex1D",                       EOpTexture);
-    // symbolTable.relateToOperator("tex1Dbias",                  // TODO:
+    symbolTable.relateToOperator("tex1Dbias",                   EOpTextureBias);
     symbolTable.relateToOperator("tex1Dgrad",                   EOpTextureGrad);
     symbolTable.relateToOperator("tex1Dlod",                    EOpTextureLod);
     symbolTable.relateToOperator("tex1Dproj",                   EOpTextureProj);
     symbolTable.relateToOperator("tex2D",                       EOpTexture);
-    // symbolTable.relateToOperator("tex2Dbias",                  // TODO:
+    symbolTable.relateToOperator("tex2Dbias",                   EOpTextureBias);
     symbolTable.relateToOperator("tex2Dgrad",                   EOpTextureGrad);
     symbolTable.relateToOperator("tex2Dlod",                    EOpTextureLod);
-    // symbolTable.relateToOperator("tex2Dproj",                   EOpTextureProj);
+    symbolTable.relateToOperator("tex2Dproj",                   EOpTextureProj);
     symbolTable.relateToOperator("tex3D",                       EOpTexture);
-    // symbolTable.relateToOperator("tex3Dbias");                // TODO
+    symbolTable.relateToOperator("tex3Dbias",                   EOpTextureBias);
     symbolTable.relateToOperator("tex3Dgrad",                   EOpTextureGrad);
     symbolTable.relateToOperator("tex3Dlod",                    EOpTextureLod);
-    // symbolTable.relateToOperator("tex3Dproj",                   EOpTextureProj);
+    symbolTable.relateToOperator("tex3Dproj",                   EOpTextureProj);
     symbolTable.relateToOperator("texCUBE",                     EOpTexture);
-    // symbolTable.relateToOperator("texCUBEbias",              // TODO
+    symbolTable.relateToOperator("texCUBEbias",                 EOpTextureBias);
     symbolTable.relateToOperator("texCUBEgrad",                 EOpTextureGrad);
     symbolTable.relateToOperator("texCUBElod",                  EOpTextureLod);
-    // symbolTable.relateToOperator("texCUBEproj",                 EOpTextureProj);
+    symbolTable.relateToOperator("texCUBEproj",                 EOpTextureProj);
     symbolTable.relateToOperator("transpose",                   EOpTranspose);
     symbolTable.relateToOperator("trunc",                       EOpTrunc);
 }
@@ -660,8 +721,8 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, con
 // 2) Tag extension-related symbols added to their base version with their extensions, so
 //    that if an early version has the extension turned off, there is an error reported on use.
 //
-void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language,
-                                              TSymbolTable& symbolTable, const TBuiltInResource &resources)
+void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profile*/, const SpvVersion& /*spvVersion*/, EShLanguage /*language*/,
+                                              TSymbolTable& /*symbolTable*/, const TBuiltInResource& /*resources*/)
 {
 }
 
index f03e64d..c837590 100755 (executable)
@@ -54,6 +54,9 @@ public:
     void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable);
     
     void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources);
+
+private:
+    void createMatTimesMat();
 };
 
 } // end namespace glslang
index 83365c4..12c2a2a 100755 (executable)
@@ -57,6 +57,9 @@ namespace glslang {
         HlslToken token;                  // the token we are currently looking at, but have not yet accepted
 
     private:
+        HlslTokenStream();
+        HlslTokenStream& operator=(const HlslTokenStream&);
+
         HlslScanContext& scanner;         // lexical scanner, to get next token
 
         // Previously scanned tokens, returned for future advances,