Răsfoiți Sursa

Updated glslang.

Бранимир Караџић 6 ani în urmă
părinte
comite
15a4bcda82
100 a modificat fișierele cu 542 adăugiri și 354 ștergeri
  1. 2 0
      3rdparty/glslang/BUILD.gn
  2. 8 3
      3rdparty/glslang/CMakeLists.txt
  3. 5 4
      3rdparty/glslang/SPIRV/GlslangToSpv.cpp
  4. 31 13
      3rdparty/glslang/SPIRV/InReadableOrder.cpp
  5. 1 3
      3rdparty/glslang/SPIRV/SpvBuilder.h
  6. 33 16
      3rdparty/glslang/SPIRV/SpvPostProcess.cpp
  7. 48 3
      3rdparty/glslang/SPIRV/spvIR.h
  8. 1 1
      3rdparty/glslang/StandAlone/StandAlone.cpp
  9. 1 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
  10. 1 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
  11. 1 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
  12. 1 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
  13. 1 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out
  14. 1 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset2.frag.out
  15. 1 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out
  16. 1 1
      3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out
  17. 1 1
      3rdparty/glslang/Test/baseResults/compoundsuffix.frag.hlsl
  18. 1 1
      3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.bad.out
  19. 1 1
      3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.out
  20. 1 1
      3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out
  21. 1 1
      3rdparty/glslang/Test/baseResults/glspv.version.frag.out
  22. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.PointSize.geom.out
  23. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.PointSize.vert.out
  24. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out
  25. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out
  26. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out
  27. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.array.frag.out
  28. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out
  29. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out
  30. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out
  31. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out
  32. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out
  33. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out
  34. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
  35. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out
  36. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out
  37. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.boolConv.vert.out
  38. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out
  39. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out
  40. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
  41. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out
  42. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.cbuffer-identifier.vert.out
  43. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.charLit.vert.out
  44. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clip.frag.out
  45. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.frag.out
  46. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.geom.out
  47. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out
  48. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.frag.out
  49. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.geom.out
  50. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out
  51. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.frag.out
  52. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.geom.out
  53. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.vert.out
  54. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.frag.out
  55. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.geom.out
  56. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out
  57. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.frag.out
  58. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out
  59. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.frag.out
  60. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.vert.out
  61. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.frag.out
  62. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.vert.out
  63. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.frag.out
  64. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.vert.out
  65. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.frag.out
  66. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.vert.out
  67. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.color.hull.tesc.out
  68. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out
  69. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out
  70. 2 3
      3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out
  71. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.constructArray.vert.out
  72. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out
  73. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out
  74. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.coverage.frag.out
  75. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out
  76. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out
  77. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out
  78. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out
  79. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out
  80. 321 218
      3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out
  81. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.domain.1.tese.out
  82. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.domain.2.tese.out
  83. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.domain.3.tese.out
  84. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.earlydepthstencil.frag.out
  85. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.emptystruct.init.vert.out
  86. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out
  87. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out
  88. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out
  89. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out
  90. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out
  91. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
  92. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
  93. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out
  94. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out
  95. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
  96. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
  97. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out
  98. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out
  99. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out
  100. 1 1
      3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out

+ 2 - 0
3rdparty/glslang/BUILD.gn

@@ -60,8 +60,10 @@ source_set("glslang_sources") {
   sources = [
     "OGLCompilersDLL/InitializeDll.cpp",
     "OGLCompilersDLL/InitializeDll.h",
+    "SPIRV/GLSL.ext.AMD.h",
     "SPIRV/GLSL.ext.EXT.h",
     "SPIRV/GLSL.ext.KHR.h",
+    "SPIRV/GLSL.ext.NV.h",
     "SPIRV/GLSL.std.450.h",
     "SPIRV/GlslangToSpv.cpp",
     "SPIRV/GlslangToSpv.h",

+ 8 - 3
3rdparty/glslang/CMakeLists.txt

@@ -41,6 +41,7 @@ CMAKE_DEPENDENT_OPTION(ENABLE_HLSL "Enables HLSL input support" ON "NOT ENABLE_G
 
 option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
 option(ENABLE_PCH "Enables Precompiled header" ON)
+option(ENABLE_CTEST "Enables testing" ON)
 
 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32)
     set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE)
@@ -67,8 +68,10 @@ macro(glslang_pch SRCS PCHCPP)
 endmacro(glslang_pch)
 
 project(glslang)
-# make testing optional
-include(CTest)
+
+if(ENABLE_CTEST)
+    include(CTest)
+endif()
 
 if(ENABLE_HLSL)
     add_definitions(-DENABLE_HLSL)
@@ -183,7 +186,9 @@ add_subdirectory(SPIRV)
 if(ENABLE_HLSL)
     add_subdirectory(hlsl)
 endif(ENABLE_HLSL)
-add_subdirectory(gtests)
+if(ENABLE_CTEST)
+    add_subdirectory(gtests)
+endif()
 
 if(BUILD_TESTING)
     # glslang-testsuite runs a bash script on Windows.

+ 5 - 4
3rdparty/glslang/SPIRV/GlslangToSpv.cpp

@@ -1630,11 +1630,11 @@ void TGlslangToSpvTraverser::finishSpv()
     for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it)
         entryPoint->addIdOperand(*it);
 
-#ifndef GLSLANG_WEB
-    // Add capabilities, extensions, remove unneeded decorations, etc., 
+    // Add capabilities, extensions, remove unneeded decorations, etc.,
     // based on the resulting SPIR-V.
+    // Note: WebGPU code generation must have the opportunity to aggressively
+    // prune unreachable merge blocks and continue targets.
     builder.postProcess();
-#endif
 }
 
 // Write the SPV into 'out'.
@@ -8197,7 +8197,8 @@ int GetSpirvGeneratorVersion()
     // return 5; // make OpArrayLength result type be an int with signedness of 0
     // return 6; // revert version 5 change, which makes a different (new) kind of incorrect code,
                  // versions 4 and 6 each generate OpArrayLength as it has long been done
-    return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent
+    // return 7; // GLSL volatile keyword maps to both SPIR-V decorations Volatile and Coherent
+    return 8; // switch to new dead block eliminator; use OpUnreachable
 }
 
 // Write SPIR-V out to a binary file

+ 31 - 13
3rdparty/glslang/SPIRV/InReadableOrder.cpp

