diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 7f9214c8..dac5958c 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1147,28 +1147,18 @@ bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIn // body emission needs to know what the for-loop terminal is when it sees a "continue" loopTerminal.push(node->getTerminal()); - builder.makeNewLoop(); - - bool bodyOut = false; - if (! node->testFirst()) { - builder.endLoopHeaderWithoutTest(); - if (node->getBody()) { - breakForLoop.push(true); - node->getBody()->traverse(this); - breakForLoop.pop(); - } - bodyOut = true; - builder.createBranchToLoopTest(); - } + builder.makeNewLoop(node->testFirst()); if (node->getTest()) { node->getTest()->traverse(this); // the AST only contained the test computation, not the branch, we have to add it spv::Id condition = builder.accessChainLoad(TranslatePrecisionDecoration(node->getTest()->getType())); builder.createLoopTestBranch(condition); + } else { + builder.createBranchToBody(); } - if (! bodyOut && node->getBody()) { + if (node->getBody()) { breakForLoop.push(true); node->getBody()->traverse(this); breakForLoop.pop(); diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 75e622cf..c327d38f 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -1736,16 +1736,29 @@ void Builder::endSwitch(std::vector& /*segmentBlock*/) } // Comments in header -void Builder::makeNewLoop() +void Builder::makeNewLoop(bool loopTestFirst) { - Loop loop = { }; + loops.push({ }); + Loop& loop = loops.top(); - loop.function = &getBuildPoint()->getParent(); - loop.header = new Block(getUniqueId(), *loop.function); - loop.merge = new Block(getUniqueId(), *loop.function); - loop.test = NULL; + loop.function = &getBuildPoint()->getParent(); + loop.header = new Block(getUniqueId(), *loop.function); + loop.merge = new Block(getUniqueId(), *loop.function); + // Delaying creation of the loop body perturbs test results less, + // which makes for easier patch review. + // TODO(dneto): Create the loop body block here, instead of + // upon first use. + loop.body = 0; + loop.testFirst = loopTestFirst; + loop.isFirstIteration = 0; - loops.push(loop); + // The loop test is always emitted before the loop body. + // But if the loop test executes at the bottom of the loop, then + // execute the test only on the second and subsequent iterations. + + // Remember the block that branches to the loop header. This + // is required for the test-after-body case. + Block* preheader = getBuildPoint(); // Branch into the loop createBranch(loop.header); @@ -1753,56 +1766,95 @@ void Builder::makeNewLoop() // Set ourselves inside the loop loop.function->addBlock(loop.header); setBuildPoint(loop.header); + + if (!loopTestFirst) { + // Generate code to defer the loop test until the second and + // subsequent iterations. + + // A phi node determines whether we're on the first iteration. + loop.isFirstIteration = new Instruction(getUniqueId(), makeBoolType(), OpPhi); + // It's always the first iteration when coming from the preheader. + // All other branches to this loop header will need to indicate "false", + // but we don't yet know where they will come from. + loop.isFirstIteration->addIdOperand(makeBoolConstant(true)); + loop.isFirstIteration->addIdOperand(preheader->getId()); + getBuildPoint()->addInstruction(loop.isFirstIteration); + + // Mark the end of the structured loop. This must exist in the loop header block. + createMerge(OpLoopMerge, loop.merge, LoopControlMaskNone); + + // Generate code to see if this is the first iteration of the loop. + // It needs to be in its own block, since the loop merge and + // the selection merge instructions can't both be in the same + // (header) block. + Block* firstIterationCheck = new Block(getUniqueId(), *loop.function); + createBranch(firstIterationCheck); + loop.function->addBlock(firstIterationCheck); + setBuildPoint(firstIterationCheck); + + loop.body = new Block(getUniqueId(), *loop.function); + // Control flow after this "if" normally reconverges at the loop body. + // However, the loop test has a "break branch" out of this selection + // construct because it can transfer control to the loop merge block. + createMerge(OpSelectionMerge, loop.body, SelectionControlMaskNone); + + Block* loopTest = new Block(getUniqueId(), *loop.function); + createConditionalBranch(loop.isFirstIteration->getResultId(), loop.body, loopTest); + + loop.function->addBlock(loopTest); + setBuildPoint(loopTest); + } } void Builder::createLoopTestBranch(Id condition) { Loop& loop = loops.top(); - // If loop.test exists, then we've already generated the LoopMerge - // for this loop. - if (!loop.test) - createMerge(OpLoopMerge, loop.merge, LoopControlMaskNone); + // Generate the merge instruction. If the loop test executes before + // the body, then this is a loop merge. Otherwise the loop merge + // has already been generated and this is a conditional merge. + if (loop.testFirst) { + createMerge(OpLoopMerge, loop.merge, LoopControlMaskNone); + loop.body = new Block(getUniqueId(), *loop.function); + // Branching to the "body" block will keep control inside + // the loop. + createConditionalBranch(condition, loop.body, loop.merge); + loop.function->addBlock(loop.body); + setBuildPoint(loop.body); + } else { + // The branch to the loop merge block is the allowed exception + // to the structured control flow. Otherwise, control flow will + // continue to loop.body block. Since that is already the target + // of a merge instruction, and a block can't be the target of more + // than one merge instruction, we need to make an intermediate block. + Block* stayInLoopBlock = new Block(getUniqueId(), *loop.function); + createMerge(OpSelectionMerge, stayInLoopBlock, SelectionControlMaskNone); - // Branching to the "body" block will keep control inside - // the loop. - Block* body = new Block(getUniqueId(), *loop.function); - createConditionalBranch(condition, body, loop.merge); - loop.function->addBlock(body); - setBuildPoint(body); + // This is the loop test. + createConditionalBranch(condition, stayInLoopBlock, loop.merge); + + // The dummy block just branches to the real loop body. + loop.function->addBlock(stayInLoopBlock); + setBuildPoint(stayInLoopBlock); + createBranchToBody(); + } } -void Builder::endLoopHeaderWithoutTest() +void Builder::createBranchToBody() { Loop& loop = loops.top(); + assert(loop.body); - createMerge(OpLoopMerge, loop.merge, LoopControlMaskNone); - Block* body = new Block(getUniqueId(), *loop.function); - createBranch(body); - loop.function->addBlock(body); - setBuildPoint(body); - - assert(!loop.test); - loop.test = new Block(getUniqueId(), *loop.function); -} - -void Builder::createBranchToLoopTest() -{ - Loop& loop = loops.top(); - Block* testBlock = loop.test; - assert(testBlock); - createBranch(testBlock); - loop.function->addBlock(testBlock); - setBuildPoint(testBlock); + // This is a reconvergence of control flow, so no merge instruction + // is required. + createBranch(loop.body); + loop.function->addBlock(loop.body); + setBuildPoint(loop.body); } void Builder::createLoopContinue() { - Loop& loop = loops.top(); - if (loop.test) - createBranch(loop.test); - else - createBranch(loop.header); + createBranchToLoopHeaderFromInside(loops.top()); // Set up a block for dead code. createAndSetNoPredecessorBlock("post-loop-continue"); } @@ -1821,7 +1873,7 @@ void Builder::closeLoop() Loop& loop = loops.top(); // Branch back to the top - createBranch(loop.header); + createBranchToLoopHeaderFromInside(loop); // Add the merge block and set the build point to it loop.function->addBlock(loop.merge); @@ -1830,6 +1882,18 @@ void Builder::closeLoop() loops.pop(); } +// Create a branch to the header of the given loop, from inside +// the loop body. +// Adjusts the phi node for the first-iteration value if needeed. +void Builder::createBranchToLoopHeaderFromInside(const Loop& loop) +{ + createBranch(loop.header); + if (loop.isFirstIteration) { + loop.isFirstIteration->addIdOperand(makeBoolConstant(false)); + loop.isFirstIteration->addIdOperand(getBuildPoint()->getId()); + } +} + void Builder::clearAccessChain() { accessChain.base = 0; diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 4eef5a4c..de7c3361 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -357,35 +357,25 @@ public: // Finish off the innermost switch. void endSwitch(std::vector& segmentBB); - // Start the beginning of a new loop. - void makeNewLoop(); + // Start the beginning of a new loop, and prepare the builder to + // generate code for the loop test. + // The loopTestFirst parameter is true when the loop test executes before + // the body. (It is false for do-while loops.) + void makeNewLoop(bool loopTestFirst); // Add the branch for the loop test, based on the given condition. - // The true branch goes to the block that remains inside the loop, and - // the false branch goes to the loop's merge block. The builder insertion - // point will be placed at the start of the inside-the-loop block. + // The true branch goes to the first block in the loop body, and + // the false branch goes to the loop's merge block. The builder insertion + // point will be placed at the start of the body. void createLoopTestBranch(Id condition); - // Finish generating the loop header block in the case where the loop test - // is at the bottom of the loop. It will include the LoopMerge instruction - // and a branch to the rest of the body. The loop header block must be - // separate from the rest of the body to make room for the the two kinds - // of *Merge instructions that might have to occur just before a branch: - // the loop header must have a LoopMerge as its second-last instruction, - // and the body might begin with a conditional branch, which must have its - // own SelectionMerge instruction. - // Also create the basic block that will contain the loop test, but don't - // insert it into the function yet. Any "continue" constructs in this loop - // will branch to the loop test block. The builder insertion point will be - // placed at the start of the body block. - void endLoopHeaderWithoutTest(); - - // Generate a branch to the loop test block. This can only be called if - // the loop test is at the bottom of the loop. The builder insertion point - // is left at the start of the test block. - void createBranchToLoopTest(); + // Generate an unconditional branch to the loop body. The builder insertion + // point will be placed at the start of the body. Use this when there is + // no loop test. + void createBranchToBody(); // Add a branch to the test of the current (innermost) loop. + // The way we generate code, that's also the loop header. void createLoopContinue(); // Add an exit (e.g. "break") for the innermost loop that you're in @@ -499,6 +489,9 @@ protected: void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock); void dumpInstructions(std::vector&, const std::vector&) const; + struct Loop; // Defined below. + void createBranchToLoopHeaderFromInside(const Loop& loop); + SourceLanguage source; int sourceVersion; std::vector extensions; @@ -543,11 +536,18 @@ protected: // to the merge block when either the loop test fails, or when a // nested "break" is encountered. Block* merge; - // If not NULL, the test block is the basic block containing the loop - // test and the conditional branch back to the header or the merge - // block. This is created for "do-while" loops, and is the target of - // any "continue" constructs that might exist. - Block* test; + // The body block is the first basic block in the body of the loop, i.e. + // the code that is to be repeatedly executed, aside from loop control. + // This member is null until we generate code that references the loop + // body block. + Block* body; + // True when the loop test executes before the body. + bool testFirst; + // When the test executes after the body, this is defined as the phi + // instruction that tells us whether we are on the first iteration of + // the loop. Otherwise this is null. + Instruction* isFirstIteration; + // The function containing the loop. Function* function; }; diff --git a/Test/baseResults/spv.do-simple.vert.out b/Test/baseResults/spv.do-simple.vert.out index 321d0e00..1e82c565 100644 --- a/Test/baseResults/spv.do-simple.vert.out +++ b/Test/baseResults/spv.do-simple.vert.out @@ -5,7 +5,7 @@ Linked vertex stage: // Module Version 99 // Generated by (magic number): 51a00bb -// Id's are bound by 26 +// Id's are bound by 30 Source ESSL 300 1: ExtInstImport "GLSL.std.450" @@ -13,45 +13,52 @@ Linked vertex stage: EntryPoint Vertex 4 Name 4 "main" Name 9 "i" - Name 24 "gl_VertexID" - Name 25 "gl_InstanceID" + Name 28 "gl_VertexID" + Name 29 "gl_InstanceID" Decorate 9(i) PrecisionHigh - Decorate 24(gl_VertexID) PrecisionHigh - Decorate 24(gl_VertexID) BuiltIn VertexId - Decorate 24(gl_VertexID) NoStaticUse - Decorate 25(gl_InstanceID) PrecisionHigh - Decorate 25(gl_InstanceID) BuiltIn InstanceId - Decorate 25(gl_InstanceID) NoStaticUse + Decorate 28(gl_VertexID) PrecisionHigh + Decorate 28(gl_VertexID) BuiltIn VertexId + Decorate 28(gl_VertexID) NoStaticUse + Decorate 29(gl_InstanceID) PrecisionHigh + Decorate 29(gl_InstanceID) BuiltIn InstanceId + Decorate 29(gl_InstanceID) NoStaticUse 2: TypeVoid 3: TypeFunction 2 7: TypeInt 32 1 8: TypePointer Function 7(int) 10: 7(int) Constant 0 - 16: 7(int) Constant 1 - 19: 7(int) Constant 10 - 20: TypeBool - 23: TypePointer Input 7(int) - 24(gl_VertexID): 23(ptr) Variable Input -25(gl_InstanceID): 23(ptr) Variable Input + 14: TypeBool + 15: 14(bool) ConstantTrue + 20: 7(int) Constant 10 + 24: 7(int) Constant 1 + 26: 14(bool) ConstantFalse + 27: TypePointer Input 7(int) + 28(gl_VertexID): 27(ptr) Variable Input +29(gl_InstanceID): 27(ptr) Variable Input 4(main): 2 Function None 3 5: Label 9(i): 8(ptr) Variable Function Store 9(i) 10 Branch 11 11: Label + 13: 14(bool) Phi 15 5 26 17 LoopMerge 12 None - Branch 13 - 13: Label - 15: 7(int) Load 9(i) - 17: 7(int) IAdd 15 16 - Store 9(i) 17 - Branch 14 - 14: Label - 18: 7(int) Load 9(i) - 21: 20(bool) SLessThan 18 19 - BranchConditional 21 22 12 + Branch 16 + 16: Label + SelectionMerge 17 None + BranchConditional 13 17 18 + 18: Label + 19: 7(int) Load 9(i) + 21: 14(bool) SLessThan 19 20 + SelectionMerge 22 None + BranchConditional 21 22 12 22: Label - Branch 11 + Branch 17 + 17: Label + 23: 7(int) Load 9(i) + 25: 7(int) IAdd 23 24 + Store 9(i) 25 + Branch 11 12: Label Branch 6 6: Label diff --git a/Test/baseResults/spv.do-while-continue-break.vert.out b/Test/baseResults/spv.do-while-continue-break.vert.out index 5fb34db8..749841db 100644 --- a/Test/baseResults/spv.do-while-continue-break.vert.out +++ b/Test/baseResults/spv.do-while-continue-break.vert.out @@ -5,7 +5,7 @@ Linked vertex stage: // Module Version 99 // Generated by (magic number): 51a00bb -// Id's are bound by 48 +// Id's are bound by 52 Source ESSL 300 1: ExtInstImport "GLSL.std.450" @@ -13,97 +13,104 @@ Linked vertex stage: EntryPoint Vertex 4 Name 4 "main" Name 9 "i" - Name 15 "A" - Name 22 "B" - Name 25 "C" - Name 31 "D" - Name 34 "E" - Name 36 "F" - Name 43 "G" - Name 46 "gl_VertexID" - Name 47 "gl_InstanceID" + Name 25 "A" + Name 31 "B" + Name 34 "C" + Name 40 "D" + Name 43 "E" + Name 45 "F" + Name 47 "G" + Name 50 "gl_VertexID" + Name 51 "gl_InstanceID" Decorate 9(i) PrecisionHigh - Decorate 15(A) PrecisionHigh - Decorate 22(B) PrecisionHigh - Decorate 25(C) PrecisionHigh - Decorate 31(D) PrecisionHigh - Decorate 34(E) PrecisionHigh - Decorate 36(F) PrecisionHigh - Decorate 43(G) PrecisionHigh - Decorate 46(gl_VertexID) PrecisionHigh - Decorate 46(gl_VertexID) BuiltIn VertexId - Decorate 46(gl_VertexID) NoStaticUse - Decorate 47(gl_InstanceID) PrecisionHigh - Decorate 47(gl_InstanceID) BuiltIn InstanceId - Decorate 47(gl_InstanceID) NoStaticUse + Decorate 25(A) PrecisionHigh + Decorate 31(B) PrecisionHigh + Decorate 34(C) PrecisionHigh + Decorate 40(D) PrecisionHigh + Decorate 43(E) PrecisionHigh + Decorate 45(F) PrecisionHigh + Decorate 47(G) PrecisionHigh + Decorate 50(gl_VertexID) PrecisionHigh + Decorate 50(gl_VertexID) BuiltIn VertexId + Decorate 50(gl_VertexID) NoStaticUse + Decorate 51(gl_InstanceID) PrecisionHigh + Decorate 51(gl_InstanceID) BuiltIn InstanceId + Decorate 51(gl_InstanceID) NoStaticUse 2: TypeVoid 3: TypeFunction 2 7: TypeInt 32 1 8: TypePointer Function 7(int) 10: 7(int) Constant 0 - 17: 7(int) Constant 2 - 18: TypeBool - 23: 7(int) Constant 1 - 27: 7(int) Constant 5 - 32: 7(int) Constant 3 - 35: 7(int) Constant 42 - 37: 7(int) Constant 99 - 40: 7(int) Constant 19 - 44: 7(int) Constant 12 - 45: TypePointer Input 7(int) - 46(gl_VertexID): 45(ptr) Variable Input -47(gl_InstanceID): 45(ptr) Variable Input + 14: TypeBool + 15: 14(bool) ConstantTrue + 20: 7(int) Constant 1 + 22: 7(int) Constant 19 + 27: 7(int) Constant 2 + 32: 14(bool) ConstantFalse + 36: 7(int) Constant 5 + 41: 7(int) Constant 3 + 44: 7(int) Constant 42 + 46: 7(int) Constant 99 + 48: 7(int) Constant 12 + 49: TypePointer Input 7(int) + 50(gl_VertexID): 49(ptr) Variable Input +51(gl_InstanceID): 49(ptr) Variable Input 4(main): 2 Function None 3 5: Label 9(i): 8(ptr) Variable Function - 15(A): 8(ptr) Variable Function - 22(B): 8(ptr) Variable Function - 25(C): 8(ptr) Variable Function - 31(D): 8(ptr) Variable Function - 34(E): 8(ptr) Variable Function - 36(F): 8(ptr) Variable Function - 43(G): 8(ptr) Variable Function + 25(A): 8(ptr) Variable Function + 31(B): 8(ptr) Variable Function + 34(C): 8(ptr) Variable Function + 40(D): 8(ptr) Variable Function + 43(E): 8(ptr) Variable Function + 45(F): 8(ptr) Variable Function + 47(G): 8(ptr) Variable Function Store 9(i) 10 Branch 11 11: Label + 13: 14(bool) Phi 15 5 32 29 32 39 LoopMerge 12 None - Branch 13 - 13: Label - Store 15(A) 10 - 16: 7(int) Load 9(i) - 19: 18(bool) IEqual 16 17 - SelectionMerge 21 None - BranchConditional 19 20 21 - 20: Label - Store 22(B) 23 - Branch 14 + Branch 16 + 16: Label + SelectionMerge 17 None + BranchConditional 13 17 18 + 18: Label + 19: 7(int) Load 9(i) + 21: 7(int) IAdd 19 20 + Store 9(i) 21 + 23: 14(bool) SLessThan 21 22 + SelectionMerge 24 None + BranchConditional 23 24 12 24: Label - Store 25(C) 17 - Branch 21 - 21: Label + Branch 17 + 17: Label + Store 25(A) 10 26: 7(int) Load 9(i) - 28: 18(bool) IEqual 26 27 + 28: 14(bool) IEqual 26 27 SelectionMerge 30 None BranchConditional 28 29 30 29: Label - Store 31(D) 32 - Branch 12 + Store 31(B) 20 + Branch 11 33: Label - Store 34(E) 35 + Store 34(C) 27 Branch 30 30: Label - Store 36(F) 37 - Branch 14 - 14: Label - 38: 7(int) Load 9(i) - 39: 7(int) IAdd 38 23 - Store 9(i) 39 - 41: 18(bool) SLessThan 39 40 - BranchConditional 41 42 12 - 42: Label + 35: 7(int) Load 9(i) + 37: 14(bool) IEqual 35 36 + SelectionMerge 39 None + BranchConditional 37 38 39 + 38: Label + Store 40(D) 41 + Branch 12 + 42: Label + Store 43(E) 44 + Branch 39 + 39: Label + Store 45(F) 46 Branch 11 12: Label - Store 43(G) 44 + Store 47(G) 48 Branch 6 6: Label Return diff --git a/Test/baseResults/spv.doWhileLoop.frag.out b/Test/baseResults/spv.doWhileLoop.frag.out index 18783bad..71b40625 100644 --- a/Test/baseResults/spv.doWhileLoop.frag.out +++ b/Test/baseResults/spv.doWhileLoop.frag.out @@ -5,7 +5,7 @@ Linked fragment stage: // Module Version 99 // Generated by (magic number): 51a00bb -// Id's are bound by 34 +// Id's are bound by 38 Source GLSL 110 1: ExtInstImport "GLSL.std.450" @@ -14,11 +14,11 @@ Linked fragment stage: Name 4 "main" Name 10 "color" Name 12 "BaseColor" - Name 19 "bigColor" - Name 26 "d" - Name 32 "gl_FragColor" + Name 25 "d" + Name 30 "bigColor" + Name 36 "gl_FragColor" Decorate 12(BaseColor) Smooth - Decorate 32(gl_FragColor) BuiltIn FragColor + Decorate 36(gl_FragColor) BuiltIn FragColor 2: TypeVoid 3: TypeFunction 2 7: TypeFloat 32 @@ -26,13 +26,15 @@ Linked fragment stage: 9: TypePointer Function 8(fvec4) 11: TypePointer Input 8(fvec4) 12(BaseColor): 11(ptr) Variable Input - 18: TypePointer UniformConstant 8(fvec4) - 19(bigColor): 18(ptr) Variable UniformConstant - 25: TypePointer UniformConstant 7(float) - 26(d): 25(ptr) Variable UniformConstant - 28: TypeBool - 31: TypePointer Output 8(fvec4) -32(gl_FragColor): 31(ptr) Variable Output + 17: TypeBool + 18: 17(bool) ConstantTrue + 24: TypePointer UniformConstant 7(float) + 25(d): 24(ptr) Variable UniformConstant + 29: TypePointer UniformConstant 8(fvec4) + 30(bigColor): 29(ptr) Variable UniformConstant + 34: 17(bool) ConstantFalse + 35: TypePointer Output 8(fvec4) +36(gl_FragColor): 35(ptr) Variable Output 4(main): 2 Function None 3 5: Label 10(color): 9(ptr) Variable Function @@ -40,25 +42,30 @@ Linked fragment stage: Store 10(color) 13 Branch 14 14: Label + 16: 17(bool) Phi 18 5 34 20 LoopMerge 15 None - Branch 16 - 16: Label - 20: 8(fvec4) Load 19(bigColor) - 21: 8(fvec4) Load 10(color) - 22: 8(fvec4) FAdd 21 20 - Store 10(color) 22 - Branch 17 - 17: Label - 23: 8(fvec4) Load 10(color) - 24: 7(float) CompositeExtract 23 0 - 27: 7(float) Load 26(d) - 29: 28(bool) FOrdLessThan 24 27 - BranchConditional 29 30 15 - 30: Label - Branch 14 + Branch 19 + 19: Label + SelectionMerge 20 None + BranchConditional 16 20 21 + 21: Label + 22: 8(fvec4) Load 10(color) + 23: 7(float) CompositeExtract 22 0 + 26: 7(float) Load 25(d) + 27: 17(bool) FOrdLessThan 23 26 + SelectionMerge 28 None + BranchConditional 27 28 15 + 28: Label + Branch 20 + 20: Label + 31: 8(fvec4) Load 30(bigColor) + 32: 8(fvec4) Load 10(color) + 33: 8(fvec4) FAdd 32 31 + Store 10(color) 33 + Branch 14 15: Label - 33: 8(fvec4) Load 10(color) - Store 32(gl_FragColor) 33 + 37: 8(fvec4) Load 10(color) + Store 36(gl_FragColor) 37 Branch 6 6: Label Return diff --git a/Test/baseResults/spv.loops.frag.out b/Test/baseResults/spv.loops.frag.out index 750e11d3..0e7c712a 100644 --- a/Test/baseResults/spv.loops.frag.out +++ b/Test/baseResults/spv.loops.frag.out @@ -7,7 +7,7 @@ Linked fragment stage: // Module Version 99 // Generated by (magic number): 51a00bb -// Id's are bound by 737 +// Id's are bound by 750 Source GLSL 130 1: ExtInstImport "GLSL.std.450" @@ -27,67 +27,67 @@ Linked fragment stage: Name 130 "i" Name 136 "Count" Name 140 "bigColor2" - Name 151 "bigColor3" - Name 160 "i" - Name 175 "i" - Name 213 "i" - Name 238 "i" - Name 266 "i" - Name 296 "bigColor4" - Name 335 "bigColor5" - Name 341 "d5" - Name 359 "d6" - Name 371 "bigColor6" - Name 406 "d7" - Name 437 "bigColor7" - Name 459 "d8" - Name 506 "d9" - Name 538 "d10" - Name 549 "d11" - Name 561 "d12" - Name 589 "bigColor8" - Name 617 "gl_FragColor" - Name 623 "d14" - Name 629 "d15" - Name 646 "d16" - Name 683 "d18" - Name 694 "d17" - Name 720 "d13" - Name 721 "d19" - Name 722 "d20" - Name 723 "d21" - Name 724 "d22" - Name 725 "d23" - Name 726 "d24" - Name 727 "d25" - Name 728 "d26" - Name 729 "d27" - Name 730 "d28" - Name 731 "d29" - Name 732 "d30" - Name 733 "d31" - Name 734 "d32" - Name 735 "d33" - Name 736 "d34" + Name 158 "bigColor3" + Name 163 "i" + Name 178 "i" + Name 216 "i" + Name 241 "i" + Name 269 "i" + Name 306 "bigColor4" + Name 344 "d5" + Name 348 "bigColor5" + Name 366 "d6" + Name 378 "bigColor6" + Name 413 "d7" + Name 447 "bigColor7" + Name 472 "d8" + Name 517 "d9" + Name 549 "d10" + Name 560 "d11" + Name 572 "d12" + Name 600 "bigColor8" + Name 628 "gl_FragColor" + Name 634 "d14" + Name 640 "d15" + Name 657 "d16" + Name 696 "d17" + Name 702 "d18" + Name 733 "d13" + Name 734 "d19" + Name 735 "d20" + Name 736 "d21" + Name 737 "d22" + Name 738 "d23" + Name 739 "d24" + Name 740 "d25" + Name 741 "d26" + Name 742 "d27" + Name 743 "d28" + Name 744 "d29" + Name 745 "d30" + Name 746 "d31" + Name 747 "d32" + Name 748 "d33" + Name 749 "d34" Decorate 12(BaseColor) Smooth - Decorate 617(gl_FragColor) BuiltIn FragColor - Decorate 720(d13) NoStaticUse - Decorate 721(d19) NoStaticUse - Decorate 722(d20) NoStaticUse - Decorate 723(d21) NoStaticUse - Decorate 724(d22) NoStaticUse - Decorate 725(d23) NoStaticUse - Decorate 726(d24) NoStaticUse - Decorate 727(d25) NoStaticUse - Decorate 728(d26) NoStaticUse - Decorate 729(d27) NoStaticUse - Decorate 730(d28) NoStaticUse - Decorate 731(d29) NoStaticUse - Decorate 732(d30) NoStaticUse - Decorate 733(d31) NoStaticUse - Decorate 734(d32) NoStaticUse - Decorate 735(d33) NoStaticUse - Decorate 736(d34) NoStaticUse + Decorate 628(gl_FragColor) BuiltIn FragColor + Decorate 733(d13) NoStaticUse + Decorate 734(d19) NoStaticUse + Decorate 735(d20) NoStaticUse + Decorate 736(d21) NoStaticUse + Decorate 737(d22) NoStaticUse + Decorate 738(d23) NoStaticUse + Decorate 739(d24) NoStaticUse + Decorate 740(d25) NoStaticUse + Decorate 741(d26) NoStaticUse + Decorate 742(d27) NoStaticUse + Decorate 743(d28) NoStaticUse + Decorate 744(d29) NoStaticUse + Decorate 745(d30) NoStaticUse + Decorate 746(d31) NoStaticUse + Decorate 747(d32) NoStaticUse + Decorate 748(d33) NoStaticUse + Decorate 749(d34) NoStaticUse 2: TypeVoid 3: TypeFunction 2 7: TypeFloat 32 @@ -120,61 +120,62 @@ Linked fragment stage: 136(Count): 135(ptr) Variable UniformConstant 140(bigColor2): 51(ptr) Variable UniformConstant 145: 128(int) Constant 1 - 151(bigColor3): 51(ptr) Variable UniformConstant - 164: 128(int) Constant 42 - 179: 128(int) Constant 100 - 184: 7(float) Constant 1101004800 - 217: 128(int) Constant 120 - 296(bigColor4): 51(ptr) Variable UniformConstant - 335(bigColor5): 51(ptr) Variable UniformConstant - 341(d5): 46(ptr) Variable UniformConstant - 359(d6): 46(ptr) Variable UniformConstant - 371(bigColor6): 51(ptr) Variable UniformConstant - 406(d7): 46(ptr) Variable UniformConstant - 432: 7(float) Constant 0 - 437(bigColor7): 51(ptr) Variable UniformConstant - 459(d8): 46(ptr) Variable UniformConstant - 478: 7(float) Constant 1073741824 - 506(d9): 46(ptr) Variable UniformConstant - 523: 7(float) Constant 1084227584 - 538(d10): 46(ptr) Variable UniformConstant - 549(d11): 46(ptr) Variable UniformConstant - 561(d12): 46(ptr) Variable UniformConstant - 586: 7(float) Constant 1092616192 - 589(bigColor8): 51(ptr) Variable UniformConstant - 616: TypePointer Output 8(fvec4) -617(gl_FragColor): 616(ptr) Variable Output - 623(d14): 46(ptr) Variable UniformConstant - 629(d15): 46(ptr) Variable UniformConstant - 646(d16): 46(ptr) Variable UniformConstant - 683(d18): 46(ptr) Variable UniformConstant - 694(d17): 46(ptr) Variable UniformConstant - 720(d13): 46(ptr) Variable UniformConstant - 721(d19): 46(ptr) Variable UniformConstant - 722(d20): 46(ptr) Variable UniformConstant - 723(d21): 46(ptr) Variable UniformConstant - 724(d22): 46(ptr) Variable UniformConstant - 725(d23): 46(ptr) Variable UniformConstant - 726(d24): 46(ptr) Variable UniformConstant - 727(d25): 46(ptr) Variable UniformConstant - 728(d26): 46(ptr) Variable UniformConstant - 729(d27): 46(ptr) Variable UniformConstant - 730(d28): 46(ptr) Variable UniformConstant - 731(d29): 46(ptr) Variable UniformConstant - 732(d30): 46(ptr) Variable UniformConstant - 733(d31): 46(ptr) Variable UniformConstant - 734(d32): 46(ptr) Variable UniformConstant - 735(d33): 46(ptr) Variable UniformConstant - 736(d34): 46(ptr) Variable UniformConstant + 158(bigColor3): 51(ptr) Variable UniformConstant + 162: 16(bool) ConstantFalse + 167: 128(int) Constant 42 + 182: 128(int) Constant 100 + 187: 7(float) Constant 1101004800 + 220: 128(int) Constant 120 + 306(bigColor4): 51(ptr) Variable UniformConstant + 344(d5): 46(ptr) Variable UniformConstant + 348(bigColor5): 51(ptr) Variable UniformConstant + 366(d6): 46(ptr) Variable UniformConstant + 378(bigColor6): 51(ptr) Variable UniformConstant + 413(d7): 46(ptr) Variable UniformConstant + 442: 7(float) Constant 0 + 447(bigColor7): 51(ptr) Variable UniformConstant + 472(d8): 46(ptr) Variable UniformConstant + 494: 7(float) Constant 1073741824 + 517(d9): 46(ptr) Variable UniformConstant + 534: 7(float) Constant 1084227584 + 549(d10): 46(ptr) Variable UniformConstant + 560(d11): 46(ptr) Variable UniformConstant + 572(d12): 46(ptr) Variable UniformConstant + 597: 7(float) Constant 1092616192 + 600(bigColor8): 51(ptr) Variable UniformConstant + 627: TypePointer Output 8(fvec4) +628(gl_FragColor): 627(ptr) Variable Output + 634(d14): 46(ptr) Variable UniformConstant + 640(d15): 46(ptr) Variable UniformConstant + 657(d16): 46(ptr) Variable UniformConstant + 696(d17): 46(ptr) Variable UniformConstant + 702(d18): 46(ptr) Variable UniformConstant + 733(d13): 46(ptr) Variable UniformConstant + 734(d19): 46(ptr) Variable UniformConstant + 735(d20): 46(ptr) Variable UniformConstant + 736(d21): 46(ptr) Variable UniformConstant + 737(d22): 46(ptr) Variable UniformConstant + 738(d23): 46(ptr) Variable UniformConstant + 739(d24): 46(ptr) Variable UniformConstant + 740(d25): 46(ptr) Variable UniformConstant + 741(d26): 46(ptr) Variable UniformConstant + 742(d27): 46(ptr) Variable UniformConstant + 743(d28): 46(ptr) Variable UniformConstant + 744(d29): 46(ptr) Variable UniformConstant + 745(d30): 46(ptr) Variable UniformConstant + 746(d31): 46(ptr) Variable UniformConstant + 747(d32): 46(ptr) Variable UniformConstant + 748(d33): 46(ptr) Variable UniformConstant + 749(d34): 46(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 10(color): 9(ptr) Variable Function 130(i): 129(ptr) Variable Function - 160(i): 129(ptr) Variable Function - 175(i): 129(ptr) Variable Function - 213(i): 129(ptr) Variable Function - 238(i): 129(ptr) Variable Function - 266(i): 129(ptr) Variable Function + 163(i): 129(ptr) Variable Function + 178(i): 129(ptr) Variable Function + 216(i): 129(ptr) Variable Function + 241(i): 129(ptr) Variable Function + 269(i): 129(ptr) Variable Function 13: 8(fvec4) Load 12(BaseColor) Store 10(color) 13 Branch 14 @@ -334,777 +335,807 @@ Linked fragment stage: 133: Label Branch 147 147: Label + 149: 16(bool) Phi 17 133 162 151 LoopMerge 148 None - Branch 149 - 149: Label - 152: 8(fvec4) Load 151(bigColor3) - 153: 8(fvec4) Load 10(color) - 154: 8(fvec4) FAdd 153 152 - Store 10(color) 154 Branch 150 150: Label - 155: 8(fvec4) Load 10(color) - 156: 7(float) CompositeExtract 155 0 - 157: 7(float) Load 92(d2) - 158: 16(bool) FOrdLessThan 156 157 - BranchConditional 158 159 148 - 159: Label - Branch 147 + SelectionMerge 151 None + BranchConditional 149 151 152 + 152: Label + 153: 8(fvec4) Load 10(color) + 154: 7(float) CompositeExtract 153 0 + 155: 7(float) Load 92(d2) + 156: 16(bool) FOrdLessThan 154 155 + SelectionMerge 157 None + BranchConditional 156 157 148 + 157: Label + Branch 151 + 151: Label + 159: 8(fvec4) Load 158(bigColor3) + 160: 8(fvec4) Load 10(color) + 161: 8(fvec4) FAdd 160 159 + Store 10(color) 161 + Branch 147 148: Label - Store 160(i) 131 - Branch 161 - 161: Label - 163: 128(int) Load 160(i) - 165: 16(bool) SLessThan 163 164 - LoopMerge 162 None - BranchConditional 165 166 162 - 166: Label - 167: 7(float) Load 97(d3) - 168: 8(fvec4) Load 10(color) - 169: 7(float) CompositeExtract 168 2 - 170: 7(float) FAdd 169 167 + Store 163(i) 131 + Branch 164 + 164: Label + 166: 128(int) Load 163(i) + 168: 16(bool) SLessThan 166 167 + LoopMerge 165 None + BranchConditional 168 169 165 + 169: Label + 170: 7(float) Load 97(d3) 171: 8(fvec4) Load 10(color) - 172: 8(fvec4) CompositeInsert 170 171 2 - Store 10(color) 172 - 173: 128(int) Load 160(i) - 174: 128(int) IAdd 173 145 - Store 160(i) 174 - Branch 161 - 162: Label - Store 175(i) 131 - Branch 176 - 176: Label - 178: 128(int) Load 175(i) - 180: 16(bool) SLessThan 178 179 - LoopMerge 177 None - BranchConditional 180 181 177 - 181: Label - 182: 8(fvec4) Load 10(color) - 183: 7(float) CompositeExtract 182 2 - 185: 16(bool) FOrdLessThan 183 184 - SelectionMerge 187 None - BranchConditional 185 186 193 - 186: Label - 188: 8(fvec4) Load 10(color) - 189: 7(float) CompositeExtract 188 0 - 190: 7(float) FAdd 189 85 + 172: 7(float) CompositeExtract 171 2 + 173: 7(float) FAdd 172 170 + 174: 8(fvec4) Load 10(color) + 175: 8(fvec4) CompositeInsert 173 174 2 + Store 10(color) 175 + 176: 128(int) Load 163(i) + 177: 128(int) IAdd 176 145 + Store 163(i) 177 + Branch 164 + 165: Label + Store 178(i) 131 + Branch 179 + 179: Label + 181: 128(int) Load 178(i) + 183: 16(bool) SLessThan 181 182 + LoopMerge 180 None + BranchConditional 183 184 180 + 184: Label + 185: 8(fvec4) Load 10(color) + 186: 7(float) CompositeExtract 185 2 + 188: 16(bool) FOrdLessThan 186 187 + SelectionMerge 190 None + BranchConditional 188 189 196 + 189: Label 191: 8(fvec4) Load 10(color) - 192: 8(fvec4) CompositeInsert 190 191 0 - Store 10(color) 192 - Branch 187 - 193: Label + 192: 7(float) CompositeExtract 191 0 + 193: 7(float) FAdd 192 85 194: 8(fvec4) Load 10(color) - 195: 7(float) CompositeExtract 194 1 - 196: 7(float) FAdd 195 85 + 195: 8(fvec4) CompositeInsert 193 194 0 + Store 10(color) 195 + Branch 190 + 196: Label 197: 8(fvec4) Load 10(color) - 198: 8(fvec4) CompositeInsert 196 197 1 - Store 10(color) 198 - Branch 187 - 187: Label - 199: 8(fvec4) Load 10(color) - 200: 7(float) CompositeExtract 199 3 - 201: 16(bool) FOrdLessThan 200 184 - SelectionMerge 203 None - BranchConditional 201 202 203 - 202: Label - 204: 8(fvec4) Load 10(color) - 205: 7(float) CompositeExtract 204 2 - 206: 8(fvec4) Load 10(color) - 207: 7(float) CompositeExtract 206 1 - 208: 16(bool) FOrdGreaterThan 205 207 - SelectionMerge 210 None - BranchConditional 208 209 210 - 209: Label - Branch 210 - 210: Label - Branch 203 - 203: Label - 211: 128(int) Load 175(i) - 212: 128(int) IAdd 211 145 - Store 175(i) 212 - Branch 176 - 177: Label - Store 213(i) 131 - Branch 214 - 214: Label - 216: 128(int) Load 213(i) - 218: 16(bool) SLessThan 216 217 - LoopMerge 215 None - BranchConditional 218 219 215 - 219: Label - 220: 8(fvec4) Load 10(color) - 221: 7(float) CompositeExtract 220 2 - 222: 16(bool) FOrdLessThan 221 184 - SelectionMerge 224 None - BranchConditional 222 223 230 - 223: Label - 225: 8(fvec4) Load 10(color) - 226: 7(float) CompositeExtract 225 0 - 227: 7(float) FAdd 226 85 + 198: 7(float) CompositeExtract 197 1 + 199: 7(float) FAdd 198 85 + 200: 8(fvec4) Load 10(color) + 201: 8(fvec4) CompositeInsert 199 200 1 + Store 10(color) 201 + Branch 190 + 190: Label + 202: 8(fvec4) Load 10(color) + 203: 7(float) CompositeExtract 202 3 + 204: 16(bool) FOrdLessThan 203 187 + SelectionMerge 206 None + BranchConditional 204 205 206 + 205: Label + 207: 8(fvec4) Load 10(color) + 208: 7(float) CompositeExtract 207 2 + 209: 8(fvec4) Load 10(color) + 210: 7(float) CompositeExtract 209 1 + 211: 16(bool) FOrdGreaterThan 208 210 + SelectionMerge 213 None + BranchConditional 211 212 213 + 212: Label + Branch 213 + 213: Label + Branch 206 + 206: Label + 214: 128(int) Load 178(i) + 215: 128(int) IAdd 214 145 + Store 178(i) 215 + Branch 179 + 180: Label + Store 216(i) 131 + Branch 217 + 217: Label + 219: 128(int) Load 216(i) + 221: 16(bool) SLessThan 219 220 + LoopMerge 218 None + BranchConditional 221 222 218 + 222: Label + 223: 8(fvec4) Load 10(color) + 224: 7(float) CompositeExtract 223 2 + 225: 16(bool) FOrdLessThan 224 187 + SelectionMerge 227 None + BranchConditional 225 226 233 + 226: Label 228: 8(fvec4) Load 10(color) - 229: 8(fvec4) CompositeInsert 227 228 0 - Store 10(color) 229 - Branch 224 - 230: Label + 229: 7(float) CompositeExtract 228 0 + 230: 7(float) FAdd 229 85 231: 8(fvec4) Load 10(color) - 232: 7(float) CompositeExtract 231 1 - 233: 7(float) FAdd 232 85 + 232: 8(fvec4) CompositeInsert 230 231 0 + Store 10(color) 232 + Branch 227 + 233: Label 234: 8(fvec4) Load 10(color) - 235: 8(fvec4) CompositeInsert 233 234 1 - Store 10(color) 235 - Branch 224 - 224: Label - 236: 128(int) Load 213(i) - 237: 128(int) IAdd 236 145 - Store 213(i) 237 - Branch 214 - 215: Label - Store 238(i) 131 - Branch 239 - 239: Label - 241: 128(int) Load 238(i) - 242: 16(bool) SLessThan 241 164 - LoopMerge 240 None - BranchConditional 242 243 240 - 243: Label - 244: 7(float) Load 97(d3) - 245: 8(fvec4) Load 10(color) - 246: 7(float) CompositeExtract 245 2 - 247: 7(float) FAdd 246 244 + 235: 7(float) CompositeExtract 234 1 + 236: 7(float) FAdd 235 85 + 237: 8(fvec4) Load 10(color) + 238: 8(fvec4) CompositeInsert 236 237 1 + Store 10(color) 238 + Branch 227 + 227: Label + 239: 128(int) Load 216(i) + 240: 128(int) IAdd 239 145 + Store 216(i) 240 + Branch 217 + 218: Label + Store 241(i) 131 + Branch 242 + 242: Label + 244: 128(int) Load 241(i) + 245: 16(bool) SLessThan 244 167 + LoopMerge 243 None + BranchConditional 245 246 243 + 246: Label + 247: 7(float) Load 97(d3) 248: 8(fvec4) Load 10(color) - 249: 8(fvec4) CompositeInsert 247 248 2 - Store 10(color) 249 - 250: 8(fvec4) Load 10(color) - 251: 7(float) CompositeExtract 250 0 - 252: 7(float) Load 119(d4) - 253: 16(bool) FOrdLessThan 251 252 - SelectionMerge 255 None - BranchConditional 253 254 255 - 254: Label - 256: 128(int) Load 238(i) - 257: 128(int) IAdd 256 145 - Store 238(i) 257 - Branch 239 - 255: Label - 259: 8(fvec4) Load 10(color) - 260: 7(float) CompositeExtract 259 3 - 261: 7(float) FAdd 260 85 + 249: 7(float) CompositeExtract 248 2 + 250: 7(float) FAdd 249 247 + 251: 8(fvec4) Load 10(color) + 252: 8(fvec4) CompositeInsert 250 251 2 + Store 10(color) 252 + 253: 8(fvec4) Load 10(color) + 254: 7(float) CompositeExtract 253 0 + 255: 7(float) Load 119(d4) + 256: 16(bool) FOrdLessThan 254 255 + SelectionMerge 258 None + BranchConditional 256 257 258 + 257: Label + 259: 128(int) Load 241(i) + 260: 128(int) IAdd 259 145 + Store 241(i) 260 + Branch 242 + 258: Label 262: 8(fvec4) Load 10(color) - 263: 8(fvec4) CompositeInsert 261 262 3 - Store 10(color) 263 - 264: 128(int) Load 238(i) - 265: 128(int) IAdd 264 145 - Store 238(i) 265 - Branch 239 - 240: Label - Store 266(i) 131 - Branch 267 - 267: Label - 269: 128(int) Load 266(i) - 270: 16(bool) SLessThan 269 164 - LoopMerge 268 None - BranchConditional 270 271 268 - 271: Label - 272: 7(float) Load 97(d3) - 273: 8(fvec4) Load 10(color) - 274: 7(float) CompositeExtract 273 2 - 275: 7(float) FAdd 274 272 + 263: 7(float) CompositeExtract 262 3 + 264: 7(float) FAdd 263 85 + 265: 8(fvec4) Load 10(color) + 266: 8(fvec4) CompositeInsert 264 265 3 + Store 10(color) 266 + 267: 128(int) Load 241(i) + 268: 128(int) IAdd 267 145 + Store 241(i) 268 + Branch 242 + 243: Label + Store 269(i) 131 + Branch 270 + 270: Label + 272: 128(int) Load 269(i) + 273: 16(bool) SLessThan 272 167 + LoopMerge 271 None + BranchConditional 273 274 271 + 274: Label + 275: 7(float) Load 97(d3) 276: 8(fvec4) Load 10(color) - 277: 8(fvec4) CompositeInsert 275 276 2 - Store 10(color) 277 - 278: 8(fvec4) Load 10(color) - 279: 7(float) CompositeExtract 278 0 - 280: 7(float) Load 119(d4) - 281: 16(bool) FOrdLessThan 279 280 - SelectionMerge 283 None - BranchConditional 281 282 283 - 282: Label - Branch 268 - 283: Label - 285: 8(fvec4) Load 10(color) - 286: 7(float) CompositeExtract 285 3 - 287: 7(float) FAdd 286 85 + 277: 7(float) CompositeExtract 276 2 + 278: 7(float) FAdd 277 275 + 279: 8(fvec4) Load 10(color) + 280: 8(fvec4) CompositeInsert 278 279 2 + Store 10(color) 280 + 281: 8(fvec4) Load 10(color) + 282: 7(float) CompositeExtract 281 0 + 283: 7(float) Load 119(d4) + 284: 16(bool) FOrdLessThan 282 283 + SelectionMerge 286 None + BranchConditional 284 285 286 + 285: Label + Branch 271 + 286: Label 288: 8(fvec4) Load 10(color) - 289: 8(fvec4) CompositeInsert 287 288 3 - Store 10(color) 289 - 290: 128(int) Load 266(i) - 291: 128(int) IAdd 290 145 - Store 266(i) 291 - Branch 267 - 268: Label - Branch 292 - 292: Label - LoopMerge 293 None - Branch 294 - 294: Label - 297: 8(fvec4) Load 296(bigColor4) - 298: 8(fvec4) Load 10(color) - 299: 8(fvec4) FAdd 298 297 - Store 10(color) 299 - 300: 8(fvec4) Load 10(color) - 301: 7(float) CompositeExtract 300 0 - 302: 7(float) Load 119(d4) - 303: 16(bool) FOrdLessThan 301 302 - SelectionMerge 305 None - BranchConditional 303 304 305 - 304: Label - Branch 295 - 305: Label - 307: 8(fvec4) Load 10(color) - 308: 7(float) CompositeExtract 307 1 - 309: 7(float) Load 119(d4) - 310: 16(bool) FOrdLessThan 308 309 - SelectionMerge 312 None - BranchConditional 310 311 319 - 311: Label - 313: 7(float) Load 119(d4) - 314: 8(fvec4) Load 10(color) - 315: 7(float) CompositeExtract 314 1 - 316: 7(float) FAdd 315 313 - 317: 8(fvec4) Load 10(color) - 318: 8(fvec4) CompositeInsert 316 317 1 - Store 10(color) 318 - Branch 312 - 319: Label - 320: 7(float) Load 119(d4) - 321: 8(fvec4) Load 10(color) - 322: 7(float) CompositeExtract 321 0 - 323: 7(float) FAdd 322 320 - 324: 8(fvec4) Load 10(color) - 325: 8(fvec4) CompositeInsert 323 324 0 - Store 10(color) 325 - Branch 312 - 312: Label + 289: 7(float) CompositeExtract 288 3 + 290: 7(float) FAdd 289 85 + 291: 8(fvec4) Load 10(color) + 292: 8(fvec4) CompositeInsert 290 291 3 + Store 10(color) 292 + 293: 128(int) Load 269(i) + 294: 128(int) IAdd 293 145 + Store 269(i) 294 + Branch 270 + 271: Label Branch 295 295: Label - 326: 8(fvec4) Load 10(color) - 327: 7(float) CompositeExtract 326 2 - 328: 7(float) Load 119(d4) - 329: 16(bool) FOrdLessThan 327 328 - BranchConditional 329 330 293 - 330: Label - Branch 292 - 293: Label - Branch 331 - 331: Label - LoopMerge 332 None - Branch 333 - 333: Label - 336: 8(fvec4) Load 335(bigColor5) - 337: 8(fvec4) Load 10(color) - 338: 8(fvec4) FAdd 337 336 - Store 10(color) 338 - 339: 8(fvec4) Load 10(color) - 340: 7(float) CompositeExtract 339 1 - 342: 7(float) Load 341(d5) - 343: 16(bool) FOrdLessThan 340 342 - SelectionMerge 345 None - BranchConditional 343 344 345 - 344: Label - 346: 7(float) Load 341(d5) - 347: 8(fvec4) Load 10(color) - 348: 7(float) CompositeExtract 347 1 - 349: 7(float) FAdd 348 346 - 350: 8(fvec4) Load 10(color) - 351: 8(fvec4) CompositeInsert 349 350 1 - Store 10(color) 351 - Branch 345 - 345: Label - Branch 334 - 334: Label + 297: 16(bool) Phi 17 271 162 314 162 322 + LoopMerge 296 None + Branch 298 + 298: Label + SelectionMerge 299 None + BranchConditional 297 299 300 + 300: Label + 301: 8(fvec4) Load 10(color) + 302: 7(float) CompositeExtract 301 2 + 303: 7(float) Load 119(d4) + 304: 16(bool) FOrdLessThan 302 303 + SelectionMerge 305 None + BranchConditional 304 305 296 + 305: Label + Branch 299 + 299: Label + 307: 8(fvec4) Load 306(bigColor4) + 308: 8(fvec4) Load 10(color) + 309: 8(fvec4) FAdd 308 307 + Store 10(color) 309 + 310: 8(fvec4) Load 10(color) + 311: 7(float) CompositeExtract 310 0 + 312: 7(float) Load 119(d4) + 313: 16(bool) FOrdLessThan 311 312 + SelectionMerge 315 None + BranchConditional 313 314 315 + 314: Label + Branch 295 + 315: Label + 317: 8(fvec4) Load 10(color) + 318: 7(float) CompositeExtract 317 1 + 319: 7(float) Load 119(d4) + 320: 16(bool) FOrdLessThan 318 319 + SelectionMerge 322 None + BranchConditional 320 321 329 + 321: Label + 323: 7(float) Load 119(d4) + 324: 8(fvec4) Load 10(color) + 325: 7(float) CompositeExtract 324 1 + 326: 7(float) FAdd 325 323 + 327: 8(fvec4) Load 10(color) + 328: 8(fvec4) CompositeInsert 326 327 1 + Store 10(color) 328 + Branch 322 + 329: Label + 330: 7(float) Load 119(d4) + 331: 8(fvec4) Load 10(color) + 332: 7(float) CompositeExtract 331 0 + 333: 7(float) FAdd 332 330 + 334: 8(fvec4) Load 10(color) + 335: 8(fvec4) CompositeInsert 333 334 0 + Store 10(color) 335 + Branch 322 + 322: Label + Branch 295 + 296: Label + Branch 336 + 336: Label + 338: 16(bool) Phi 17 296 162 357 + LoopMerge 337 None + Branch 339 + 339: Label + SelectionMerge 340 None + BranchConditional 338 340 341 + 341: Label + 342: 8(fvec4) Load 10(color) + 343: 7(float) CompositeExtract 342 0 + 345: 7(float) Load 344(d5) + 346: 16(bool) FOrdLessThan 343 345 + SelectionMerge 347 None + BranchConditional 346 347 337 + 347: Label + Branch 340 + 340: Label + 349: 8(fvec4) Load 348(bigColor5) + 350: 8(fvec4) Load 10(color) + 351: 8(fvec4) FAdd 350 349 + Store 10(color) 351 352: 8(fvec4) Load 10(color) - 353: 7(float) CompositeExtract 352 0 - 354: 7(float) Load 341(d5) + 353: 7(float) CompositeExtract 352 1 + 354: 7(float) Load 344(d5) 355: 16(bool) FOrdLessThan 353 354 - BranchConditional 355 356 332 - 356: Label - Branch 331 - 332: Label - 357: 8(fvec4) Load 10(color) - 358: 7(float) CompositeExtract 357 0 - 360: 7(float) Load 359(d6) - 361: 16(bool) FOrdLessThan 358 360 - SelectionMerge 363 None - BranchConditional 361 362 375 - 362: Label - Branch 364 - 364: Label - 366: 8(fvec4) Load 10(color) - 367: 7(float) CompositeExtract 366 1 - 368: 7(float) Load 359(d6) - 369: 16(bool) FOrdLessThan 367 368 - LoopMerge 365 None - BranchConditional 369 370 365 - 370: Label - 372: 8(fvec4) Load 371(bigColor6) - 373: 8(fvec4) Load 10(color) - 374: 8(fvec4) FAdd 373 372 - Store 10(color) 374 - Branch 364 - 365: Label - Branch 363 - 375: Label - Branch 376 - 376: Label - 378: 8(fvec4) Load 10(color) - 379: 7(float) CompositeExtract 378 2 - 380: 7(float) Load 359(d6) - 381: 16(bool) FOrdLessThan 379 380 - LoopMerge 377 None - BranchConditional 381 382 377 - 382: Label - 383: 8(fvec4) Load 371(bigColor6) - 384: 7(float) CompositeExtract 383 2 - 385: 8(fvec4) Load 10(color) - 386: 7(float) CompositeExtract 385 2 - 387: 7(float) FAdd 386 384 - 388: 8(fvec4) Load 10(color) - 389: 8(fvec4) CompositeInsert 387 388 2 - Store 10(color) 389 - Branch 376 - 377: Label - Branch 363 - 363: Label - 390: 8(fvec4) Load 10(color) - 391: 7(float) CompositeExtract 390 0 - 392: 7(float) Load 359(d6) - 393: 16(bool) FOrdLessThan 391 392 - SelectionMerge 395 None - BranchConditional 393 394 412 - 394: Label - Branch 396 - 396: Label - 398: 8(fvec4) Load 10(color) - 399: 7(float) CompositeExtract 398 1 - 400: 7(float) Load 359(d6) - 401: 16(bool) FOrdLessThan 399 400 - LoopMerge 397 None - BranchConditional 401 402 397 - 402: Label - 403: 8(fvec4) Load 371(bigColor6) - 404: 8(fvec4) Load 10(color) - 405: 8(fvec4) FAdd 404 403 - Store 10(color) 405 - 407: 7(float) Load 406(d7) - 408: 16(bool) FOrdLessThan 407 85 - SelectionMerge 410 None - BranchConditional 408 409 410 - 409: Label - Branch 397 - 410: Label - Branch 396 - 397: Label - Branch 395 - 412: Label - Branch 413 - 413: Label - 415: 8(fvec4) Load 10(color) - 416: 7(float) CompositeExtract 415 2 - 417: 7(float) Load 359(d6) - 418: 16(bool) FOrdLessThan 416 417 - LoopMerge 414 None - BranchConditional 418 419 414 - 419: Label - 420: 8(fvec4) Load 371(bigColor6) - 421: 7(float) CompositeExtract 420 2 - 422: 8(fvec4) Load 10(color) - 423: 7(float) CompositeExtract 422 2 - 424: 7(float) FAdd 423 421 - 425: 8(fvec4) Load 10(color) - 426: 8(fvec4) CompositeInsert 424 425 2 - Store 10(color) 426 - Branch 413 - 414: Label - Branch 395 - 395: Label - Branch 427 - 427: Label - LoopMerge 428 None - Branch 429 - 429: Label - 431: 7(float) Load 406(d7) - 433: 16(bool) FOrdLessThan 431 432 - SelectionMerge 435 None - BranchConditional 433 434 435 - 434: Label - Branch 428 - 435: Label - 438: 8(fvec4) Load 437(bigColor7) - 439: 8(fvec4) Load 10(color) - 440: 8(fvec4) FAdd 439 438 - Store 10(color) 440 - 441: 7(float) Load 406(d7) - 442: 16(bool) FOrdLessThan 441 85 - SelectionMerge 444 None - BranchConditional 442 443 444 - 443: Label - 445: 8(fvec4) Load 10(color) - 446: 7(float) CompositeExtract 445 2 - 447: 7(float) FAdd 446 85 - 448: 8(fvec4) Load 10(color) - 449: 8(fvec4) CompositeInsert 447 448 2 - Store 10(color) 449 - Branch 428 - 444: Label - 451: 8(fvec4) Load 12(BaseColor) - 452: 8(fvec4) Load 10(color) - 453: 8(fvec4) FAdd 452 451 - Store 10(color) 453 - Branch 430 - 430: Label - BranchConditional 17 454 428 + SelectionMerge 357 None + BranchConditional 355 356 357 + 356: Label + 358: 7(float) Load 344(d5) + 359: 8(fvec4) Load 10(color) + 360: 7(float) CompositeExtract 359 1 + 361: 7(float) FAdd 360 358 + 362: 8(fvec4) Load 10(color) + 363: 8(fvec4) CompositeInsert 361 362 1 + Store 10(color) 363 + Branch 357 + 357: Label + Branch 336 + 337: Label + 364: 8(fvec4) Load 10(color) + 365: 7(float) CompositeExtract 364 0 + 367: 7(float) Load 366(d6) + 368: 16(bool) FOrdLessThan 365 367 + SelectionMerge 370 None + BranchConditional 368 369 382 + 369: Label + Branch 371 + 371: Label + 373: 8(fvec4) Load 10(color) + 374: 7(float) CompositeExtract 373 1 + 375: 7(float) Load 366(d6) + 376: 16(bool) FOrdLessThan 374 375 + LoopMerge 372 None + BranchConditional 376 377 372 + 377: Label + 379: 8(fvec4) Load 378(bigColor6) + 380: 8(fvec4) Load 10(color) + 381: 8(fvec4) FAdd 380 379 + Store 10(color) 381 + Branch 371 + 372: Label + Branch 370 + 382: Label + Branch 383 + 383: Label + 385: 8(fvec4) Load 10(color) + 386: 7(float) CompositeExtract 385 2 + 387: 7(float) Load 366(d6) + 388: 16(bool) FOrdLessThan 386 387 + LoopMerge 384 None + BranchConditional 388 389 384 + 389: Label + 390: 8(fvec4) Load 378(bigColor6) + 391: 7(float) CompositeExtract 390 2 + 392: 8(fvec4) Load 10(color) + 393: 7(float) CompositeExtract 392 2 + 394: 7(float) FAdd 393 391 + 395: 8(fvec4) Load 10(color) + 396: 8(fvec4) CompositeInsert 394 395 2 + Store 10(color) 396 + Branch 383 + 384: Label + Branch 370 + 370: Label + 397: 8(fvec4) Load 10(color) + 398: 7(float) CompositeExtract 397 0 + 399: 7(float) Load 366(d6) + 400: 16(bool) FOrdLessThan 398 399 + SelectionMerge 402 None + BranchConditional 400 401 419 + 401: Label + Branch 403 + 403: Label + 405: 8(fvec4) Load 10(color) + 406: 7(float) CompositeExtract 405 1 + 407: 7(float) Load 366(d6) + 408: 16(bool) FOrdLessThan 406 407 + LoopMerge 404 None + BranchConditional 408 409 404 + 409: Label + 410: 8(fvec4) Load 378(bigColor6) + 411: 8(fvec4) Load 10(color) + 412: 8(fvec4) FAdd 411 410 + Store 10(color) 412 + 414: 7(float) Load 413(d7) + 415: 16(bool) FOrdLessThan 414 85 + SelectionMerge 417 None + BranchConditional 415 416 417 + 416: Label + Branch 404 + 417: Label + Branch 403 + 404: Label + Branch 402 + 419: Label + Branch 420 + 420: Label + 422: 8(fvec4) Load 10(color) + 423: 7(float) CompositeExtract 422 2 + 424: 7(float) Load 366(d6) + 425: 16(bool) FOrdLessThan 423 424 + LoopMerge 421 None + BranchConditional 425 426 421 + 426: Label + 427: 8(fvec4) Load 378(bigColor6) + 428: 7(float) CompositeExtract 427 2 + 429: 8(fvec4) Load 10(color) + 430: 7(float) CompositeExtract 429 2 + 431: 7(float) FAdd 430 428 + 432: 8(fvec4) Load 10(color) + 433: 8(fvec4) CompositeInsert 431 432 2 + Store 10(color) 433 + Branch 420 + 421: Label + Branch 402 + 402: Label + Branch 434 + 434: Label + 436: 16(bool) Phi 17 402 162 454 + LoopMerge 435 None + Branch 437 + 437: Label + SelectionMerge 438 None + BranchConditional 436 438 439 + 439: Label + SelectionMerge 440 None + BranchConditional 17 440 435 + 440: Label + Branch 438 + 438: Label + 441: 7(float) Load 413(d7) + 443: 16(bool) FOrdLessThan 441 442 + SelectionMerge 445 None + BranchConditional 443 444 445 + 444: Label + Branch 435 + 445: Label + 448: 8(fvec4) Load 447(bigColor7) + 449: 8(fvec4) Load 10(color) + 450: 8(fvec4) FAdd 449 448 + Store 10(color) 450 + 451: 7(float) Load 413(d7) + 452: 16(bool) FOrdLessThan 451 85 + SelectionMerge 454 None + BranchConditional 452 453 454 + 453: Label + 455: 8(fvec4) Load 10(color) + 456: 7(float) CompositeExtract 455 2 + 457: 7(float) FAdd 456 85 + 458: 8(fvec4) Load 10(color) + 459: 8(fvec4) CompositeInsert 457 458 2 + Store 10(color) 459 + Branch 435 454: Label - Branch 427 - 428: Label - Branch 455 - 455: Label - LoopMerge 456 None - Branch 457 - 457: Label - 460: 7(float) Load 459(d8) - 461: 16(bool) FOrdLessThan 460 432 - SelectionMerge 463 None - BranchConditional 461 462 463 - 462: Label - Branch 456 - 463: Label - 465: 8(fvec4) Load 437(bigColor7) - 466: 8(fvec4) Load 10(color) - 467: 8(fvec4) FAdd 466 465 - Store 10(color) 467 - 468: 7(float) Load 459(d8) - 469: 16(bool) FOrdLessThan 468 85 - SelectionMerge 471 None - BranchConditional 469 470 471 - 470: Label - 472: 8(fvec4) Load 10(color) - 473: 7(float) CompositeExtract 472 2 - 474: 7(float) FAdd 473 85 - 475: 8(fvec4) Load 10(color) - 476: 8(fvec4) CompositeInsert 474 475 2 - Store 10(color) 476 - 477: 7(float) Load 459(d8) - 479: 16(bool) FOrdLessThan 477 478 - SelectionMerge 481 None - BranchConditional 479 480 487 - 480: Label - 482: 8(fvec4) Load 10(color) - 483: 7(float) CompositeExtract 482 1 - 484: 7(float) FAdd 483 85 - 485: 8(fvec4) Load 10(color) - 486: 8(fvec4) CompositeInsert 484 485 1 - Store 10(color) 486 - Branch 481 - 487: Label - 488: 8(fvec4) Load 10(color) - 489: 7(float) CompositeExtract 488 0 - 490: 7(float) FAdd 489 85 - 491: 8(fvec4) Load 10(color) - 492: 8(fvec4) CompositeInsert 490 491 0 - Store 10(color) 492 - Branch 481 - 481: Label - Branch 456 - 471: Label - 494: 8(fvec4) Load 12(BaseColor) - 495: 8(fvec4) Load 10(color) - 496: 8(fvec4) FAdd 495 494 - Store 10(color) 496 - Branch 458 - 458: Label - 497: 8(fvec4) Load 10(color) - 498: 7(float) CompositeExtract 497 2 - 499: 7(float) Load 459(d8) - 500: 16(bool) FOrdLessThan 498 499 - BranchConditional 500 501 456 - 501: Label - Branch 455 - 456: Label - Branch 502 - 502: Label - 504: 8(fvec4) Load 10(color) - 505: 7(float) CompositeExtract 504 3 - 507: 7(float) Load 506(d9) - 508: 16(bool) FOrdLessThan 505 507 - LoopMerge 503 None - BranchConditional 508 509 503 - 509: Label - 510: 7(float) Load 506(d9) - 511: 7(float) Load 459(d8) - 512: 16(bool) FOrdGreaterThan 510 511 - SelectionMerge 514 None - BranchConditional 512 513 514 - 513: Label - 515: 8(fvec4) Load 10(color) - 516: 7(float) CompositeExtract 515 0 - 517: 7(float) Load 406(d7) - 518: 16(bool) FOrdLessThanEqual 516 517 - SelectionMerge 520 None - BranchConditional 518 519 520 - 519: Label - 521: 8(fvec4) Load 10(color) - 522: 7(float) CompositeExtract 521 2 - 524: 16(bool) FOrdEqual 522 523 - SelectionMerge 526 None - BranchConditional 524 525 532 - 525: Label - 527: 8(fvec4) Load 10(color) - 528: 7(float) CompositeExtract 527 3 - 529: 7(float) FAdd 528 85 - 530: 8(fvec4) Load 10(color) - 531: 8(fvec4) CompositeInsert 529 530 3 - Store 10(color) 531 - Branch 526 - 532: Label - Branch 503 - 526: Label - Branch 520 - 520: Label - Branch 514 - 514: Label - Branch 502 - 503: Label - Branch 534 - 534: Label - 536: 8(fvec4) Load 10(color) - 537: 7(float) CompositeExtract 536 2 - 539: 7(float) Load 538(d10) - 540: 16(bool) FOrdLessThan 537 539 - LoopMerge 535 None - BranchConditional 540 541 535 - 541: Label - 542: 8(fvec4) Load 10(color) - 543: 7(float) CompositeExtract 542 1 - 544: 7(float) FAdd 543 85 - 545: 8(fvec4) Load 10(color) - 546: 8(fvec4) CompositeInsert 544 545 1 - Store 10(color) 546 - 547: 8(fvec4) Load 10(color) - 548: 7(float) CompositeExtract 547 1 - 550: 7(float) Load 549(d11) - 551: 16(bool) FOrdLessThan 548 550 - SelectionMerge 553 None - BranchConditional 551 552 553 - 552: Label - 554: 8(fvec4) Load 10(color) - 555: 7(float) CompositeExtract 554 2 - 556: 7(float) FAdd 555 85 - 557: 8(fvec4) Load 10(color) - 558: 8(fvec4) CompositeInsert 556 557 2 - Store 10(color) 558 - 559: 8(fvec4) Load 10(color) - 560: 7(float) CompositeExtract 559 3 - 562: 7(float) Load 561(d12) - 563: 16(bool) FOrdLessThan 560 562 - SelectionMerge 565 None - BranchConditional 563 564 571 - 564: Label - 566: 8(fvec4) Load 10(color) - 567: 7(float) CompositeExtract 566 3 - 568: 7(float) FAdd 567 85 - 569: 8(fvec4) Load 10(color) - 570: 8(fvec4) CompositeInsert 568 569 3 - Store 10(color) 570 - Branch 565 - 571: Label - 572: 8(fvec4) Load 10(color) - 573: 7(float) CompositeExtract 572 0 - 574: 7(float) FAdd 573 85 - 575: 8(fvec4) Load 10(color) - 576: 8(fvec4) CompositeInsert 574 575 0 - Store 10(color) 576 - Branch 565 - 565: Label - Branch 534 - 553: Label - 578: 8(fvec4) Load 10(color) - 579: 8(fvec4) CompositeConstruct 85 85 85 85 - 580: 8(fvec4) FAdd 578 579 - Store 10(color) 580 - Branch 535 - 535: Label - Branch 582 - 582: Label - 584: 8(fvec4) Load 10(color) - 585: 7(float) CompositeExtract 584 0 - 587: 16(bool) FOrdLessThan 585 586 - LoopMerge 583 None - BranchConditional 587 588 583 - 588: Label - 590: 8(fvec4) Load 589(bigColor8) - 591: 8(fvec4) Load 10(color) - 592: 8(fvec4) FAdd 591 590 - Store 10(color) 592 - 593: 8(fvec4) Load 10(color) - 594: 7(float) CompositeExtract 593 2 - 595: 7(float) Load 459(d8) - 596: 16(bool) FOrdLessThan 594 595 - SelectionMerge 598 None - BranchConditional 596 597 598 - 597: Label - 599: 8(fvec4) Load 10(color) - 600: 7(float) CompositeExtract 599 3 - 601: 7(float) Load 359(d6) - 602: 16(bool) FOrdLessThan 600 601 - SelectionMerge 604 None - BranchConditional 602 603 604 - 603: Label - Branch 582 - 604: Label - Branch 598 - 598: Label - 606: 8(fvec4) Load 589(bigColor8) - 607: 7(float) CompositeExtract 606 0 - 608: 8(fvec4) Load 10(color) - 609: 7(float) CompositeExtract 608 1 - 610: 7(float) FAdd 609 607 - 611: 8(fvec4) Load 10(color) - 612: 8(fvec4) CompositeInsert 610 611 1 - Store 10(color) 612 - Branch 582 - 583: Label - 613: 8(fvec4) Load 10(color) - 614: 8(fvec4) CompositeConstruct 85 85 85 85 - 615: 8(fvec4) FAdd 613 614 - Store 10(color) 615 - 618: 8(fvec4) Load 10(color) - Store 617(gl_FragColor) 618 - Branch 619 - 619: Label - 621: 8(fvec4) Load 10(color) - 622: 7(float) CompositeExtract 621 0 - 624: 7(float) Load 623(d14) - 625: 16(bool) FOrdLessThan 622 624 - LoopMerge 620 None - BranchConditional 625 626 620 - 626: Label - 627: 8(fvec4) Load 10(color) - 628: 7(float) CompositeExtract 627 1 - 630: 7(float) Load 629(d15) - 631: 16(bool) FOrdLessThan 628 630 - SelectionMerge 633 None - BranchConditional 631 632 635 - 632: Label + 461: 8(fvec4) Load 12(BaseColor) + 462: 8(fvec4) Load 10(color) + 463: 8(fvec4) FAdd 462 461 + Store 10(color) 463 + Branch 434 + 435: Label + Branch 464 + 464: Label + 466: 16(bool) Phi 17 435 162 487 + LoopMerge 465 None + Branch 467 + 467: Label + SelectionMerge 468 None + BranchConditional 466 468 469 + 469: Label + 470: 8(fvec4) Load 10(color) + 471: 7(float) CompositeExtract 470 2 + 473: 7(float) Load 472(d8) + 474: 16(bool) FOrdLessThan 471 473 + SelectionMerge 475 None + BranchConditional 474 475 465 + 475: Label + Branch 468 + 468: Label + 476: 7(float) Load 472(d8) + 477: 16(bool) FOrdLessThan 476 442 + SelectionMerge 479 None + BranchConditional 477 478 479 + 478: Label + Branch 465 + 479: Label + 481: 8(fvec4) Load 447(bigColor7) + 482: 8(fvec4) Load 10(color) + 483: 8(fvec4) FAdd 482 481 + Store 10(color) 483 + 484: 7(float) Load 472(d8) + 485: 16(bool) FOrdLessThan 484 85 + SelectionMerge 487 None + BranchConditional 485 486 487 + 486: Label + 488: 8(fvec4) Load 10(color) + 489: 7(float) CompositeExtract 488 2 + 490: 7(float) FAdd 489 85 + 491: 8(fvec4) Load 10(color) + 492: 8(fvec4) CompositeInsert 490 491 2 + Store 10(color) 492 + 493: 7(float) Load 472(d8) + 495: 16(bool) FOrdLessThan 493 494 + SelectionMerge 497 None + BranchConditional 495 496 503 + 496: Label + 498: 8(fvec4) Load 10(color) + 499: 7(float) CompositeExtract 498 1 + 500: 7(float) FAdd 499 85 + 501: 8(fvec4) Load 10(color) + 502: 8(fvec4) CompositeInsert 500 501 1 + Store 10(color) 502 + Branch 497 + 503: Label + 504: 8(fvec4) Load 10(color) + 505: 7(float) CompositeExtract 504 0 + 506: 7(float) FAdd 505 85 + 507: 8(fvec4) Load 10(color) + 508: 8(fvec4) CompositeInsert 506 507 0 + Store 10(color) 508 + Branch 497 + 497: Label + Branch 465 + 487: Label + 510: 8(fvec4) Load 12(BaseColor) + 511: 8(fvec4) Load 10(color) + 512: 8(fvec4) FAdd 511 510 + Store 10(color) 512 + Branch 464 + 465: Label + Branch 513 + 513: Label + 515: 8(fvec4) Load 10(color) + 516: 7(float) CompositeExtract 515 3 + 518: 7(float) Load 517(d9) + 519: 16(bool) FOrdLessThan 516 518 + LoopMerge 514 None + BranchConditional 519 520 514 + 520: Label + 521: 7(float) Load 517(d9) + 522: 7(float) Load 472(d8) + 523: 16(bool) FOrdGreaterThan 521 522 + SelectionMerge 525 None + BranchConditional 523 524 525 + 524: Label + 526: 8(fvec4) Load 10(color) + 527: 7(float) CompositeExtract 526 0 + 528: 7(float) Load 413(d7) + 529: 16(bool) FOrdLessThanEqual 527 528 + SelectionMerge 531 None + BranchConditional 529 530 531 + 530: Label + 532: 8(fvec4) Load 10(color) + 533: 7(float) CompositeExtract 532 2 + 535: 16(bool) FOrdEqual 533 534 + SelectionMerge 537 None + BranchConditional 535 536 543 + 536: Label + 538: 8(fvec4) Load 10(color) + 539: 7(float) CompositeExtract 538 3 + 540: 7(float) FAdd 539 85 + 541: 8(fvec4) Load 10(color) + 542: 8(fvec4) CompositeInsert 540 541 3 + Store 10(color) 542 + Branch 537 + 543: Label + Branch 514 + 537: Label + Branch 531 + 531: Label + Branch 525 + 525: Label + Branch 513 + 514: Label + Branch 545 + 545: Label + 547: 8(fvec4) Load 10(color) + 548: 7(float) CompositeExtract 547 2 + 550: 7(float) Load 549(d10) + 551: 16(bool) FOrdLessThan 548 550 + LoopMerge 546 None + BranchConditional 551 552 546 + 552: Label + 553: 8(fvec4) Load 10(color) + 554: 7(float) CompositeExtract 553 1 + 555: 7(float) FAdd 554 85 + 556: 8(fvec4) Load 10(color) + 557: 8(fvec4) CompositeInsert 555 556 1 + Store 10(color) 557 + 558: 8(fvec4) Load 10(color) + 559: 7(float) CompositeExtract 558 1 + 561: 7(float) Load 560(d11) + 562: 16(bool) FOrdLessThan 559 561 + SelectionMerge 564 None + BranchConditional 562 563 564 + 563: Label + 565: 8(fvec4) Load 10(color) + 566: 7(float) CompositeExtract 565 2 + 567: 7(float) FAdd 566 85 + 568: 8(fvec4) Load 10(color) + 569: 8(fvec4) CompositeInsert 567 568 2 + Store 10(color) 569 + 570: 8(fvec4) Load 10(color) + 571: 7(float) CompositeExtract 570 3 + 573: 7(float) Load 572(d12) + 574: 16(bool) FOrdLessThan 571 573 + SelectionMerge 576 None + BranchConditional 574 575 582 + 575: Label + 577: 8(fvec4) Load 10(color) + 578: 7(float) CompositeExtract 577 3 + 579: 7(float) FAdd 578 85 + 580: 8(fvec4) Load 10(color) + 581: 8(fvec4) CompositeInsert 579 580 3 + Store 10(color) 581 + Branch 576 + 582: Label + 583: 8(fvec4) Load 10(color) + 584: 7(float) CompositeExtract 583 0 + 585: 7(float) FAdd 584 85 + 586: 8(fvec4) Load 10(color) + 587: 8(fvec4) CompositeInsert 585 586 0 + Store 10(color) 587 + Branch 576 + 576: Label + Branch 545 + 564: Label + 589: 8(fvec4) Load 10(color) + 590: 8(fvec4) CompositeConstruct 85 85 85 85 + 591: 8(fvec4) FAdd 589 590 + Store 10(color) 591 + Branch 546 + 546: Label + Branch 593 + 593: Label + 595: 8(fvec4) Load 10(color) + 596: 7(float) CompositeExtract 595 0 + 598: 16(bool) FOrdLessThan 596 597 + LoopMerge 594 None + BranchConditional 598 599 594 + 599: Label + 601: 8(fvec4) Load 600(bigColor8) + 602: 8(fvec4) Load 10(color) + 603: 8(fvec4) FAdd 602 601 + Store 10(color) 603 + 604: 8(fvec4) Load 10(color) + 605: 7(float) CompositeExtract 604 2 + 606: 7(float) Load 472(d8) + 607: 16(bool) FOrdLessThan 605 606 + SelectionMerge 609 None + BranchConditional 607 608 609 + 608: Label + 610: 8(fvec4) Load 10(color) + 611: 7(float) CompositeExtract 610 3 + 612: 7(float) Load 366(d6) + 613: 16(bool) FOrdLessThan 611 612 + SelectionMerge 615 None + BranchConditional 613 614 615 + 614: Label + Branch 593 + 615: Label + Branch 609 + 609: Label + 617: 8(fvec4) Load 600(bigColor8) + 618: 7(float) CompositeExtract 617 0 + 619: 8(fvec4) Load 10(color) + 620: 7(float) CompositeExtract 619 1 + 621: 7(float) FAdd 620 618 + 622: 8(fvec4) Load 10(color) + 623: 8(fvec4) CompositeInsert 621 622 1 + Store 10(color) 623 + Branch 593 + 594: Label + 624: 8(fvec4) Load 10(color) + 625: 8(fvec4) CompositeConstruct 85 85 85 85 + 626: 8(fvec4) FAdd 624 625 + Store 10(color) 626 + 629: 8(fvec4) Load 10(color) + Store 628(gl_FragColor) 629 + Branch 630 + 630: Label + 632: 8(fvec4) Load 10(color) + 633: 7(float) CompositeExtract 632 0 + 635: 7(float) Load 634(d14) + 636: 16(bool) FOrdLessThan 633 635 + LoopMerge 631 None + BranchConditional 636 637 631 + 637: Label + 638: 8(fvec4) Load 10(color) + 639: 7(float) CompositeExtract 638 1 + 641: 7(float) Load 640(d15) + 642: 16(bool) FOrdLessThan 639 641 + SelectionMerge 644 None + BranchConditional 642 643 646 + 643: Label Branch 6 - 635: Label - 636: 8(fvec4) Load 10(color) - 637: 8(fvec4) CompositeConstruct 85 85 85 85 - 638: 8(fvec4) FAdd 636 637 - Store 10(color) 638 - Branch 633 - 633: Label - Branch 619 - 620: Label - 639: 8(fvec4) Load 10(color) - 640: 8(fvec4) CompositeConstruct 85 85 85 85 - 641: 8(fvec4) FAdd 639 640 - Store 10(color) 641 - Branch 642 - 642: Label - 644: 8(fvec4) Load 10(color) - 645: 7(float) CompositeExtract 644 3 - 647: 7(float) Load 646(d16) - 648: 16(bool) FOrdLessThan 645 647 - LoopMerge 643 None - BranchConditional 648 649 643 - 649: Label - 650: 8(fvec4) Load 10(color) - 651: 7(float) CompositeExtract 650 3 - 652: 7(float) FAdd 651 85 - 653: 8(fvec4) Load 10(color) - 654: 8(fvec4) CompositeInsert 652 653 3 - Store 10(color) 654 - Branch 642 - 643: Label - Branch 655 - 655: Label - 657: 8(fvec4) Load 10(color) - 658: 7(float) CompositeExtract 657 3 - 659: 7(float) Load 92(d2) - 660: 16(bool) FOrdLessThan 658 659 - 661: 8(fvec4) Load 10(color) - 662: 7(float) CompositeExtract 661 1 - 663: 7(float) Load 97(d3) - 664: 16(bool) FOrdLessThan 662 663 - 665: 16(bool) LogicalAnd 660 664 - LoopMerge 656 None - BranchConditional 665 666 656 - 666: Label - 667: 8(fvec4) Load 102(bigColor1_2) - 668: 8(fvec4) Load 10(color) - 669: 8(fvec4) FAdd 668 667 - Store 10(color) 669 - 670: 8(fvec4) Load 10(color) - 671: 7(float) CompositeExtract 670 2 - 672: 7(float) Load 97(d3) - 673: 16(bool) FOrdLessThan 671 672 - SelectionMerge 675 None - BranchConditional 673 674 675 - 674: Label + 646: Label + 647: 8(fvec4) Load 10(color) + 648: 8(fvec4) CompositeConstruct 85 85 85 85 + 649: 8(fvec4) FAdd 647 648 + Store 10(color) 649 + Branch 644 + 644: Label + Branch 630 + 631: Label + 650: 8(fvec4) Load 10(color) + 651: 8(fvec4) CompositeConstruct 85 85 85 85 + 652: 8(fvec4) FAdd 650 651 + Store 10(color) 652 + Branch 653 + 653: Label + 655: 8(fvec4) Load 10(color) + 656: 7(float) CompositeExtract 655 3 + 658: 7(float) Load 657(d16) + 659: 16(bool) FOrdLessThan 656 658 + LoopMerge 654 None + BranchConditional 659 660 654 + 660: Label + 661: 8(fvec4) Load 10(color) + 662: 7(float) CompositeExtract 661 3 + 663: 7(float) FAdd 662 85 + 664: 8(fvec4) Load 10(color) + 665: 8(fvec4) CompositeInsert 663 664 3 + Store 10(color) 665 + Branch 653 + 654: Label + Branch 666 + 666: Label + 668: 8(fvec4) Load 10(color) + 669: 7(float) CompositeExtract 668 3 + 670: 7(float) Load 92(d2) + 671: 16(bool) FOrdLessThan 669 670 + 672: 8(fvec4) Load 10(color) + 673: 7(float) CompositeExtract 672 1 + 674: 7(float) Load 97(d3) + 675: 16(bool) FOrdLessThan 673 674 + 676: 16(bool) LogicalAnd 671 675 + LoopMerge 667 None + BranchConditional 676 677 667 + 677: Label + 678: 8(fvec4) Load 102(bigColor1_2) + 679: 8(fvec4) Load 10(color) + 680: 8(fvec4) FAdd 679 678 + Store 10(color) 680 + 681: 8(fvec4) Load 10(color) + 682: 7(float) CompositeExtract 681 2 + 683: 7(float) Load 97(d3) + 684: 16(bool) FOrdLessThan 682 683 + SelectionMerge 686 None + BranchConditional 684 685 686 + 685: Label Branch 6 - 675: Label - Branch 655 - 656: Label - Branch 677 - 677: Label - LoopMerge 678 None - Branch 679 - 679: Label - 681: 8(fvec4) Load 10(color) - 682: 7(float) CompositeExtract 681 1 - 684: 7(float) Load 683(d18) - 685: 16(bool) FOrdLessThan 682 684 - SelectionMerge 687 None - BranchConditional 685 686 687 686: Label - Branch 6 - 687: Label - 689: 8(fvec4) Load 10(color) - 690: 8(fvec4) CompositeConstruct 85 85 85 85 - 691: 8(fvec4) FAdd 689 690 - Store 10(color) 691 - Branch 680 - 680: Label - 692: 8(fvec4) Load 10(color) - 693: 7(float) CompositeExtract 692 0 - 695: 7(float) Load 694(d17) - 696: 16(bool) FOrdLessThan 693 695 - BranchConditional 696 697 678 - 697: Label - Branch 677 - 678: Label - Branch 698 - 698: Label + Branch 666 + 667: Label + Branch 688 + 688: Label + 690: 16(bool) Phi 17 667 162 706 + LoopMerge 689 None + Branch 691 + 691: Label + SelectionMerge 692 None + BranchConditional 690 692 693 + 693: Label + 694: 8(fvec4) Load 10(color) + 695: 7(float) CompositeExtract 694 0 + 697: 7(float) Load 696(d17) + 698: 16(bool) FOrdLessThan 695 697 + SelectionMerge 699 None + BranchConditional 698 699 689 + 699: Label + Branch 692 + 692: Label 700: 8(fvec4) Load 10(color) 701: 7(float) CompositeExtract 700 1 - 702: 7(float) Load 646(d16) - 703: 16(bool) FOrdLessThan 701 702 - LoopMerge 699 None - BranchConditional 703 704 699 - 704: Label - 705: 8(fvec4) Load 10(color) - 706: 7(float) CompositeExtract 705 3 - 707: 7(float) Load 646(d16) - 708: 16(bool) FOrdLessThan 706 707 - SelectionMerge 710 None - BranchConditional 708 709 712 - 709: Label + 703: 7(float) Load 702(d18) + 704: 16(bool) FOrdLessThan 701 703 + SelectionMerge 706 None + BranchConditional 704 705 706 + 705: Label + Branch 6 + 706: Label + 708: 8(fvec4) Load 10(color) + 709: 8(fvec4) CompositeConstruct 85 85 85 85 + 710: 8(fvec4) FAdd 708 709 + Store 10(color) 710 + Branch 688 + 689: Label + Branch 711 + 711: Label + 713: 8(fvec4) Load 10(color) + 714: 7(float) CompositeExtract 713 1 + 715: 7(float) Load 657(d16) + 716: 16(bool) FOrdLessThan 714 715 + LoopMerge 712 None + BranchConditional 716 717 712 + 717: Label + 718: 8(fvec4) Load 10(color) + 719: 7(float) CompositeExtract 718 3 + 720: 7(float) Load 657(d16) + 721: 16(bool) FOrdLessThan 719 720 + SelectionMerge 723 None + BranchConditional 721 722 725 + 722: Label Kill - 712: Label - 713: 8(fvec4) Load 10(color) - 714: 8(fvec4) CompositeConstruct 85 85 85 85 - 715: 8(fvec4) FAdd 713 714 - Store 10(color) 715 - Branch 710 - 710: Label - Branch 698 - 699: Label - 716: 8(fvec4) Load 10(color) - 717: 8(fvec4) CompositeConstruct 85 85 85 85 - 718: 8(fvec4) FAdd 716 717 - Store 10(color) 718 - 719: 8(fvec4) Load 10(color) - Store 617(gl_FragColor) 719 + 725: Label + 726: 8(fvec4) Load 10(color) + 727: 8(fvec4) CompositeConstruct 85 85 85 85 + 728: 8(fvec4) FAdd 726 727 + Store 10(color) 728 + Branch 723 + 723: Label + Branch 711 + 712: Label + 729: 8(fvec4) Load 10(color) + 730: 8(fvec4) CompositeConstruct 85 85 85 85 + 731: 8(fvec4) FAdd 729 730 + Store 10(color) 731 + 732: 8(fvec4) Load 10(color) + Store 628(gl_FragColor) 732 Branch 6 6: Label Return diff --git a/Test/baseResults/spv.loopsArtificial.frag.out b/Test/baseResults/spv.loopsArtificial.frag.out index 768571cf..a3ad1db4 100644 --- a/Test/baseResults/spv.loopsArtificial.frag.out +++ b/Test/baseResults/spv.loopsArtificial.frag.out @@ -7,7 +7,7 @@ Linked fragment stage: // Module Version 99 // Generated by (magic number): 51a00bb -// Id's are bound by 192 +// Id's are bound by 196 Source GLSL 130 1: ExtInstImport "GLSL.std.450" @@ -16,98 +16,98 @@ Linked fragment stage: Name 4 "main" Name 10 "color" Name 12 "BaseColor" - Name 19 "bigColor4" - Name 26 "d4" - Name 79 "d13" - Name 145 "gl_FragColor" - Name 147 "bigColor" - Name 148 "bigColor1_1" - Name 149 "bigColor1_2" - Name 150 "bigColor1_3" - Name 151 "bigColor2" - Name 152 "bigColor3" - Name 153 "bigColor5" - Name 154 "bigColor6" - Name 155 "bigColor7" - Name 156 "bigColor8" - Name 157 "d" - Name 158 "d2" - Name 159 "d3" - Name 160 "d5" - Name 161 "d6" - Name 162 "d7" - Name 163 "d8" - Name 164 "d9" - Name 165 "d10" - Name 166 "d11" - Name 167 "d12" - Name 168 "d14" - Name 169 "d15" - Name 170 "d16" - Name 171 "d17" - Name 172 "d18" - Name 173 "d19" - Name 174 "d20" - Name 175 "d21" - Name 176 "d22" - Name 177 "d23" - Name 178 "d24" - Name 179 "d25" - Name 180 "d26" - Name 181 "d27" - Name 182 "d28" - Name 183 "d29" - Name 184 "d30" - Name 185 "d31" - Name 186 "d32" - Name 187 "d33" - Name 188 "d34" - Name 191 "Count" + Name 25 "d4" + Name 30 "bigColor4" + Name 83 "d13" + Name 149 "gl_FragColor" + Name 151 "bigColor" + Name 152 "bigColor1_1" + Name 153 "bigColor1_2" + Name 154 "bigColor1_3" + Name 155 "bigColor2" + Name 156 "bigColor3" + Name 157 "bigColor5" + Name 158 "bigColor6" + Name 159 "bigColor7" + Name 160 "bigColor8" + Name 161 "d" + Name 162 "d2" + Name 163 "d3" + Name 164 "d5" + Name 165 "d6" + Name 166 "d7" + Name 167 "d8" + Name 168 "d9" + Name 169 "d10" + Name 170 "d11" + Name 171 "d12" + Name 172 "d14" + Name 173 "d15" + Name 174 "d16" + Name 175 "d17" + Name 176 "d18" + Name 177 "d19" + Name 178 "d20" + Name 179 "d21" + Name 180 "d22" + Name 181 "d23" + Name 182 "d24" + Name 183 "d25" + Name 184 "d26" + Name 185 "d27" + Name 186 "d28" + Name 187 "d29" + Name 188 "d30" + Name 189 "d31" + Name 190 "d32" + Name 191 "d33" + Name 192 "d34" + Name 195 "Count" Decorate 12(BaseColor) Smooth - Decorate 145(gl_FragColor) BuiltIn FragColor - Decorate 147(bigColor) NoStaticUse - Decorate 148(bigColor1_1) NoStaticUse - Decorate 149(bigColor1_2) NoStaticUse - Decorate 150(bigColor1_3) NoStaticUse - Decorate 151(bigColor2) NoStaticUse - Decorate 152(bigColor3) NoStaticUse - Decorate 153(bigColor5) NoStaticUse - Decorate 154(bigColor6) NoStaticUse - Decorate 155(bigColor7) NoStaticUse - Decorate 156(bigColor8) NoStaticUse - Decorate 157(d) NoStaticUse - Decorate 158(d2) NoStaticUse - Decorate 159(d3) NoStaticUse - Decorate 160(d5) NoStaticUse - Decorate 161(d6) NoStaticUse - Decorate 162(d7) NoStaticUse - Decorate 163(d8) NoStaticUse - Decorate 164(d9) NoStaticUse - Decorate 165(d10) NoStaticUse - Decorate 166(d11) NoStaticUse - Decorate 167(d12) NoStaticUse - Decorate 168(d14) NoStaticUse - Decorate 169(d15) NoStaticUse - Decorate 170(d16) NoStaticUse - Decorate 171(d17) NoStaticUse - Decorate 172(d18) NoStaticUse - Decorate 173(d19) NoStaticUse - Decorate 174(d20) NoStaticUse - Decorate 175(d21) NoStaticUse - Decorate 176(d22) NoStaticUse - Decorate 177(d23) NoStaticUse - Decorate 178(d24) NoStaticUse - Decorate 179(d25) NoStaticUse - Decorate 180(d26) NoStaticUse - Decorate 181(d27) NoStaticUse - Decorate 182(d28) NoStaticUse - Decorate 183(d29) NoStaticUse - Decorate 184(d30) NoStaticUse - Decorate 185(d31) NoStaticUse - Decorate 186(d32) NoStaticUse - Decorate 187(d33) NoStaticUse - Decorate 188(d34) NoStaticUse - Decorate 191(Count) NoStaticUse + Decorate 149(gl_FragColor) BuiltIn FragColor + Decorate 151(bigColor) NoStaticUse + Decorate 152(bigColor1_1) NoStaticUse + Decorate 153(bigColor1_2) NoStaticUse + Decorate 154(bigColor1_3) NoStaticUse + Decorate 155(bigColor2) NoStaticUse + Decorate 156(bigColor3) NoStaticUse + Decorate 157(bigColor5) NoStaticUse + Decorate 158(bigColor6) NoStaticUse + Decorate 159(bigColor7) NoStaticUse + Decorate 160(bigColor8) NoStaticUse + Decorate 161(d) NoStaticUse + Decorate 162(d2) NoStaticUse + Decorate 163(d3) NoStaticUse + Decorate 164(d5) NoStaticUse + Decorate 165(d6) NoStaticUse + Decorate 166(d7) NoStaticUse + Decorate 167(d8) NoStaticUse + Decorate 168(d9) NoStaticUse + Decorate 169(d10) NoStaticUse + Decorate 170(d11) NoStaticUse + Decorate 171(d12) NoStaticUse + Decorate 172(d14) NoStaticUse + Decorate 173(d15) NoStaticUse + Decorate 174(d16) NoStaticUse + Decorate 175(d17) NoStaticUse + Decorate 176(d18) NoStaticUse + Decorate 177(d19) NoStaticUse + Decorate 178(d20) NoStaticUse + Decorate 179(d21) NoStaticUse + Decorate 180(d22) NoStaticUse + Decorate 181(d23) NoStaticUse + Decorate 182(d24) NoStaticUse + Decorate 183(d25) NoStaticUse + Decorate 184(d26) NoStaticUse + Decorate 185(d27) NoStaticUse + Decorate 186(d28) NoStaticUse + Decorate 187(d29) NoStaticUse + Decorate 188(d30) NoStaticUse + Decorate 189(d31) NoStaticUse + Decorate 190(d32) NoStaticUse + Decorate 191(d33) NoStaticUse + Decorate 192(d34) NoStaticUse + Decorate 195(Count) NoStaticUse 2: TypeVoid 3: TypeFunction 2 7: TypeFloat 32 @@ -115,61 +115,63 @@ Linked fragment stage: 9: TypePointer Function 8(fvec4) 11: TypePointer Input 8(fvec4) 12(BaseColor): 11(ptr) Variable Input - 18: TypePointer UniformConstant 8(fvec4) - 19(bigColor4): 18(ptr) Variable UniformConstant - 25: TypePointer UniformConstant 7(float) - 26(d4): 25(ptr) Variable UniformConstant - 28: TypeBool - 32: 7(float) Constant 1073741824 - 46: 7(float) Constant 1065353216 - 79(d13): 25(ptr) Variable UniformConstant - 144: TypePointer Output 8(fvec4) -145(gl_FragColor): 144(ptr) Variable Output - 147(bigColor): 18(ptr) Variable UniformConstant -148(bigColor1_1): 18(ptr) Variable UniformConstant -149(bigColor1_2): 18(ptr) Variable UniformConstant -150(bigColor1_3): 18(ptr) Variable UniformConstant - 151(bigColor2): 18(ptr) Variable UniformConstant - 152(bigColor3): 18(ptr) Variable UniformConstant - 153(bigColor5): 18(ptr) Variable UniformConstant - 154(bigColor6): 18(ptr) Variable UniformConstant - 155(bigColor7): 18(ptr) Variable UniformConstant - 156(bigColor8): 18(ptr) Variable UniformConstant - 157(d): 25(ptr) Variable UniformConstant - 158(d2): 25(ptr) Variable UniformConstant - 159(d3): 25(ptr) Variable UniformConstant - 160(d5): 25(ptr) Variable UniformConstant - 161(d6): 25(ptr) Variable UniformConstant - 162(d7): 25(ptr) Variable UniformConstant - 163(d8): 25(ptr) Variable UniformConstant - 164(d9): 25(ptr) Variable UniformConstant - 165(d10): 25(ptr) Variable UniformConstant - 166(d11): 25(ptr) Variable UniformConstant - 167(d12): 25(ptr) Variable UniformConstant - 168(d14): 25(ptr) Variable UniformConstant - 169(d15): 25(ptr) Variable UniformConstant - 170(d16): 25(ptr) Variable UniformConstant - 171(d17): 25(ptr) Variable UniformConstant - 172(d18): 25(ptr) Variable UniformConstant - 173(d19): 25(ptr) Variable UniformConstant - 174(d20): 25(ptr) Variable UniformConstant - 175(d21): 25(ptr) Variable UniformConstant - 176(d22): 25(ptr) Variable UniformConstant - 177(d23): 25(ptr) Variable UniformConstant - 178(d24): 25(ptr) Variable UniformConstant - 179(d25): 25(ptr) Variable UniformConstant - 180(d26): 25(ptr) Variable UniformConstant - 181(d27): 25(ptr) Variable UniformConstant - 182(d28): 25(ptr) Variable UniformConstant - 183(d29): 25(ptr) Variable UniformConstant - 184(d30): 25(ptr) Variable UniformConstant - 185(d31): 25(ptr) Variable UniformConstant - 186(d32): 25(ptr) Variable UniformConstant - 187(d33): 25(ptr) Variable UniformConstant - 188(d34): 25(ptr) Variable UniformConstant - 189: TypeInt 32 1 - 190: TypePointer UniformConstant 189(int) - 191(Count): 190(ptr) Variable UniformConstant + 17: TypeBool + 18: 17(bool) ConstantTrue + 24: TypePointer UniformConstant 7(float) + 25(d4): 24(ptr) Variable UniformConstant + 29: TypePointer UniformConstant 8(fvec4) + 30(bigColor4): 29(ptr) Variable UniformConstant + 40: 7(float) Constant 1073741824 + 54: 7(float) Constant 1065353216 + 58: 17(bool) ConstantFalse + 83(d13): 24(ptr) Variable UniformConstant + 148: TypePointer Output 8(fvec4) +149(gl_FragColor): 148(ptr) Variable Output + 151(bigColor): 29(ptr) Variable UniformConstant +152(bigColor1_1): 29(ptr) Variable UniformConstant +153(bigColor1_2): 29(ptr) Variable UniformConstant +154(bigColor1_3): 29(ptr) Variable UniformConstant + 155(bigColor2): 29(ptr) Variable UniformConstant + 156(bigColor3): 29(ptr) Variable UniformConstant + 157(bigColor5): 29(ptr) Variable UniformConstant + 158(bigColor6): 29(ptr) Variable UniformConstant + 159(bigColor7): 29(ptr) Variable UniformConstant + 160(bigColor8): 29(ptr) Variable UniformConstant + 161(d): 24(ptr) Variable UniformConstant + 162(d2): 24(ptr) Variable UniformConstant + 163(d3): 24(ptr) Variable UniformConstant + 164(d5): 24(ptr) Variable UniformConstant + 165(d6): 24(ptr) Variable UniformConstant + 166(d7): 24(ptr) Variable UniformConstant + 167(d8): 24(ptr) Variable UniformConstant + 168(d9): 24(ptr) Variable UniformConstant + 169(d10): 24(ptr) Variable UniformConstant + 170(d11): 24(ptr) Variable UniformConstant + 171(d12): 24(ptr) Variable UniformConstant + 172(d14): 24(ptr) Variable UniformConstant + 173(d15): 24(ptr) Variable UniformConstant + 174(d16): 24(ptr) Variable UniformConstant + 175(d17): 24(ptr) Variable UniformConstant + 176(d18): 24(ptr) Variable UniformConstant + 177(d19): 24(ptr) Variable UniformConstant + 178(d20): 24(ptr) Variable UniformConstant + 179(d21): 24(ptr) Variable UniformConstant + 180(d22): 24(ptr) Variable UniformConstant + 181(d23): 24(ptr) Variable UniformConstant + 182(d24): 24(ptr) Variable UniformConstant + 183(d25): 24(ptr) Variable UniformConstant + 184(d26): 24(ptr) Variable UniformConstant + 185(d27): 24(ptr) Variable UniformConstant + 186(d28): 24(ptr) Variable UniformConstant + 187(d29): 24(ptr) Variable UniformConstant + 188(d30): 24(ptr) Variable UniformConstant + 189(d31): 24(ptr) Variable UniformConstant + 190(d32): 24(ptr) Variable UniformConstant + 191(d33): 24(ptr) Variable UniformConstant + 192(d34): 24(ptr) Variable UniformConstant + 193: TypeInt 32 1 + 194: TypePointer UniformConstant 193(int) + 195(Count): 194(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 10(color): 9(ptr) Variable Function @@ -177,173 +179,178 @@ Linked fragment stage: Store 10(color) 13 Branch 14 14: Label + 16: 17(bool) Phi 18 5 58 50 58 65 LoopMerge 15 None - Branch 16 - 16: Label - 20: 8(fvec4) Load 19(bigColor4) - 21: 8(fvec4) Load 10(color) - 22: 8(fvec4) FAdd 21 20 - Store 10(color) 22 - 23: 8(fvec4) Load 10(color) - 24: 7(float) CompositeExtract 23 0 - 27: 7(float) Load 26(d4) - 29: 28(bool) FOrdLessThan 24 27 - SelectionMerge 31 None - BranchConditional 29 30 31 - 30: Label - 33: 8(fvec4) Load 10(color) - 34: 7(float) CompositeExtract 33 2 - 35: 7(float) FAdd 34 32 - 36: 8(fvec4) Load 10(color) - 37: 8(fvec4) CompositeInsert 35 36 2 - Store 10(color) 37 - 38: 8(fvec4) Load 10(color) - 39: 7(float) CompositeExtract 38 2 - 40: 7(float) Load 26(d4) - 41: 28(bool) FOrdLessThan 39 40 - SelectionMerge 43 None - BranchConditional 41 42 43 - 42: Label - 44: 8(fvec4) Load 10(color) - 45: 7(float) CompositeExtract 44 0 - 47: 7(float) FAdd 45 46 - 48: 8(fvec4) Load 10(color) - 49: 8(fvec4) CompositeInsert 47 48 0 - Store 10(color) 49 - Branch 17 - 43: Label - Branch 31 - 31: Label - 51: 8(fvec4) Load 10(color) - 52: 7(float) CompositeExtract 51 1 - 53: 7(float) Load 26(d4) - 54: 28(bool) FOrdLessThan 52 53 - SelectionMerge 56 None - BranchConditional 54 55 63 - 55: Label - 57: 7(float) Load 26(d4) - 58: 8(fvec4) Load 10(color) - 59: 7(float) CompositeExtract 58 1 - 60: 7(float) FAdd 59 57 - 61: 8(fvec4) Load 10(color) - 62: 8(fvec4) CompositeInsert 60 61 1 - Store 10(color) 62 - Branch 56 - 63: Label - 64: 7(float) Load 26(d4) - 65: 8(fvec4) Load 10(color) - 66: 7(float) CompositeExtract 65 0 - 67: 7(float) FAdd 66 64 - 68: 8(fvec4) Load 10(color) - 69: 8(fvec4) CompositeInsert 67 68 0 - Store 10(color) 69 - Branch 56 - 56: Label - Branch 17 - 17: Label - 70: 8(fvec4) Load 10(color) - 71: 7(float) CompositeExtract 70 2 - 72: 7(float) Load 26(d4) - 73: 28(bool) FOrdLessThan 71 72 - BranchConditional 73 74 15 - 74: Label + Branch 19 + 19: Label + SelectionMerge 20 None + BranchConditional 16 20 21 + 21: Label + 22: 8(fvec4) Load 10(color) + 23: 7(float) CompositeExtract 22 2 + 26: 7(float) Load 25(d4) + 27: 17(bool) FOrdLessThan 23 26 + SelectionMerge 28 None + BranchConditional 27 28 15 + 28: Label + Branch 20 + 20: Label + 31: 8(fvec4) Load 30(bigColor4) + 32: 8(fvec4) Load 10(color) + 33: 8(fvec4) FAdd 32 31 + Store 10(color) 33 + 34: 8(fvec4) Load 10(color) + 35: 7(float) CompositeExtract 34 0 + 36: 7(float) Load 25(d4) + 37: 17(bool) FOrdLessThan 35 36 + SelectionMerge 39 None + BranchConditional 37 38 39 + 38: Label + 41: 8(fvec4) Load 10(color) + 42: 7(float) CompositeExtract 41 2 + 43: 7(float) FAdd 42 40 + 44: 8(fvec4) Load 10(color) + 45: 8(fvec4) CompositeInsert 43 44 2 + Store 10(color) 45 + 46: 8(fvec4) Load 10(color) + 47: 7(float) CompositeExtract 46 2 + 48: 7(float) Load 25(d4) + 49: 17(bool) FOrdLessThan 47 48 + SelectionMerge 51 None + BranchConditional 49 50 51 + 50: Label + 52: 8(fvec4) Load 10(color) + 53: 7(float) CompositeExtract 52 0 + 55: 7(float) FAdd 53 54 + 56: 8(fvec4) Load 10(color) + 57: 8(fvec4) CompositeInsert 55 56 0 + Store 10(color) 57 + Branch 14 + 51: Label + Branch 39 + 39: Label + 60: 8(fvec4) Load 10(color) + 61: 7(float) CompositeExtract 60 1 + 62: 7(float) Load 25(d4) + 63: 17(bool) FOrdLessThan 61 62 + SelectionMerge 65 None + BranchConditional 63 64 72 + 64: Label + 66: 7(float) Load 25(d4) + 67: 8(fvec4) Load 10(color) + 68: 7(float) CompositeExtract 67 1 + 69: 7(float) FAdd 68 66 + 70: 8(fvec4) Load 10(color) + 71: 8(fvec4) CompositeInsert 69 70 1 + Store 10(color) 71 + Branch 65 + 72: Label + 73: 7(float) Load 25(d4) + 74: 8(fvec4) Load 10(color) + 75: 7(float) CompositeExtract 74 0 + 76: 7(float) FAdd 75 73 + 77: 8(fvec4) Load 10(color) + 78: 8(fvec4) CompositeInsert 76 77 0 + Store 10(color) 78 + Branch 65 + 65: Label Branch 14 15: Label - Branch 75 - 75: Label - 77: 8(fvec4) Load 10(color) - 78: 7(float) CompositeExtract 77 3 - 80: 7(float) Load 79(d13) - 81: 28(bool) FOrdLessThan 78 80 - LoopMerge 76 None - BranchConditional 81 82 76 - 82: Label - 83: 8(fvec4) Load 10(color) - 84: 7(float) CompositeExtract 83 2 - 85: 7(float) Load 79(d13) - 86: 28(bool) FOrdLessThan 84 85 - SelectionMerge 88 None - BranchConditional 86 87 92 - 87: Label - 89: 8(fvec4) Load 10(color) - 90: 8(fvec4) CompositeConstruct 46 46 46 46 - 91: 8(fvec4) FAdd 89 90 - Store 10(color) 91 - Branch 88 - 92: Label + Branch 79 + 79: Label + 81: 8(fvec4) Load 10(color) + 82: 7(float) CompositeExtract 81 3 + 84: 7(float) Load 83(d13) + 85: 17(bool) FOrdLessThan 82 84 + LoopMerge 80 None + BranchConditional 85 86 80 + 86: Label + 87: 8(fvec4) Load 10(color) + 88: 7(float) CompositeExtract 87 2 + 89: 7(float) Load 83(d13) + 90: 17(bool) FOrdLessThan 88 89 + SelectionMerge 92 None + BranchConditional 90 91 96 + 91: Label 93: 8(fvec4) Load 10(color) - 94: 8(fvec4) CompositeConstruct 46 46 46 46 - 95: 8(fvec4) FSub 93 94 + 94: 8(fvec4) CompositeConstruct 54 54 54 54 + 95: 8(fvec4) FAdd 93 94 Store 10(color) 95 - Branch 88 - 88: Label - 96: 8(fvec4) Load 19(bigColor4) - 97: 8(fvec4) Load 10(color) - 98: 8(fvec4) FAdd 97 96 - Store 10(color) 98 - 99: 8(fvec4) Load 10(color) - 100: 7(float) CompositeExtract 99 0 - 101: 7(float) Load 26(d4) - 102: 28(bool) FOrdLessThan 100 101 - SelectionMerge 104 None - BranchConditional 102 103 104 - 103: Label - 105: 8(fvec4) Load 10(color) - 106: 7(float) CompositeExtract 105 2 - 107: 7(float) FAdd 106 32 - 108: 8(fvec4) Load 10(color) - 109: 8(fvec4) CompositeInsert 107 108 2 - Store 10(color) 109 - 110: 8(fvec4) Load 10(color) - 111: 7(float) CompositeExtract 110 2 - 112: 7(float) Load 26(d4) - 113: 28(bool) FOrdLessThan 111 112 - SelectionMerge 115 None - BranchConditional 113 114 115 - 114: Label - 116: 8(fvec4) Load 10(color) - 117: 7(float) CompositeExtract 116 0 - 118: 7(float) FAdd 117 46 - 119: 8(fvec4) Load 10(color) - 120: 8(fvec4) CompositeInsert 118 119 0 - Store 10(color) 120 - Branch 75 - 115: Label - Branch 104 - 104: Label - 122: 8(fvec4) Load 10(color) - 123: 7(float) CompositeExtract 122 1 - 124: 7(float) Load 26(d4) - 125: 28(bool) FOrdLessThan 123 124 - SelectionMerge 127 None - BranchConditional 125 126 134 - 126: Label - 128: 7(float) Load 26(d4) - 129: 8(fvec4) Load 10(color) - 130: 7(float) CompositeExtract 129 1 - 131: 7(float) FAdd 130 128 - 132: 8(fvec4) Load 10(color) - 133: 8(fvec4) CompositeInsert 131 132 1 - Store 10(color) 133 - Branch 127 - 134: Label - 135: 7(float) Load 26(d4) + Branch 92 + 96: Label + 97: 8(fvec4) Load 10(color) + 98: 8(fvec4) CompositeConstruct 54 54 54 54 + 99: 8(fvec4) FSub 97 98 + Store 10(color) 99 + Branch 92 + 92: Label + 100: 8(fvec4) Load 30(bigColor4) + 101: 8(fvec4) Load 10(color) + 102: 8(fvec4) FAdd 101 100 + Store 10(color) 102 + 103: 8(fvec4) Load 10(color) + 104: 7(float) CompositeExtract 103 0 + 105: 7(float) Load 25(d4) + 106: 17(bool) FOrdLessThan 104 105 + SelectionMerge 108 None + BranchConditional 106 107 108 + 107: Label + 109: 8(fvec4) Load 10(color) + 110: 7(float) CompositeExtract 109 2 + 111: 7(float) FAdd 110 40 + 112: 8(fvec4) Load 10(color) + 113: 8(fvec4) CompositeInsert 111 112 2 + Store 10(color) 113 + 114: 8(fvec4) Load 10(color) + 115: 7(float) CompositeExtract 114 2 + 116: 7(float) Load 25(d4) + 117: 17(bool) FOrdLessThan 115 116 + SelectionMerge 119 None + BranchConditional 117 118 119 + 118: Label + 120: 8(fvec4) Load 10(color) + 121: 7(float) CompositeExtract 120 0 + 122: 7(float) FAdd 121 54 + 123: 8(fvec4) Load 10(color) + 124: 8(fvec4) CompositeInsert 122 123 0 + Store 10(color) 124 + Branch 79 + 119: Label + Branch 108 + 108: Label + 126: 8(fvec4) Load 10(color) + 127: 7(float) CompositeExtract 126 1 + 128: 7(float) Load 25(d4) + 129: 17(bool) FOrdLessThan 127 128 + SelectionMerge 131 None + BranchConditional 129 130 138 + 130: Label + 132: 7(float) Load 25(d4) + 133: 8(fvec4) Load 10(color) + 134: 7(float) CompositeExtract 133 1 + 135: 7(float) FAdd 134 132 136: 8(fvec4) Load 10(color) - 137: 7(float) CompositeExtract 136 0 - 138: 7(float) FAdd 137 135 - 139: 8(fvec4) Load 10(color) - 140: 8(fvec4) CompositeInsert 138 139 0 - Store 10(color) 140 - Branch 127 - 127: Label - Branch 75 - 76: Label - 141: 8(fvec4) Load 10(color) - 142: 8(fvec4) CompositeConstruct 46 46 46 46 - 143: 8(fvec4) FAdd 141 142 - Store 10(color) 143 - 146: 8(fvec4) Load 10(color) - Store 145(gl_FragColor) 146 + 137: 8(fvec4) CompositeInsert 135 136 1 + Store 10(color) 137 + Branch 131 + 138: Label + 139: 7(float) Load 25(d4) + 140: 8(fvec4) Load 10(color) + 141: 7(float) CompositeExtract 140 0 + 142: 7(float) FAdd 141 139 + 143: 8(fvec4) Load 10(color) + 144: 8(fvec4) CompositeInsert 142 143 0 + Store 10(color) 144 + Branch 131 + 131: Label + Branch 79 + 80: Label + 145: 8(fvec4) Load 10(color) + 146: 8(fvec4) CompositeConstruct 54 54 54 54 + 147: 8(fvec4) FAdd 145 146 + Store 10(color) 147 + 150: 8(fvec4) Load 10(color) + Store 149(gl_FragColor) 150 Branch 6 6: Label Return