@@ -61,17 +61,22 @@ namespace {
 // Use by calling visit() on the root block.
 class ReadableOrderTraverser {
 public:
-    explicit ReadableOrderTraverser(std::function<void(Block*)> callback) : callback_(callback) {}
+    ReadableOrderTraverser(std::function<void(Block*, spv::ReachReason, Block*)> callback)
+      : callback_(callback) {}
     // Visits the block if it hasn't been visited already and isn't currently
-    // being delayed.  Invokes callback(block), then descends into its
+    // being delayed.  Invokes callback(block, why, header), then descends into its
     // successors.  Delays merge-block and continue-block processing until all
-    // the branches have been completed.
-    void visit(Block* block)
+    // the branches have been completed.  If |block| is an unreachable merge block or
+    // an unreachable continue target, then |header| is the corresponding header block.
+    void visit(Block* block, spv::ReachReason why, Block* header)
     {
         assert(block);
+        if (why == spv::ReachViaControlFlow) {
+            reachableViaControlFlow_.insert(block);
+        }
         if (visited_.count(block) || delayed_.count(block))
             return;
-        callback_(block);
+        callback_(block, why, header);
         visited_.insert(block);
         Block* mergeBlock = nullptr;
         Block* continueBlock = nullptr;
@@ -87,27 +92,40 @@ public:
                 delayed_.insert(continueBlock);
             }
         }
-        const auto successors = block->getSuccessors();
-        for (auto it = successors.cbegin(); it != successors.cend(); ++it)
-            visit(*it);
+        if (why == spv::ReachViaControlFlow) {
+            const auto& successors = block->getSuccessors();
+            for (auto it = successors.cbegin(); it != successors.cend(); ++it)
+                visit(*it, why, nullptr);
+        }
         if (continueBlock) {
+            const spv::ReachReason continueWhy =
+                (reachableViaControlFlow_.count(continueBlock) > 0)
+                    ? spv::ReachViaControlFlow
+                    : spv::ReachDeadContinue;
             delayed_.erase(continueBlock);
-            visit(continueBlock);
+            visit(continueBlock, continueWhy, block);
         }
         if (mergeBlock) {
+            const spv::ReachReason mergeWhy =
+                (reachableViaControlFlow_.count(mergeBlock) > 0)
+                    ? spv::ReachViaControlFlow
+                    : spv::ReachDeadMerge;
             delayed_.erase(mergeBlock);
-            visit(mergeBlock);
+            visit(mergeBlock, mergeWhy, block);
         }
     }
 
 private:
-    std::function<void(Block*)> callback_;
+    std::function<void(Block*, spv::ReachReason, Block*)> callback_;
     // Whether a block has already been visited or is being delayed.
     std::unordered_set<Block *> visited_, delayed_;
+
+    // The set of blocks that actually are reached via control flow.
+    std::unordered_set<Block *> reachableViaControlFlow_;
 };
 }
 
-void spv::inReadableOrder(Block* root, std::function<void(Block*)> callback)
+void spv::inReadableOrder(Block* root, std::function<void(Block*, spv::ReachReason, Block*)> callback)
 {
-    ReadableOrderTraverser(callback).visit(root);
+    ReadableOrderTraverser(callback).visit(root, spv::ReachViaControlFlow, nullptr);
 }

+ 1 - 3
3rdparty/glslang/SPIRV/SpvBuilder.h

@@ -683,14 +683,12 @@ public:
     // based on the type of the base and the chain of dereferences.
     Id accessChainGetInferredType();
 
-    // Add capabilities, extensions, remove unneeded decorations, etc., 
+    // Add capabilities, extensions, remove unneeded decorations, etc.,
     // based on the resulting SPIR-V.
     void postProcess();
 
     // Hook to visit each instruction in a block in a function
     void postProcess(Instruction&);
-    // Hook to visit each instruction in a reachable block in a function.
-    void postProcessReachable(const Instruction&);
     // Hook to visit each non-32-bit sized float/int operation in a block.
     void postProcessType(const Instruction&, spv::Id typeId);
 

+ 33 - 16
3rdparty/glslang/SPIRV/SpvPostProcess.cpp

@@ -39,6 +39,7 @@
 #include <cassert>
 #include <cstdlib>
 
+#include <unordered_map>
 #include <unordered_set>
 #include <algorithm>
 
@@ -319,16 +320,14 @@ void Builder::postProcess(Instruction& inst)
     }
 }
 
-// Called for each instruction in a reachable block.
-void Builder::postProcessReachable(const Instruction&)
-{
-    // did have code here, but questionable to do so without deleting the instructions
-}
-
 // comment in header
 void Builder::postProcess()
 {
+    // reachableBlocks is the set of blockss reached via control flow, or which are
+    // unreachable continue targert or unreachable merge.
     std::unordered_set<const Block*> reachableBlocks;
+    std::unordered_map<Block*, Block*> headerForUnreachableContinue;
+    std::unordered_set<Block*> unreachableMerges;
     std::unordered_set<Id> unreachableDefinitions;
     // Collect IDs defined in unreachable blocks. For each function, label the
     // reachable blocks first. Then for each unreachable block, collect the
@@ -336,16 +335,41 @@ void Builder::postProcess()
     for (auto fi = module.getFunctions().cbegin(); fi != module.getFunctions().cend(); fi++) {
         Function* f = *fi;
         Block* entry = f->getEntryBlock();
-        inReadableOrder(entry, [&reachableBlocks](const Block* b) { reachableBlocks.insert(b); });
+        inReadableOrder(entry,
+            [&reachableBlocks, &unreachableMerges, &headerForUnreachableContinue]
+            (Block* b, ReachReason why, Block* header) {
+               reachableBlocks.insert(b);
+               if (why == ReachDeadContinue) headerForUnreachableContinue[b] = header;
+               if (why == ReachDeadMerge) unreachableMerges.insert(b);
+            });
         for (auto bi = f->getBlocks().cbegin(); bi != f->getBlocks().cend(); bi++) {
             Block* b = *bi;
-            if (reachableBlocks.count(b) == 0) {
-                for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ii++)
+            if (unreachableMerges.count(b) != 0 || headerForUnreachableContinue.count(b) != 0) {
+                auto ii = b->getInstructions().cbegin();
+                ++ii; // Keep potential decorations on the label.
+                for (; ii != b->getInstructions().cend(); ++ii)
+                    unreachableDefinitions.insert(ii->get()->getResultId());
+            } else if (reachableBlocks.count(b) == 0) {
+                // The normal case for unreachable code.  All definitions are considered dead.
+                for (auto ii = b->getInstructions().cbegin(); ii != b->getInstructions().cend(); ++ii)
                     unreachableDefinitions.insert(ii->get()->getResultId());
             }
         }
     }
 
+    // Modify unreachable merge blocks and unreachable continue targets.
+    // Delete their contents.
+    for (auto mergeIter = unreachableMerges.begin(); mergeIter != unreachableMerges.end(); ++mergeIter) {
+        (*mergeIter)->rewriteAsCanonicalUnreachableMerge();
+    }
+    for (auto continueIter = headerForUnreachableContinue.begin();
+         continueIter != headerForUnreachableContinue.end();
+         ++continueIter) {
+        Block* continue_target = continueIter->first;
+        Block* header = continueIter->second;
+        continue_target->rewriteAsCanonicalUnreachableContinue(header);
+    }
+
     // Remove unneeded decorations, for unreachable instructions
     decorations.erase(std::remove_if(decorations.begin(), decorations.end(),
         [&unreachableDefinitions](std::unique_ptr<Instruction>& I) -> bool {
@@ -374,13 +398,6 @@ void Builder::postProcess()
         }
     }
 
-    // process all reachable instructions...
-    for (auto bi = reachableBlocks.cbegin(); bi != reachableBlocks.cend(); ++bi) {
-        const Block* block = *bi;
-        const auto function = [this](const std::unique_ptr<Instruction>& inst) { postProcessReachable(*inst.get()); };
-        std::for_each(block->getInstructions().begin(), block->getInstructions().end(), function);
-    }
-
     // process all block-contained instructions
     for (auto fi = module.getFunctions().cbegin(); fi != module.getFunctions().cend(); fi++) {
         Function* f = *fi;

+ 48 - 3
3rdparty/glslang/SPIRV/spvIR.h

@@ -226,6 +226,36 @@ public:
         return nullptr;
     }
 
+    // Change this block into a canonical dead merge block.  Delete instructions
+    // as necessary.  A canonical dead merge block has only an OpLabel and an
+    // OpUnreachable.
+    void rewriteAsCanonicalUnreachableMerge() {
+        assert(localVariables.empty());
+        // Delete all instructions except for the label.
+        assert(instructions.size() > 0);
+        instructions.resize(1);
+        successors.clear();
+        Instruction* unreachable = new Instruction(OpUnreachable);
+        addInstruction(std::unique_ptr<Instruction>(unreachable));
+    }
+    // Change this block into a canonical dead continue target branching to the
+    // given header ID.  Delete instructions as necessary.  A canonical dead continue
+    // target has only an OpLabel and an unconditional branch back to the corresponding
+    // header.
+    void rewriteAsCanonicalUnreachableContinue(Block* header) {
+        assert(localVariables.empty());
+        // Delete all instructions except for the label.
+        assert(instructions.size() > 0);
+        instructions.resize(1);
+        successors.clear();
+        // Add OpBranch back to the header.
+        assert(header != nullptr);
+        Instruction* branch = new Instruction(OpBranch);
+        branch->addIdOperand(header->getId());
+        addInstruction(std::move(std::unique_ptr<Instruction>(branch)));
+        successors.push_back(header);
+    }
+
     bool isTerminated() const
     {
         switch (instructions.back()->getOpCode()) {
@@ -235,6 +265,7 @@ public:
         case OpKill:
         case OpReturn:
         case OpReturnValue:
+        case OpUnreachable:
             return true;
         default:
             return false;
@@ -268,10 +299,24 @@ protected:
     bool unreachable;
 };
 
+// The different reasons for reaching a block in the inReadableOrder traversal.
+enum ReachReason {
+    // Reachable from the entry block via transfers of control, i.e. branches.
+    ReachViaControlFlow = 0,
+    // A continue target that is not reachable via control flow.
+    ReachDeadContinue,
+    // A merge block that is not reachable via control flow.
+    ReachDeadMerge
+};
+
 // Traverses the control-flow graph rooted at root in an order suited for
 // readable code generation.  Invokes callback at every node in the traversal
-// order.
-void inReadableOrder(Block* root, std::function<void(Block*)> callback);
+// order.  The callback arguments are:
+// - the block,
+// - the reason we reached the block,
+// - if the reason was that block is an unreachable continue or unreachable merge block
+//   then the last parameter is the corresponding header block.
+void inReadableOrder(Block* root, std::function<void(Block*, ReachReason, Block* header)> callback);
 
 //
 // SPIR-V IR Function.
@@ -321,7 +366,7 @@ public:
             parameterInstructions[p]->dump(out);
 
         // Blocks
-        inReadableOrder(blocks[0], [&out](const Block* b) { b->dump(out); });
+        inReadableOrder(blocks[0], [&out](const Block* b, ReachReason, Block*) { b->dump(out); });
         Instruction end(0, 0, OpFunctionEnd);
         end.dump(out);
     }

+ 1 - 1
3rdparty/glslang/StandAlone/StandAlone.cpp

@@ -988,7 +988,7 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
 
             // Set base bindings
             shader->setShiftBinding(res, baseBinding[res][compUnit.stage]);
-            
+
             // Set bindings for particular resource sets
             // TODO: use a range based for loop here, when available in all environments.
             for (auto i = baseBindingForSet[res][compUnit.stage].begin();

+ 1 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.aliasOpaque.frag.out

@@ -1,6 +1,6 @@
 hlsl.aliasOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 87
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaque.frag.out

@@ -1,6 +1,6 @@
 hlsl.flattenOpaque.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 185
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out

@@ -1,6 +1,6 @@
 hlsl.flattenOpaqueInit.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 134
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out

@@ -1,6 +1,6 @@
 hlsl.flattenOpaqueInitMix.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 97
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset.frag.out

@@ -1,6 +1,6 @@
 hlsl.flattenSubset.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.flattenSubset2.frag.out

@@ -1,6 +1,6 @@
 hlsl.flattenSubset2.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out

@@ -1,6 +1,6 @@
 hlsl.partialFlattenLocal.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 158
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseLegalResults/hlsl.partialFlattenMixed.vert.out

@@ -1,6 +1,6 @@
 hlsl.partialFlattenMixed.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/compoundsuffix.frag.hlsl

@@ -1,6 +1,6 @@
 compoundsuffix.frag.hlsl
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 22
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.bad.out

@@ -2,7 +2,7 @@ glsl.entryPointRename.vert
 ERROR: Source entry point must be "main"
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/glsl.entryPointRename.vert.out

@@ -1,6 +1,6 @@
 glsl.entryPointRename.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/glspv.esversion.vert.out

@@ -1,6 +1,6 @@
 glspv.esversion.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 10
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/glspv.version.frag.out

@@ -2,7 +2,7 @@ glspv.version.frag
 ERROR: #version: compilation for SPIR-V does not support the compatibility profile
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 6
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.PointSize.geom.out

@@ -71,7 +71,7 @@ output primitive = line_strip
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 36
 
                               Capability Geometry

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.PointSize.vert.out

@@ -38,7 +38,7 @@ Shader version: 500
 0:?     '@entryPointOutput' ( out float PointSize)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.aliasOpaque.frag.out

@@ -143,7 +143,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 64
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.amend.frag.out

@@ -160,7 +160,7 @@ gl_FragCoord origin is upper left
 0:?     'm' ( global 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.array.flatten.frag.out

@@ -345,7 +345,7 @@ gl_FragCoord origin is upper left
 0:?     'ps_output.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 143
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.array.frag.out

@@ -290,7 +290,7 @@ gl_FragCoord origin is upper left
 0:?     'input' (layout( location=1) in 3-element array of 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 126
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.array.implicit-size.frag.out

@@ -163,7 +163,7 @@ gl_FragCoord origin is upper left
 0:?     'g_mystruct' ( global 2-element array of structure{ temp int i,  temp float f})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.array.multidim.frag.out

@@ -134,7 +134,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.assoc.frag.out

@@ -132,7 +132,7 @@ gl_FragCoord origin is upper left
 0:?     'a5' (layout( location=4) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.attribute.expression.comp.out

@@ -82,7 +82,7 @@ local_size = (4, 6, 8)
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 39
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.attribute.frag.out

@@ -50,7 +50,7 @@ gl_FragCoord origin is upper left
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 24
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.attributeC11.frag.out

@@ -95,7 +95,7 @@ gl_FragCoord origin is upper left
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 51
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out

@@ -56,7 +56,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 28
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.basic.comp.out

@@ -64,7 +64,7 @@ local_size = (1, 1, 1)
 0:?     'gti' ( in 3-component vector of int LocalInvocationID)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 38
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.basic.geom.out

@@ -188,7 +188,7 @@ output primitive = line_strip
 0:?     'OutputStream.something' (layout( location=1) out int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 68
 
                               Capability Geometry

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.boolConv.vert.out

@@ -204,7 +204,7 @@ Shader version: 500
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 99
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.buffer.frag.out

@@ -147,7 +147,7 @@ gl_FragCoord origin is upper left
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.calculatelod.dx10.frag.out

@@ -358,7 +358,7 @@ using depth_any
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 148
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out

@@ -358,7 +358,7 @@ using depth_any
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 148
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.cast.frag.out

@@ -70,7 +70,7 @@ gl_FragCoord origin is upper left
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 34
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.cbuffer-identifier.vert.out

@@ -250,7 +250,7 @@ Shader version: 500
 0:?     'input.Norm' (layout( location=1) in 3-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 93
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.charLit.vert.out

@@ -146,7 +146,7 @@ Shader version: 500
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 58
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clip.frag.out

@@ -74,7 +74,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 30
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.frag.out

@@ -98,7 +98,7 @@ gl_FragCoord origin is upper left
 0:?     'cull' ( in 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.geom.out

@@ -550,7 +550,7 @@ output primitive = line_strip
 0:?     'OutputStream.clip' ( out 2-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 118
 
                               Capability Geometry

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-1.vert.out

@@ -108,7 +108,7 @@ Shader version: 500
 0:?     'cull' ( out 1-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 46
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.frag.out

@@ -290,7 +290,7 @@ gl_FragCoord origin is upper left
 0:?     'cull' ( in 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 84
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.geom.out

@@ -724,7 +724,7 @@ output primitive = line_strip
 0:?     'OutputStream.clip' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 128
 
                               Capability Geometry

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-2.vert.out

@@ -420,7 +420,7 @@ Shader version: 500
 0:?     'cull' ( out 4-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.frag.out

@@ -98,7 +98,7 @@ gl_FragCoord origin is upper left
 0:?     'cull' ( in 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 53
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.geom.out

@@ -630,7 +630,7 @@ output primitive = line_strip
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Geometry

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-3.vert.out

@@ -136,7 +136,7 @@ Shader version: 500
 0:?     'cull' ( out 2-element array of float CullDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 51
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.frag.out

@@ -174,7 +174,7 @@ gl_FragCoord origin is upper left
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 57
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.geom.out

@@ -612,7 +612,7 @@ output primitive = line_strip
 0:?     'OutputStream.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 130
 
                               Capability Geometry

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-4.vert.out

@@ -270,7 +270,7 @@ Shader version: 500
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 72
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.frag.out

@@ -232,7 +232,7 @@ gl_FragCoord origin is upper left
 0:?     'v.ClipRect' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 62
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-5.vert.out

@@ -318,7 +318,7 @@ Shader version: 500
 0:?     '@entryPointOutput.ClipRect' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 73
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.frag.out

@@ -282,7 +282,7 @@ gl_FragCoord origin is upper left
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 79
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-6.vert.out

@@ -428,7 +428,7 @@ Shader version: 500
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 86
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.frag.out

@@ -270,7 +270,7 @@ gl_FragCoord origin is upper left
 0:?     'v.clip1' ( in 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 78
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-7.vert.out

@@ -384,7 +384,7 @@ Shader version: 500
 0:?     '@entryPointOutput.clip1' ( out 8-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 81
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.frag.out

@@ -186,7 +186,7 @@ gl_FragCoord origin is upper left
 0:?     'v.clip1' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 65
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-8.vert.out

@@ -240,7 +240,7 @@ Shader version: 500
 0:?     '@entryPointOutput.clip1' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 62
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.frag.out

@@ -144,7 +144,7 @@ gl_FragCoord origin is upper left
 0:?     'clip0' ( in 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 68
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.clipdistance-9.vert.out

@@ -194,7 +194,7 @@ Shader version: 500
 0:?     'clip0' ( out 4-element array of float ClipDistance)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 67
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.color.hull.tesc.out

@@ -356,7 +356,7 @@ triangle order = cw
 0:?     '@patchConstantOutput.inside' ( patch out 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 127
 
                               Capability Tessellation

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.comparison.vec.frag.out

@@ -262,7 +262,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 96
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.conditional.frag.out

@@ -522,7 +522,7 @@ gl_FragCoord origin is upper left
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 206
 
                               Capability Shader

+ 2 - 3
3rdparty/glslang/Test/baseResults/hlsl.constantbuffer.frag.out

@@ -133,7 +133,7 @@ gl_FragCoord origin is upper left
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 66
 
                               Capability Shader
@@ -240,6 +240,5 @@ Validation failed
               60:    7(fvec4)   CompositeConstruct 59 59 59 59
                                 ReturnValue 60
               30:             Label
-              62:    7(fvec4) Undef
-                              ReturnValue 62
+                              Unreachable
                               FunctionEnd

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.constructArray.vert.out

@@ -268,7 +268,7 @@ Shader version: 500
 0:?     '@entryPointOutput' ( out 4-component vector of float Position)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.constructexpr.frag.out

@@ -104,7 +104,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput.color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.constructimat.frag.out

@@ -545,7 +545,7 @@ gl_FragCoord origin is upper left
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.coverage.frag.out

@@ -119,7 +119,7 @@ gl_FragCoord origin is upper left
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 52
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.dashI.vert.out

@@ -1,6 +1,6 @@
 hlsl.dashI.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 40
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.deadFunctionMissingBody.vert.out

@@ -1,6 +1,6 @@
 hlsl.deadFunctionMissingBody.vert
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 18
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.depthGreater.frag.out

@@ -50,7 +50,7 @@ using depth_greater
 0:?     'depth' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 20
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.depthLess.frag.out

@@ -42,7 +42,7 @@ using depth_less
 0:?     '@entryPointOutput' ( out float FragDepth)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 16
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.discard.frag.out

@@ -108,7 +108,7 @@ gl_FragCoord origin is upper left
 0:?     'input' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader

+ 321 - 218
3rdparty/glslang/Test/baseResults/hlsl.doLoop.frag.out

@@ -2,68 +2,95 @@ hlsl.doLoop.frag
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
-0:3      Loop with condition not tested first: Unroll
-0:3        Loop Condition
-0:3        Constant:
-0:3          false (const bool)
-0:3        No loop body
-0:4      Loop with condition not tested first: Unroll
-0:4        Loop Condition
-0:4        Constant:
-0:4          false (const bool)
-0:4        No loop body
-0:5      Loop with condition not tested first
-0:5        Loop Condition
-0:5        Compare Greater Than ( temp bool)
-0:5          'input' ( in float)
-0:5          Constant:
-0:5            2.000000
-0:5        Loop Body
-0:?         Sequence
-0:5          Branch: Return with expression
-0:5            Construct vec4 ( temp 4-component vector of float)
-0:5              'input' ( in float)
-0:6      Loop with condition not tested first
+0:2      Loop with condition not tested first: Unroll
+0:2        Loop Condition
+0:2        Constant:
+0:2          false (const bool)
+0:2        No loop body
+0:5  Function Definition: f1( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Loop with condition not tested first: Unroll
 0:6        Loop Condition
-0:6        Compare Less Than ( temp bool)
-0:6          'input' ( in float)
-0:6          Constant:
-0:6            10.000000
-0:6        Loop Body
-0:6        Pre-Increment ( temp float)
-0:6          'input' ( in float)
-0:7      Loop with condition not tested first
-0:7        Loop Condition
-0:7        Compare Less Than ( temp bool)
-0:7          Pre-Increment ( temp float)
-0:7            'input' ( in float)
-0:7          Constant:
-0:7            10.000000
-0:7        Loop Body
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          Compare Less Than ( temp bool)
-0:7            Pre-Increment ( temp float)
-0:7              'input' ( in float)
-0:7            Constant:
-0:7              10.000000
-0:7          No loop body
-0:8      Branch: Return with expression
-0:8        Construct vec4 ( temp 4-component vector of float)
-0:8          'input' ( in float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:6        Constant:
+0:6          false (const bool)
+0:6        No loop body
+0:9  Function Definition: f2(f1; ( temp float)
+0:9    Function Parameters: 
+0:9      'input' ( in float)
+0:?     Sequence
+0:10      Loop with condition not tested first
+0:10        Loop Condition
+0:10        Compare Greater Than ( temp bool)
+0:10          'input' ( in float)
+0:10          Constant:
+0:10            2.000000
+0:10        Loop Body
+0:?         Sequence
+0:10          Branch: Return with expression
+0:10            Construct float ( temp float)
+0:10              Construct vec4 ( temp 4-component vector of float)
+0:10                'input' ( in float)
+0:13  Function Definition: f3(f1; ( temp void)
+0:13    Function Parameters: 
+0:13      'input' ( in float)
 0:?     Sequence
-0:2      move second child to first child ( temp float)
+0:14      Loop with condition not tested first
+0:14        Loop Condition
+0:14        Compare Less Than ( temp bool)
+0:14          'input' ( in float)
+0:14          Constant:
+0:14            10.000000
+0:14        Loop Body
+0:14        Pre-Increment ( temp float)
+0:14          'input' ( in float)
+0:17  Function Definition: f4(f1; ( temp void)
+0:17    Function Parameters: 
+0:17      'input' ( in float)
+0:?     Sequence
+0:18      Loop with condition not tested first
+0:18        Loop Condition
+0:18        Compare Less Than ( temp bool)
+0:18          Pre-Increment ( temp float)
+0:18            'input' ( in float)
+0:18          Constant:
+0:18            10.000000
+0:18        Loop Body
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          Compare Less Than ( temp bool)
+0:18            Pre-Increment ( temp float)
+0:18              'input' ( in float)
+0:18            Constant:
+0:18              10.000000
+0:18          No loop body
+0:22  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'input' ( in float)
+0:?     Sequence
+0:23      Function Call: f0( ( temp void)
+0:24      Function Call: f1( ( temp void)
+0:25      Function Call: f2(f1; ( temp float)
+0:25        'input' ( in float)
+0:26      Function Call: f3(f1; ( temp void)
+0:26        'input' ( in float)
+0:27      Function Call: f4(f1; ( temp void)
+0:27        'input' ( in float)
+0:28      Branch: Return with expression
+0:28        Construct vec4 ( temp 4-component vector of float)
+0:28          'input' ( in float)
+0:22  Function Definition: PixelShaderFunction( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      move second child to first child ( temp float)
 0:?         'input' ( temp float)
 0:?         'input' (layout( location=0) in float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:22      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
 0:?           'input' ( temp float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
@@ -76,196 +103,272 @@ Linked fragment stage:
 Shader version: 500
 gl_FragCoord origin is upper left
 0:? Sequence
-0:2  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
-0:2    Function Parameters: 
-0:2      'input' ( in float)
+0:1  Function Definition: f0( ( temp void)
+0:1    Function Parameters: 
 0:?     Sequence
-0:3      Loop with condition not tested first: Unroll
-0:3        Loop Condition
-0:3        Constant:
-0:3          false (const bool)
-0:3        No loop body
-0:4      Loop with condition not tested first: Unroll
-0:4        Loop Condition
-0:4        Constant:
-0:4          false (const bool)
-0:4        No loop body
-0:5      Loop with condition not tested first
-0:5        Loop Condition
-0:5        Compare Greater Than ( temp bool)
-0:5          'input' ( in float)
-0:5          Constant:
-0:5            2.000000
-0:5        Loop Body
-0:?         Sequence
-0:5          Branch: Return with expression
-0:5            Construct vec4 ( temp 4-component vector of float)
-0:5              'input' ( in float)
-0:6      Loop with condition not tested first
+0:2      Loop with condition not tested first: Unroll
+0:2        Loop Condition
+0:2        Constant:
+0:2          false (const bool)
+0:2        No loop body
+0:5  Function Definition: f1( ( temp void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:6      Loop with condition not tested first: Unroll
 0:6        Loop Condition
-0:6        Compare Less Than ( temp bool)
-0:6          'input' ( in float)
-0:6          Constant:
-0:6            10.000000
-0:6        Loop Body
-0:6        Pre-Increment ( temp float)
-0:6          'input' ( in float)
-0:7      Loop with condition not tested first
-0:7        Loop Condition
-0:7        Compare Less Than ( temp bool)
-0:7          Pre-Increment ( temp float)
-0:7            'input' ( in float)
-0:7          Constant:
-0:7            10.000000
-0:7        Loop Body
-0:7        Loop with condition tested first
-0:7          Loop Condition
-0:7          Compare Less Than ( temp bool)
-0:7            Pre-Increment ( temp float)
-0:7              'input' ( in float)
-0:7            Constant:
-0:7              10.000000
-0:7          No loop body
-0:8      Branch: Return with expression
-0:8        Construct vec4 ( temp 4-component vector of float)
-0:8          'input' ( in float)
-0:2  Function Definition: PixelShaderFunction( ( temp void)
-0:2    Function Parameters: 
+0:6        Constant:
+0:6          false (const bool)
+0:6        No loop body
+0:9  Function Definition: f2(f1; ( temp float)
+0:9    Function Parameters: 
+0:9      'input' ( in float)
+0:?     Sequence
+0:10      Loop with condition not tested first
+0:10        Loop Condition
+0:10        Compare Greater Than ( temp bool)
+0:10          'input' ( in float)
+0:10          Constant:
+0:10            2.000000
+0:10        Loop Body
+0:?         Sequence
+0:10          Branch: Return with expression
+0:10            Construct float ( temp float)
+0:10              Construct vec4 ( temp 4-component vector of float)
+0:10                'input' ( in float)
+0:13  Function Definition: f3(f1; ( temp void)
+0:13    Function Parameters: 
+0:13      'input' ( in float)
+0:?     Sequence
+0:14      Loop with condition not tested first
+0:14        Loop Condition
+0:14        Compare Less Than ( temp bool)
+0:14          'input' ( in float)
+0:14          Constant:
+0:14            10.000000
+0:14        Loop Body
+0:14        Pre-Increment ( temp float)
+0:14          'input' ( in float)
+0:17  Function Definition: f4(f1; ( temp void)
+0:17    Function Parameters: 
+0:17      'input' ( in float)
 0:?     Sequence
-0:2      move second child to first child ( temp float)
+0:18      Loop with condition not tested first
+0:18        Loop Condition
+0:18        Compare Less Than ( temp bool)
+0:18          Pre-Increment ( temp float)
+0:18            'input' ( in float)
+0:18          Constant:
+0:18            10.000000
+0:18        Loop Body
+0:18        Loop with condition tested first
+0:18          Loop Condition
+0:18          Compare Less Than ( temp bool)
+0:18            Pre-Increment ( temp float)
+0:18              'input' ( in float)
+0:18            Constant:
+0:18              10.000000
+0:18          No loop body
+0:22  Function Definition: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22    Function Parameters: 
+0:22      'input' ( in float)
+0:?     Sequence
+0:23      Function Call: f0( ( temp void)
+0:24      Function Call: f1( ( temp void)
+0:25      Function Call: f2(f1; ( temp float)
+0:25        'input' ( in float)
+0:26      Function Call: f3(f1; ( temp void)
+0:26        'input' ( in float)
+0:27      Function Call: f4(f1; ( temp void)
+0:27        'input' ( in float)
+0:28      Branch: Return with expression
+0:28        Construct vec4 ( temp 4-component vector of float)
+0:28          'input' ( in float)
+0:22  Function Definition: PixelShaderFunction( ( temp void)
+0:22    Function Parameters: 
+0:?     Sequence
+0:22      move second child to first child ( temp float)
 0:?         'input' ( temp float)
 0:?         'input' (layout( location=0) in float)
-0:2      move second child to first child ( temp 4-component vector of float)
+0:22      move second child to first child ( temp 4-component vector of float)
 0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
-0:2        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
+0:22        Function Call: @PixelShaderFunction(f1; ( temp 4-component vector of float)
 0:?           'input' ( temp float)
 0:?   Linker Objects
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 0:?     'input' (layout( location=0) in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
-// Id's are bound by 71
+// Generated by (magic number): 80008
+// Id's are bound by 99
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 64 67
+                              EntryPoint Fragment 4  "PixelShaderFunction" 92 95
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
-                              Name 11  "@PixelShaderFunction(f1;"
-                              Name 10  "input"
-                              Name 62  "input"
-                              Name 64  "input"
-                              Name 67  "@entryPointOutput"
-                              Name 68  "param"
-                              Decorate 64(input) Location 0
-                              Decorate 67(@entryPointOutput) Location 0
+                              Name 6  "f0("
+                              Name 8  "f1("
+                              Name 14  "f2(f1;"
+                              Name 13  "input"
+                              Name 18  "f3(f1;"
+                              Name 17  "input"
+                              Name 21  "f4(f1;"
+                              Name 20  "input"
+                              Name 26  "@PixelShaderFunction(f1;"
+                              Name 25  "input"
+                              Name 77  "param"
+                              Name 80  "param"
+                              Name 83  "param"
+                              Name 90  "input"
+                              Name 92  "input"
+                              Name 95  "@entryPointOutput"
+                              Name 96  "param"
+                              Decorate 92(input) Location 0
+                              Decorate 95(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
-               6:             TypeFloat 32
-               7:             TypePointer Function 6(float)
-               8:             TypeVector 6(float) 4
-               9:             TypeFunction 8(fvec4) 7(ptr)
-              17:             TypeBool
-              18:    17(bool) ConstantFalse
-              31:    6(float) Constant 1073741824
-              38:    6(float) Constant 1065353216
-              41:    6(float) Constant 1092616192
-              63:             TypePointer Input 6(float)
-       64(input):     63(ptr) Variable Input
-              66:             TypePointer Output 8(fvec4)
-67(@entryPointOutput):     66(ptr) Variable Output
+              10:             TypeFloat 32
+              11:             TypePointer Function 10(float)
+              12:             TypeFunction 10(float) 11(ptr)
+              16:             TypeFunction 2 11(ptr)
+              23:             TypeVector 10(float) 4
+              24:             TypeFunction 23(fvec4) 11(ptr)
+              32:             TypeBool
+              33:    32(bool) ConstantFalse
+              47:   10(float) Constant 1073741824
+              55:   10(float) Constant 1065353216
+              58:   10(float) Constant 1092616192
+              91:             TypePointer Input 10(float)
+       92(input):     91(ptr) Variable Input
+              94:             TypePointer Output 23(fvec4)
+95(@entryPointOutput):     94(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-       62(input):      7(ptr) Variable Function
-       68(param):      7(ptr) Variable Function
-              65:    6(float) Load 64(input)
-                              Store 62(input) 65
-              69:    6(float) Load 62(input)
-                              Store 68(param) 69
-              70:    8(fvec4) FunctionCall 11(@PixelShaderFunction(f1;) 68(param)
-                              Store 67(@entryPointOutput) 70
+       90(input):     11(ptr) Variable Function
+       96(param):     11(ptr) Variable Function
+              93:   10(float) Load 92(input)
+                              Store 90(input) 93
+              97:   10(float) Load 90(input)
+                              Store 96(param) 97
+              98:   23(fvec4) FunctionCall 26(@PixelShaderFunction(f1;) 96(param)
+                              Store 95(@entryPointOutput) 98
                               Return
                               FunctionEnd
-11(@PixelShaderFunction(f1;):    8(fvec4) Function None 9
-       10(input):      7(ptr) FunctionParameter
-              12:             Label
-                              Branch 13
-              13:             Label
-                              LoopMerge 15 16 Unroll 
-                              Branch 14
-              14:             Label
-                              Branch 16
-              16:             Label
-                              BranchConditional 18 13 15
-              15:             Label
-                              Branch 19
-              19:             Label
-                              LoopMerge 21 22 Unroll 
-                              Branch 20
-              20:             Label
-                              Branch 22
-              22:             Label
-                              BranchConditional 18 19 21
-              21:             Label
-                              Branch 23
-              23:             Label
-                              LoopMerge 25 26 None
-                              Branch 24
-              24:             Label
-              27:    6(float) Load 10(input)
-              28:    8(fvec4) CompositeConstruct 27 27 27 27
-                              ReturnValue 28
-              26:             Label
-              30:    6(float) Load 10(input)
-              32:    17(bool) FOrdGreaterThan 30 31
-                              BranchConditional 32 23 25
-              25:             Label
-                              Branch 33
-              33:             Label
-                              LoopMerge 35 36 None
+          6(f0():           2 Function None 3
+               7:             Label
+                              Branch 28
+              28:             Label
+                              LoopMerge 30 31 Unroll 
+                              Branch 29
+              29:             Label
+                              Branch 31
+              31:             Label
+                              BranchConditional 33 28 30
+              30:             Label
+                              Return
+                              FunctionEnd
+          8(f1():           2 Function None 3
+               9:             Label
                               Branch 34
               34:             Label
-              37:    6(float) Load 10(input)
-              39:    6(float) FAdd 37 38
-                              Store 10(input) 39
-                              Branch 36
-              36:             Label
-              40:    6(float) Load 10(input)
-              42:    17(bool) FOrdLessThan 40 41
-                              BranchConditional 42 33 35
+                              LoopMerge 36 37 Unroll 
+                              Branch 35
               35:             Label
-                              Branch 43
-              43:             Label
-                              LoopMerge 45 46 None
-                              Branch 44
-              44:             Label
-                              Branch 47
-              47:             Label
-                              LoopMerge 49 50 None
+                              Branch 37
+              37:             Label
+                              BranchConditional 33 34 36
+              36:             Label
+                              Return
+                              FunctionEnd
+      14(f2(f1;):   10(float) Function None 12
+       13(input):     11(ptr) FunctionParameter
+              15:             Label
+                              Branch 38
+              38:             Label
+                              LoopMerge 40 41 None
+                              Branch 39
+              39:             Label
+              42:   10(float) Load 13(input)
+              43:   23(fvec4) CompositeConstruct 42 42 42 42
+              44:   10(float) CompositeExtract 43 0
+                              ReturnValue 44
+              41:             Label
+                              Branch 38
+              40:             Label
+                              Unreachable
+                              FunctionEnd
+      18(f3(f1;):           2 Function None 16
+       17(input):     11(ptr) FunctionParameter
+              19:             Label
+                              Branch 50
+              50:             Label
+                              LoopMerge 52 53 None
                               Branch 51
               51:             Label
-              52:    6(float) Load 10(input)
-              53:    6(float) FAdd 52 38
-                              Store 10(input) 53
-              54:    17(bool) FOrdLessThan 53 41
-                              BranchConditional 54 48 49
-              48:               Label
-                                Branch 50
-              50:               Label
-                                Branch 47
-              49:             Label
-                              Branch 46
-              46:             Label
-              55:    6(float) Load 10(input)
-              56:    6(float) FAdd 55 38
-                              Store 10(input) 56
-              57:    17(bool) FOrdLessThan 56 41
-                              BranchConditional 57 43 45
-              45:             Label
-              58:    6(float) Load 10(input)
-              59:    8(fvec4) CompositeConstruct 58 58 58 58
-                              ReturnValue 59
+              54:   10(float) Load 17(input)
+              56:   10(float) FAdd 54 55
+                              Store 17(input) 56
+                              Branch 53
+              53:             Label
+              57:   10(float) Load 17(input)
+              59:    32(bool) FOrdLessThan 57 58
+                              BranchConditional 59 50 52
+              52:             Label
+                              Return
+                              FunctionEnd
+      21(f4(f1;):           2 Function None 16
+       20(input):     11(ptr) FunctionParameter
+              22:             Label
+                              Branch 60
+              60:             Label
+                              LoopMerge 62 63 None
+                              Branch 61
+              61:             Label
+                              Branch 64
+              64:             Label
+                              LoopMerge 66 67 None
+                              Branch 68
+              68:             Label
+              69:   10(float) Load 20(input)
+              70:   10(float) FAdd 69 55
+                              Store 20(input) 70
+              71:    32(bool) FOrdLessThan 70 58
+                              BranchConditional 71 65 66
+              65:               Label
+                                Branch 67
+              67:               Label
+                                Branch 64
+              66:             Label
+                              Branch 63
+              63:             Label
+              72:   10(float) Load 20(input)
+              73:   10(float) FAdd 72 55
+                              Store 20(input) 73
+              74:    32(bool) FOrdLessThan 73 58
+                              BranchConditional 74 60 62
+              62:             Label
+                              Return
+                              FunctionEnd
+26(@PixelShaderFunction(f1;):   23(fvec4) Function None 24
+       25(input):     11(ptr) FunctionParameter
+              27:             Label
+       77(param):     11(ptr) Variable Function
+       80(param):     11(ptr) Variable Function
+       83(param):     11(ptr) Variable Function
+              75:           2 FunctionCall 6(f0()
+              76:           2 FunctionCall 8(f1()
+              78:   10(float) Load 25(input)
+                              Store 77(param) 78
+              79:   10(float) FunctionCall 14(f2(f1;) 77(param)
+              81:   10(float) Load 25(input)
+                              Store 80(param) 81
+              82:           2 FunctionCall 18(f3(f1;) 80(param)
+              84:   10(float) Load 25(input)
+                              Store 83(param) 84
+              85:           2 FunctionCall 21(f4(f1;) 83(param)
+              86:   10(float) Load 25(input)
+              87:   23(fvec4) CompositeConstruct 86 86 86 86
+                              ReturnValue 87
                               FunctionEnd

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.domain.1.tese.out

@@ -286,7 +286,7 @@ triangle order = none
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 103
 
                               Capability Tessellation

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.domain.2.tese.out

@@ -284,7 +284,7 @@ triangle order = none
 0:?     'pcf_data.foo' (layout( location=2) patch in float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 98
 
                               Capability Tessellation

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.domain.3.tese.out

@@ -264,7 +264,7 @@ triangle order = none
 0:?     'pcf_data.flInsideTessFactor' ( patch in 2-element array of float TessLevelInner)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 100
 
                               Capability Tessellation

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.earlydepthstencil.frag.out

@@ -108,7 +108,7 @@ using early_fragment_tests
 0:?     'input.Position' ( in 4-component vector of float FragCoord)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 50
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.emptystruct.init.vert.out

@@ -60,7 +60,7 @@ Shader version: 500
 0:?     'vertexIndex' (layout( location=0) in uint)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 29
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.frag.out

@@ -51,7 +51,7 @@ gl_FragCoord origin is upper left
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.emptystructreturn.vert.out

@@ -49,7 +49,7 @@ Shader version: 500
 
 Validation failed
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.entry-in.frag.out

@@ -166,7 +166,7 @@ gl_FragCoord origin is upper left
 0:?     'i.i2' (layout( location=1) flat in 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 74
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.entry-out.frag.out

@@ -244,7 +244,7 @@ gl_FragCoord origin is upper left
 0:?     'out3.i' (layout( location=5) out 2-component vector of int)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 89
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.entry.rename.frag.out

@@ -72,7 +72,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 32
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out

@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.explicitDescriptorSet.frag.out

@@ -1,6 +1,6 @@
 hlsl.explicitDescriptorSet.frag
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 31
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.flatten.return.frag.out

@@ -118,7 +118,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput.other_struct_member3' (layout( location=3) out float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 49
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.flattenOpaque.frag.out

@@ -295,7 +295,7 @@ gl_FragCoord origin is upper left
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 122
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInit.vert.out

@@ -165,7 +165,7 @@ Shader version: 500
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 82
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out

@@ -107,7 +107,7 @@ Shader version: 500
 0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 59
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.flattenSubset.frag.out

@@ -115,7 +115,7 @@ gl_FragCoord origin is upper left
 0:?     'vpos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 54
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.flattenSubset2.frag.out

@@ -149,7 +149,7 @@ gl_FragCoord origin is upper left
 0:?     'vpos' (layout( location=0) in 4-component vector of float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 56
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.float1.frag.out

@@ -65,7 +65,7 @@ gl_FragCoord origin is upper left
 0:?     'scalar' ( global float)
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 27
 
                               Capability Shader

+ 1 - 1
3rdparty/glslang/Test/baseResults/hlsl.float4.frag.out

@@ -42,7 +42,7 @@ gl_FragCoord origin is upper left
 0:?     'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor,  uniform bool ff1, layout( offset=20) uniform float ff2, layout( binding=0 offset=32) uniform 4-component vector of float ff3, layout( binding=1 offset=48) uniform 4-component vector of float ff4})
 
 // Module Version 10000
-// Generated by (magic number): 80007
+// Generated by (magic number): 80008
 // Id's are bound by 26
 
                               Capability Shader

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff