Merge pull request #127 from dekimir/loopgen
SPV: Rework loop code generation to match SPIR-V 1.0.
This commit is contained in:
commit
33782795d9
@ -144,7 +144,6 @@ protected:
|
|||||||
std::unordered_map<const glslang::TTypeList*, spv::Id> structMap[glslang::ElpCount][glslang::ElmCount];
|
std::unordered_map<const glslang::TTypeList*, spv::Id> structMap[glslang::ElpCount][glslang::ElmCount];
|
||||||
std::unordered_map<const glslang::TTypeList*, std::vector<int> > memberRemapper; // for mapping glslang block indices to spv indices (e.g., due to hidden members)
|
std::unordered_map<const glslang::TTypeList*, std::vector<int> > memberRemapper; // for mapping glslang block indices to spv indices (e.g., due to hidden members)
|
||||||
std::stack<bool> breakForLoop; // false means break for switch
|
std::stack<bool> breakForLoop; // false means break for switch
|
||||||
std::stack<glslang::TIntermTyped*> loopTerminal; // code from the last part of a for loop: for(...; ...; terminal), needed for e.g., continue };
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1390,33 +1389,63 @@ void TGlslangToSpvTraverser::visitConstantUnion(glslang::TIntermConstantUnion* n
|
|||||||
|
|
||||||
bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIntermLoop* node)
|
bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIntermLoop* node)
|
||||||
{
|
{
|
||||||
// body emission needs to know what the for-loop terminal is when it sees a "continue"
|
auto blocks = builder.makeNewLoop();
|
||||||
loopTerminal.push(node->getTerminal());
|
builder.createBranch(&blocks.head);
|
||||||
|
if (node->testFirst() && node->getTest()) {
|
||||||
|
builder.setBuildPoint(&blocks.head);
|
||||||
|
node->getTest()->traverse(this);
|
||||||
|
spv::Id condition =
|
||||||
|
builder.accessChainLoad(convertGlslangToSpvType(node->getTest()->getType()));
|
||||||
|
builder.createLoopMerge(&blocks.merge, &blocks.continue_target, spv::LoopControlMaskNone);
|
||||||
|
builder.createConditionalBranch(condition, &blocks.body, &blocks.merge);
|
||||||
|
|
||||||
builder.makeNewLoop(node->testFirst());
|
builder.setBuildPoint(&blocks.body);
|
||||||
|
breakForLoop.push(true);
|
||||||
|
if (node->getBody())
|
||||||
|
node->getBody()->traverse(this);
|
||||||
|
builder.createBranch(&blocks.continue_target);
|
||||||
|
breakForLoop.pop();
|
||||||
|
|
||||||
|
builder.setBuildPoint(&blocks.continue_target);
|
||||||
|
if (node->getTerminal())
|
||||||
|
node->getTerminal()->traverse(this);
|
||||||
|
builder.createBranch(&blocks.head);
|
||||||
|
} else {
|
||||||
|
// Spec requires back edges to target header blocks, and every header
|
||||||
|
// block must dominate its merge block. Create an empty header block
|
||||||
|
// here to ensure these conditions are met even when body contains
|
||||||
|
// non-trivial control flow.
|
||||||
|
builder.setBuildPoint(&blocks.head);
|
||||||
|
builder.createLoopMerge(&blocks.merge, &blocks.continue_target, spv::LoopControlMaskNone);
|
||||||
|
builder.createBranch(&blocks.body);
|
||||||
|
|
||||||
|
breakForLoop.push(true);
|
||||||
|
builder.setBuildPoint(&blocks.body);
|
||||||
|
if (node->getBody())
|
||||||
|
node->getBody()->traverse(this);
|
||||||
|
builder.createBranch(&blocks.continue_target);
|
||||||
|
breakForLoop.pop();
|
||||||
|
|
||||||
|
builder.setBuildPoint(&blocks.continue_target);
|
||||||
|
if (node->getTerminal())
|
||||||
|
node->getTerminal()->traverse(this);
|
||||||
if (node->getTest()) {
|
if (node->getTest()) {
|
||||||
node->getTest()->traverse(this);
|
node->getTest()->traverse(this);
|
||||||
// the AST only contained the test computation, not the branch, we have to add it
|
spv::Id condition =
|
||||||
spv::Id condition = builder.accessChainLoad(convertGlslangToSpvType(node->getTest()->getType()));
|
builder.accessChainLoad(convertGlslangToSpvType(node->getTest()->getType()));
|
||||||
builder.createLoopTestBranch(condition);
|
builder.createConditionalBranch(condition, &blocks.head, &blocks.merge);
|
||||||
} else {
|
} else {
|
||||||
builder.createBranchToBody();
|
// TODO: unless there was a break instruction somewhere in the body,
|
||||||
|
// this is an infinite loop, so we should abort code generation with
|
||||||
|
// a warning. As it stands now, nothing will jump to the merge
|
||||||
|
// block, and it may be dropped as unreachable by the SPIR-V dumper.
|
||||||
|
// That, in turn, will result in a non-existing %ID in the LoopMerge
|
||||||
|
// above.
|
||||||
|
builder.createBranch(&blocks.head);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node->getBody()) {
|
|
||||||
breakForLoop.push(true);
|
|
||||||
node->getBody()->traverse(this);
|
|
||||||
breakForLoop.pop();
|
|
||||||
}
|
}
|
||||||
|
builder.setBuildPoint(&blocks.merge);
|
||||||
if (loopTerminal.top())
|
|
||||||
loopTerminal.top()->traverse(this);
|
|
||||||
|
|
||||||
builder.closeLoop();
|
builder.closeLoop();
|
||||||
|
|
||||||
loopTerminal.pop();
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1436,8 +1465,6 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
|
|||||||
builder.addSwitchBreak();
|
builder.addSwitchBreak();
|
||||||
break;
|
break;
|
||||||
case glslang::EOpContinue:
|
case glslang::EOpContinue:
|
||||||
if (loopTerminal.top())
|
|
||||||
loopTerminal.top()->traverse(this);
|
|
||||||
builder.createLoopContinue();
|
builder.createLoopContinue();
|
||||||
break;
|
break;
|
||||||
case glslang::EOpReturn:
|
case glslang::EOpReturn:
|
||||||
|
@ -67,8 +67,9 @@ class ReadableOrderTraverser {
|
|||||||
public:
|
public:
|
||||||
explicit ReadableOrderTraverser(std::function<void(Block*)> callback) : callback_(callback) {}
|
explicit ReadableOrderTraverser(std::function<void(Block*)> callback) : callback_(callback) {}
|
||||||
// Visits the block if it hasn't been visited already and isn't currently
|
// Visits the block if it hasn't been visited already and isn't currently
|
||||||
// being delayed. Invokes callback(block), then descends into its successors.
|
// being delayed. Invokes callback(block), then descends into its
|
||||||
// Delays merge-block processing until all the branches have been completed.
|
// successors. Delays merge-block and continue-block processing until all
|
||||||
|
// the branches have been completed.
|
||||||
void visit(Block* block)
|
void visit(Block* block)
|
||||||
{
|
{
|
||||||
assert(block);
|
assert(block);
|
||||||
@ -77,14 +78,25 @@ public:
|
|||||||
callback_(block);
|
callback_(block);
|
||||||
visited_[block] = true;
|
visited_[block] = true;
|
||||||
Block* mergeBlock = nullptr;
|
Block* mergeBlock = nullptr;
|
||||||
|
Block* continueBlock = nullptr;
|
||||||
auto mergeInst = block->getMergeInstruction();
|
auto mergeInst = block->getMergeInstruction();
|
||||||
if (mergeInst) {
|
if (mergeInst) {
|
||||||
Id mergeId = mergeInst->getIdOperand(0);
|
Id mergeId = mergeInst->getIdOperand(0);
|
||||||
mergeBlock = block->getParent().getParent().getInstruction(mergeId)->getBlock();
|
mergeBlock = block->getParent().getParent().getInstruction(mergeId)->getBlock();
|
||||||
delayed_[mergeBlock] = true;
|
delayed_[mergeBlock] = true;
|
||||||
|
if (mergeInst->getOpCode() == spv::OpLoopMerge) {
|
||||||
|
Id continueId = mergeInst->getIdOperand(1);
|
||||||
|
continueBlock =
|
||||||
|
block->getParent().getParent().getInstruction(continueId)->getBlock();
|
||||||
|
delayed_[continueBlock] = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (const auto succ : block->getSuccessors())
|
for (const auto succ : block->getSuccessors())
|
||||||
visit(succ);
|
visit(succ);
|
||||||
|
if (continueBlock) {
|
||||||
|
delayed_[continueBlock] = false;
|
||||||
|
visit(continueBlock);
|
||||||
|
}
|
||||||
if (mergeBlock) {
|
if (mergeBlock) {
|
||||||
delayed_[mergeBlock] = false;
|
delayed_[mergeBlock] = false;
|
||||||
visit(mergeBlock);
|
visit(mergeBlock);
|
||||||
|
@ -862,7 +862,7 @@ void Builder::leaveFunction()
|
|||||||
if (unreachable) {
|
if (unreachable) {
|
||||||
// Given that this block is at the end of a function, it must be right after an
|
// Given that this block is at the end of a function, it must be right after an
|
||||||
// explicit return, just remove it.
|
// explicit return, just remove it.
|
||||||
function.popBlock(block);
|
function.removeBlock(block);
|
||||||
} else {
|
} else {
|
||||||
// We'll add a return instruction at the end of the current block,
|
// We'll add a return instruction at the end of the current block,
|
||||||
// which for a non-void function is really error recovery (?), as the source
|
// which for a non-void function is really error recovery (?), as the source
|
||||||
@ -1808,150 +1808,39 @@ void Builder::endSwitch(std::vector<Block*>& /*segmentBlock*/)
|
|||||||
switchMerges.pop();
|
switchMerges.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comments in header
|
Block& Builder::makeNewBlock()
|
||||||
void Builder::makeNewLoop(bool loopTestFirst)
|
|
||||||
{
|
{
|
||||||
loops.push(Loop(*this, loopTestFirst));
|
Function& function = buildPoint->getParent();
|
||||||
const Loop& loop = loops.top();
|
auto block = new Block(getUniqueId(), function);
|
||||||
|
function.addBlock(block);
|
||||||
// The loop test is always emitted before the loop body.
|
return *block;
|
||||||
// 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);
|
|
||||||
|
|
||||||
// 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.
|
|
||||||
|
|
||||||
// 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(std::unique_ptr<Instruction>(loop.isFirstIteration));
|
|
||||||
|
|
||||||
// Mark the end of the structured loop. This must exist in the loop header block.
|
|
||||||
createLoopMerge(loop.merge, loop.header, 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);
|
|
||||||
|
|
||||||
// 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.
|
|
||||||
createSelectionMerge(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)
|
Builder::LoopBlocks& Builder::makeNewLoop()
|
||||||
{
|
{
|
||||||
const Loop& loop = loops.top();
|
loops.push({makeNewBlock(), makeNewBlock(), makeNewBlock(), makeNewBlock()});
|
||||||
|
return loops.top();
|
||||||
// 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) {
|
|
||||||
createLoopMerge(loop.merge, loop.header, LoopControlMaskNone);
|
|
||||||
// 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);
|
|
||||||
createSelectionMerge(stayInLoopBlock, SelectionControlMaskNone);
|
|
||||||
|
|
||||||
// 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::createBranchToBody()
|
|
||||||
{
|
|
||||||
const Loop& loop = loops.top();
|
|
||||||
assert(loop.body);
|
|
||||||
|
|
||||||
// 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()
|
void Builder::createLoopContinue()
|
||||||
{
|
{
|
||||||
createBranchToLoopHeaderFromInside(loops.top());
|
createBranch(&loops.top().continue_target);
|
||||||
// Set up a block for dead code.
|
// Set up a block for dead code.
|
||||||
createAndSetNoPredecessorBlock("post-loop-continue");
|
createAndSetNoPredecessorBlock("post-loop-continue");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add an exit (e.g. "break") for the innermost loop that you're in
|
|
||||||
void Builder::createLoopExit()
|
void Builder::createLoopExit()
|
||||||
{
|
{
|
||||||
createBranch(loops.top().merge);
|
createBranch(&loops.top().merge);
|
||||||
// Set up a block for dead code.
|
// Set up a block for dead code.
|
||||||
createAndSetNoPredecessorBlock("post-loop-break");
|
createAndSetNoPredecessorBlock("post-loop-break");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the innermost loop
|
|
||||||
void Builder::closeLoop()
|
void Builder::closeLoop()
|
||||||
{
|
{
|
||||||
const Loop& loop = loops.top();
|
|
||||||
|
|
||||||
// Branch back to the top
|
|
||||||
createBranchToLoopHeaderFromInside(loop);
|
|
||||||
|
|
||||||
// Add the merge block and set the build point to it
|
|
||||||
loop.function->addBlock(loop.merge);
|
|
||||||
setBuildPoint(loop.merge);
|
|
||||||
|
|
||||||
loops.pop();
|
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()
|
void Builder::clearAccessChain()
|
||||||
{
|
{
|
||||||
accessChain.base = NoResult;
|
accessChain.base = NoResult;
|
||||||
@ -2314,24 +2203,4 @@ void MissingFunctionality(const char* fun)
|
|||||||
printf("Missing functionality: %s\n", fun);
|
printf("Missing functionality: %s\n", fun);
|
||||||
}
|
}
|
||||||
|
|
||||||
Builder::Loop::Loop(Builder& builder, bool testFirstArg)
|
|
||||||
: function(&builder.getBuildPoint()->getParent()),
|
|
||||||
header(new Block(builder.getUniqueId(), *function)),
|
|
||||||
merge(new Block(builder.getUniqueId(), *function)),
|
|
||||||
body(new Block(builder.getUniqueId(), *function)),
|
|
||||||
testFirst(testFirstArg),
|
|
||||||
isFirstIteration(nullptr)
|
|
||||||
{
|
|
||||||
if (!testFirst)
|
|
||||||
{
|
|
||||||
// You may be tempted to rewrite this as
|
|
||||||
// new Instruction(builder.getUniqueId(), builder.makeBoolType(), OpPhi);
|
|
||||||
// This will cause subtle test failures because builder.getUniqueId(),
|
|
||||||
// and builder.makeBoolType() can then get run in a compiler-specific
|
|
||||||
// order making tests fail for certain configurations.
|
|
||||||
Id instructionId = builder.getUniqueId();
|
|
||||||
isFirstIteration = new Instruction(instructionId, builder.makeBoolType(), OpPhi);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}; // end spv namespace
|
}; // end spv namespace
|
||||||
|
@ -387,28 +387,24 @@ public:
|
|||||||
// Finish off the innermost switch.
|
// Finish off the innermost switch.
|
||||||
void endSwitch(std::vector<Block*>& segmentBB);
|
void endSwitch(std::vector<Block*>& segmentBB);
|
||||||
|
|
||||||
// Start the beginning of a new loop, and prepare the builder to
|
struct LoopBlocks {
|
||||||
// generate code for the loop test.
|
Block &head, &body, &merge, &continue_target;
|
||||||
// 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.
|
// Start a new loop and prepare the builder to generate code for it. Until
|
||||||
// The true branch goes to the first block in the loop body, and
|
// closeLoop() is called for this loop, createLoopContinue() and
|
||||||
// the false branch goes to the loop's merge block. The builder insertion
|
// createLoopExit() will target its corresponding blocks.
|
||||||
// point will be placed at the start of the body.
|
LoopBlocks& makeNewLoop();
|
||||||
void createLoopTestBranch(Id condition);
|
|
||||||
|
|
||||||
// Generate an unconditional branch to the loop body. The builder insertion
|
// Create a new block in the function containing the build point. Memory is
|
||||||
// point will be placed at the start of the body. Use this when there is
|
// owned by the function object.
|
||||||
// no loop test.
|
Block& makeNewBlock();
|
||||||
void createBranchToBody();
|
|
||||||
|
|
||||||
// Add a branch to the test of the current (innermost) loop.
|
// Add a branch to the continue_target of the current (innermost) loop.
|
||||||
// The way we generate code, that's also the loop header.
|
|
||||||
void createLoopContinue();
|
void createLoopContinue();
|
||||||
|
|
||||||
// Add an exit (e.g. "break") for the innermost loop that you're in
|
// Add an exit (e.g. "break") from the innermost loop that we're currently
|
||||||
|
// in.
|
||||||
void createLoopExit();
|
void createLoopExit();
|
||||||
|
|
||||||
// Close the innermost loop that you're in
|
// Close the innermost loop that you're in
|
||||||
@ -508,7 +504,11 @@ public:
|
|||||||
|
|
||||||
void dump(std::vector<unsigned int>&) const;
|
void dump(std::vector<unsigned int>&) const;
|
||||||
|
|
||||||
protected:
|
void createBranch(Block* block);
|
||||||
|
void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock);
|
||||||
|
void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control);
|
||||||
|
|
||||||
|
protected:
|
||||||
Id makeIntConstant(Id typeId, unsigned value, bool specConstant);
|
Id makeIntConstant(Id typeId, unsigned value, bool specConstant);
|
||||||
Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) const;
|
Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) const;
|
||||||
Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const;
|
Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) const;
|
||||||
@ -517,15 +517,9 @@ protected:
|
|||||||
void transferAccessChainSwizzle(bool dynamic);
|
void transferAccessChainSwizzle(bool dynamic);
|
||||||
void simplifyAccessChainSwizzle();
|
void simplifyAccessChainSwizzle();
|
||||||
void createAndSetNoPredecessorBlock(const char*);
|
void createAndSetNoPredecessorBlock(const char*);
|
||||||
void createBranch(Block* block);
|
|
||||||
void createSelectionMerge(Block* mergeBlock, unsigned int control);
|
void createSelectionMerge(Block* mergeBlock, unsigned int control);
|
||||||
void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control);
|
|
||||||
void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock);
|
|
||||||
void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
|
void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
|
||||||
|
|
||||||
struct Loop; // Defined below.
|
|
||||||
void createBranchToLoopHeaderFromInside(const Loop& loop);
|
|
||||||
|
|
||||||
SourceLanguage source;
|
SourceLanguage source;
|
||||||
int sourceVersion;
|
int sourceVersion;
|
||||||
std::vector<const char*> extensions;
|
std::vector<const char*> extensions;
|
||||||
@ -557,47 +551,8 @@ protected:
|
|||||||
// stack of switches
|
// stack of switches
|
||||||
std::stack<Block*> switchMerges;
|
std::stack<Block*> switchMerges;
|
||||||
|
|
||||||
// Data that needs to be kept in order to properly handle loops.
|
|
||||||
struct Loop {
|
|
||||||
// Constructs a default Loop structure containing new header, merge, and
|
|
||||||
// body blocks for the current function.
|
|
||||||
// The testFirst argument indicates whether the loop test executes at
|
|
||||||
// the top of the loop rather than at the bottom. In the latter case,
|
|
||||||
// also create a phi instruction whose value indicates whether we're on
|
|
||||||
// the first iteration of the loop. The phi instruction is initialized
|
|
||||||
// with no values or predecessor operands.
|
|
||||||
Loop(Builder& builder, bool testFirst);
|
|
||||||
|
|
||||||
// The function containing the loop.
|
|
||||||
Function* const function;
|
|
||||||
// The header is the first block generated for the loop.
|
|
||||||
// It dominates all the blocks in the loop, i.e. it is always
|
|
||||||
// executed before any others.
|
|
||||||
// If the loop test is executed before the body (as in "while" and
|
|
||||||
// "for" loops), then the header begins with the test code.
|
|
||||||
// Otherwise, the loop is a "do-while" loop and the header contains the
|
|
||||||
// start of the body of the loop (if the body exists).
|
|
||||||
Block* const header;
|
|
||||||
// The merge block marks the end of the loop. Control is transferred
|
|
||||||
// to the merge block when either the loop test fails, or when a
|
|
||||||
// nested "break" is encountered.
|
|
||||||
Block* const merge;
|
|
||||||
// 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* const body;
|
|
||||||
// True when the loop test executes before the body.
|
|
||||||
const 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. This is non-const because
|
|
||||||
// it has to be initialized outside of the initializer-list.
|
|
||||||
Instruction* isFirstIteration;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Our loop stack.
|
// Our loop stack.
|
||||||
std::stack<Loop> loops;
|
std::stack<LoopBlocks> loops;
|
||||||
}; // end Builder class
|
}; // end Builder class
|
||||||
|
|
||||||
// Use for non-fatal notes about what's not complete
|
// Use for non-fatal notes about what's not complete
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
|
|
||||||
#include "spirv.hpp"
|
#include "spirv.hpp"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@ -259,7 +260,13 @@ public:
|
|||||||
Id getParamId(int p) { return parameterInstructions[p]->getResultId(); }
|
Id getParamId(int p) { return parameterInstructions[p]->getResultId(); }
|
||||||
|
|
||||||
void addBlock(Block* block) { blocks.push_back(block); }
|
void addBlock(Block* block) { blocks.push_back(block); }
|
||||||
void popBlock(Block*) { blocks.pop_back(); }
|
void removeBlock(Block* block)
|
||||||
|
{
|
||||||
|
auto found = find(blocks.begin(), blocks.end(), block);
|
||||||
|
assert(found != blocks.end());
|
||||||
|
blocks.erase(found);
|
||||||
|
delete block;
|
||||||
|
}
|
||||||
|
|
||||||
Module& getParent() const { return parent; }
|
Module& getParent() const { return parent; }
|
||||||
Block* getEntryBlock() const { return blocks.front(); }
|
Block* getEntryBlock() const { return blocks.front(); }
|
||||||
|
@ -8,64 +8,66 @@ Linked vertex stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 38
|
// Id's are bound by 39
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 23 26 32 37
|
EntryPoint Vertex 4 "main" 24 27 33 38
|
||||||
Source GLSL 130
|
Source GLSL 130
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "i"
|
Name 8 "i"
|
||||||
Name 23 "colorOut"
|
Name 24 "colorOut"
|
||||||
Name 26 "color"
|
Name 27 "color"
|
||||||
Name 32 "gl_Position"
|
Name 33 "gl_Position"
|
||||||
Name 37 "gl_VertexID"
|
Name 38 "gl_VertexID"
|
||||||
Decorate 32(gl_Position) BuiltIn Position
|
Decorate 33(gl_Position) BuiltIn Position
|
||||||
Decorate 37(gl_VertexID) BuiltIn VertexId
|
Decorate 38(gl_VertexID) BuiltIn VertexId
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 1
|
9: 6(int) Constant 1
|
||||||
14: 6(int) Constant 5
|
15: 6(int) Constant 5
|
||||||
15: TypeBool
|
16: TypeBool
|
||||||
17: TypeFloat 32
|
18: TypeFloat 32
|
||||||
18: TypeVector 17(float) 4
|
19: TypeVector 18(float) 4
|
||||||
19: TypeInt 32 0
|
20: TypeInt 32 0
|
||||||
20: 19(int) Constant 6
|
21: 20(int) Constant 6
|
||||||
21: TypeArray 18(fvec4) 20
|
22: TypeArray 19(fvec4) 21
|
||||||
22: TypePointer Output 21
|
23: TypePointer Output 22
|
||||||
23(colorOut): 22(ptr) Variable Output
|
24(colorOut): 23(ptr) Variable Output
|
||||||
25: TypePointer Input 18(fvec4)
|
26: TypePointer Input 19(fvec4)
|
||||||
26(color): 25(ptr) Variable Input
|
27(color): 26(ptr) Variable Input
|
||||||
28: TypePointer Output 18(fvec4)
|
29: TypePointer Output 19(fvec4)
|
||||||
32(gl_Position): 28(ptr) Variable Output
|
33(gl_Position): 29(ptr) Variable Output
|
||||||
33: 6(int) Constant 2
|
34: 6(int) Constant 2
|
||||||
36: TypePointer Input 6(int)
|
37: TypePointer Input 6(int)
|
||||||
37(gl_VertexID): 36(ptr) Variable Input
|
38(gl_VertexID): 37(ptr) Variable Input
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(i): 7(ptr) Variable Function
|
8(i): 7(ptr) Variable Function
|
||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 6(int) Load 8(i)
|
14: 6(int) Load 8(i)
|
||||||
16: 15(bool) SLessThan 13 14
|
17: 16(bool) SLessThan 14 15
|
||||||
LoopMerge 11 10 None
|
LoopMerge 12 13 None
|
||||||
BranchConditional 16 12 11
|
BranchConditional 17 11 12
|
||||||
12: Label
|
|
||||||
24: 6(int) Load 8(i)
|
|
||||||
27: 18(fvec4) Load 26(color)
|
|
||||||
29: 28(ptr) AccessChain 23(colorOut) 24
|
|
||||||
Store 29 27
|
|
||||||
30: 6(int) Load 8(i)
|
|
||||||
31: 6(int) IAdd 30 9
|
|
||||||
Store 8(i) 31
|
|
||||||
Branch 10
|
|
||||||
11: Label
|
11: Label
|
||||||
34: 28(ptr) AccessChain 23(colorOut) 33
|
25: 6(int) Load 8(i)
|
||||||
35: 18(fvec4) Load 34
|
28: 19(fvec4) Load 27(color)
|
||||||
Store 32(gl_Position) 35
|
30: 29(ptr) AccessChain 24(colorOut) 25
|
||||||
|
Store 30 28
|
||||||
|
Branch 13
|
||||||
|
13: Label
|
||||||
|
31: 6(int) Load 8(i)
|
||||||
|
32: 6(int) IAdd 31 9
|
||||||
|
Store 8(i) 32
|
||||||
|
Branch 10
|
||||||
|
12: Label
|
||||||
|
35: 29(ptr) AccessChain 24(colorOut) 34
|
||||||
|
36: 19(fvec4) Load 35
|
||||||
|
Store 33(gl_Position) 36
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -5,56 +5,47 @@ Linked vertex stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 29
|
// Id's are bound by 24
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 27 28
|
EntryPoint Vertex 4 "main" 22 23
|
||||||
Source ESSL 300
|
Source ESSL 300
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "i"
|
Name 8 "i"
|
||||||
Name 27 "gl_VertexID"
|
Name 22 "gl_VertexID"
|
||||||
Name 28 "gl_InstanceID"
|
Name 23 "gl_InstanceID"
|
||||||
Decorate 27(gl_VertexID) BuiltIn VertexId
|
Decorate 22(gl_VertexID) BuiltIn VertexId
|
||||||
Decorate 28(gl_InstanceID) BuiltIn InstanceId
|
Decorate 23(gl_InstanceID) BuiltIn InstanceId
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
14: TypeBool
|
15: 6(int) Constant 1
|
||||||
15: 14(bool) ConstantTrue
|
18: 6(int) Constant 10
|
||||||
19: 6(int) Constant 10
|
19: TypeBool
|
||||||
23: 6(int) Constant 1
|
21: TypePointer Input 6(int)
|
||||||
25: 14(bool) ConstantFalse
|
22(gl_VertexID): 21(ptr) Variable Input
|
||||||
26: TypePointer Input 6(int)
|
23(gl_InstanceID): 21(ptr) Variable Input
|
||||||
27(gl_VertexID): 26(ptr) Variable Input
|
|
||||||
28(gl_InstanceID): 26(ptr) Variable Input
|
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(i): 7(ptr) Variable Function
|
8(i): 7(ptr) Variable Function
|
||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 14(bool) Phi 15 5 25 12
|
LoopMerge 12 13 None
|
||||||
LoopMerge 11 10 None
|
Branch 11
|
||||||
Branch 16
|
|
||||||
16: Label
|
|
||||||
SelectionMerge 12 None
|
|
||||||
BranchConditional 13 12 17
|
|
||||||
17: Label
|
|
||||||
18: 6(int) Load 8(i)
|
|
||||||
20: 14(bool) SLessThan 18 19
|
|
||||||
SelectionMerge 21 None
|
|
||||||
BranchConditional 20 21 11
|
|
||||||
21: Label
|
|
||||||
Branch 12
|
|
||||||
12: Label
|
|
||||||
22: 6(int) Load 8(i)
|
|
||||||
24: 6(int) IAdd 22 23
|
|
||||||
Store 8(i) 24
|
|
||||||
Branch 10
|
|
||||||
11: Label
|
11: Label
|
||||||
|
14: 6(int) Load 8(i)
|
||||||
|
16: 6(int) IAdd 14 15
|
||||||
|
Store 8(i) 16
|
||||||
|
Branch 13
|
||||||
|
13: Label
|
||||||
|
17: 6(int) Load 8(i)
|
||||||
|
20: 19(bool) SLessThan 17 18
|
||||||
|
BranchConditional 20 10 12
|
||||||
|
12: Label
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -5,94 +5,85 @@ Linked vertex stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 51
|
// Id's are bound by 46
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 49 50
|
EntryPoint Vertex 4 "main" 44 45
|
||||||
Source ESSL 300
|
Source ESSL 300
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "i"
|
Name 8 "i"
|
||||||
Name 24 "A"
|
Name 14 "A"
|
||||||
Name 30 "B"
|
Name 21 "B"
|
||||||
Name 33 "C"
|
Name 24 "C"
|
||||||
Name 39 "D"
|
Name 30 "D"
|
||||||
Name 42 "E"
|
Name 33 "E"
|
||||||
Name 44 "F"
|
Name 35 "F"
|
||||||
Name 46 "G"
|
Name 41 "G"
|
||||||
Name 49 "gl_VertexID"
|
Name 44 "gl_VertexID"
|
||||||
Name 50 "gl_InstanceID"
|
Name 45 "gl_InstanceID"
|
||||||
Decorate 49(gl_VertexID) BuiltIn VertexId
|
Decorate 44(gl_VertexID) BuiltIn VertexId
|
||||||
Decorate 50(gl_InstanceID) BuiltIn InstanceId
|
Decorate 45(gl_InstanceID) BuiltIn InstanceId
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
14: TypeBool
|
16: 6(int) Constant 2
|
||||||
15: 14(bool) ConstantTrue
|
17: TypeBool
|
||||||
19: 6(int) Constant 1
|
22: 6(int) Constant 1
|
||||||
21: 6(int) Constant 19
|
26: 6(int) Constant 5
|
||||||
26: 6(int) Constant 2
|
31: 6(int) Constant 3
|
||||||
31: 14(bool) ConstantFalse
|
34: 6(int) Constant 42
|
||||||
35: 6(int) Constant 5
|
36: 6(int) Constant 99
|
||||||
40: 6(int) Constant 3
|
39: 6(int) Constant 19
|
||||||
43: 6(int) Constant 42
|
42: 6(int) Constant 12
|
||||||
45: 6(int) Constant 99
|
43: TypePointer Input 6(int)
|
||||||
47: 6(int) Constant 12
|
44(gl_VertexID): 43(ptr) Variable Input
|
||||||
48: TypePointer Input 6(int)
|
45(gl_InstanceID): 43(ptr) Variable Input
|
||||||
49(gl_VertexID): 48(ptr) Variable Input
|
|
||||||
50(gl_InstanceID): 48(ptr) Variable Input
|
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(i): 7(ptr) Variable Function
|
8(i): 7(ptr) Variable Function
|
||||||
24(A): 7(ptr) Variable Function
|
14(A): 7(ptr) Variable Function
|
||||||
30(B): 7(ptr) Variable Function
|
21(B): 7(ptr) Variable Function
|
||||||
33(C): 7(ptr) Variable Function
|
24(C): 7(ptr) Variable Function
|
||||||
39(D): 7(ptr) Variable Function
|
30(D): 7(ptr) Variable Function
|
||||||
42(E): 7(ptr) Variable Function
|
33(E): 7(ptr) Variable Function
|
||||||
44(F): 7(ptr) Variable Function
|
35(F): 7(ptr) Variable Function
|
||||||
46(G): 7(ptr) Variable Function
|
41(G): 7(ptr) Variable Function
|
||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 14(bool) Phi 15 5 31 28 31 38
|
LoopMerge 12 13 None
|
||||||
LoopMerge 11 10 None
|
Branch 11
|
||||||
Branch 16
|
11: Label
|
||||||
16: Label
|
Store 14(A) 9
|
||||||
SelectionMerge 12 None
|
15: 6(int) Load 8(i)
|
||||||
BranchConditional 13 12 17
|
18: 17(bool) IEqual 15 16
|
||||||
17: Label
|
SelectionMerge 20 None
|
||||||
18: 6(int) Load 8(i)
|
BranchConditional 18 19 20
|
||||||
20: 6(int) IAdd 18 19
|
19: Label
|
||||||
Store 8(i) 20
|
Store 21(B) 22
|
||||||
22: 14(bool) SLessThan 20 21
|
Branch 13
|
||||||
SelectionMerge 23 None
|
20: Label
|
||||||
BranchConditional 22 23 11
|
|
||||||
23: Label
|
|
||||||
Branch 12
|
|
||||||
12: Label
|
|
||||||
Store 24(A) 9
|
|
||||||
25: 6(int) Load 8(i)
|
25: 6(int) Load 8(i)
|
||||||
27: 14(bool) IEqual 25 26
|
27: 17(bool) IEqual 25 26
|
||||||
SelectionMerge 29 None
|
SelectionMerge 29 None
|
||||||
BranchConditional 27 28 29
|
BranchConditional 27 28 29
|
||||||
28: Label
|
28: Label
|
||||||
Store 30(B) 19
|
Store 30(D) 31
|
||||||
Branch 10
|
Branch 12
|
||||||
29: Label
|
29: Label
|
||||||
34: 6(int) Load 8(i)
|
Store 35(F) 36
|
||||||
36: 14(bool) IEqual 34 35
|
Branch 13
|
||||||
SelectionMerge 38 None
|
13: Label
|
||||||
BranchConditional 36 37 38
|
37: 6(int) Load 8(i)
|
||||||
37: Label
|
38: 6(int) IAdd 37 22
|
||||||
Store 39(D) 40
|
Store 8(i) 38
|
||||||
Branch 11
|
40: 17(bool) SLessThan 38 39
|
||||||
38: Label
|
BranchConditional 40 10 12
|
||||||
Store 44(F) 45
|
12: Label
|
||||||
Branch 10
|
Store 41(G) 42
|
||||||
11: Label
|
|
||||||
Store 46(G) 47
|
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -5,20 +5,20 @@ Linked fragment stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 40
|
// Id's are bound by 35
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 11 38
|
EntryPoint Fragment 4 "main" 11 33
|
||||||
ExecutionMode 4 OriginLowerLeft
|
ExecutionMode 4 OriginLowerLeft
|
||||||
Source GLSL 110
|
Source GLSL 110
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 9 "color"
|
Name 9 "color"
|
||||||
Name 11 "BaseColor"
|
Name 11 "BaseColor"
|
||||||
Name 27 "d"
|
Name 18 "bigColor"
|
||||||
Name 32 "bigColor"
|
Name 28 "d"
|
||||||
Name 38 "gl_FragColor"
|
Name 33 "gl_FragColor"
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeFloat 32
|
6: TypeFloat 32
|
||||||
@ -26,18 +26,16 @@ Linked fragment stage:
|
|||||||
8: TypePointer Function 7(fvec4)
|
8: TypePointer Function 7(fvec4)
|
||||||
10: TypePointer Input 7(fvec4)
|
10: TypePointer Input 7(fvec4)
|
||||||
11(BaseColor): 10(ptr) Variable Input
|
11(BaseColor): 10(ptr) Variable Input
|
||||||
17: TypeBool
|
17: TypePointer UniformConstant 7(fvec4)
|
||||||
18: 17(bool) ConstantTrue
|
18(bigColor): 17(ptr) Variable UniformConstant
|
||||||
21: TypeInt 32 0
|
22: TypeInt 32 0
|
||||||
22: 21(int) Constant 0
|
23: 22(int) Constant 0
|
||||||
23: TypePointer Function 6(float)
|
24: TypePointer Function 6(float)
|
||||||
26: TypePointer UniformConstant 6(float)
|
27: TypePointer UniformConstant 6(float)
|
||||||
27(d): 26(ptr) Variable UniformConstant
|
28(d): 27(ptr) Variable UniformConstant
|
||||||
31: TypePointer UniformConstant 7(fvec4)
|
30: TypeBool
|
||||||
32(bigColor): 31(ptr) Variable UniformConstant
|
32: TypePointer Output 7(fvec4)
|
||||||
36: 17(bool) ConstantFalse
|
33(gl_FragColor): 32(ptr) Variable Output
|
||||||
37: TypePointer Output 7(fvec4)
|
|
||||||
38(gl_FragColor): 37(ptr) Variable Output
|
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
9(color): 8(ptr) Variable Function
|
9(color): 8(ptr) Variable Function
|
||||||
@ -45,29 +43,22 @@ Linked fragment stage:
|
|||||||
Store 9(color) 12
|
Store 9(color) 12
|
||||||
Branch 13
|
Branch 13
|
||||||
13: Label
|
13: Label
|
||||||
16: 17(bool) Phi 18 5 36 15
|
LoopMerge 15 16 None
|
||||||
LoopMerge 14 13 None
|
Branch 14
|
||||||
Branch 19
|
|
||||||
19: Label
|
|
||||||
SelectionMerge 15 None
|
|
||||||
BranchConditional 16 15 20
|
|
||||||
20: Label
|
|
||||||
24: 23(ptr) AccessChain 9(color) 22
|
|
||||||
25: 6(float) Load 24
|
|
||||||
28: 6(float) Load 27(d)
|
|
||||||
29: 17(bool) FOrdLessThan 25 28
|
|
||||||
SelectionMerge 30 None
|
|
||||||
BranchConditional 29 30 14
|
|
||||||
30: Label
|
|
||||||
Branch 15
|
|
||||||
15: Label
|
|
||||||
33: 7(fvec4) Load 32(bigColor)
|
|
||||||
34: 7(fvec4) Load 9(color)
|
|
||||||
35: 7(fvec4) FAdd 34 33
|
|
||||||
Store 9(color) 35
|
|
||||||
Branch 13
|
|
||||||
14: Label
|
14: Label
|
||||||
39: 7(fvec4) Load 9(color)
|
19: 7(fvec4) Load 18(bigColor)
|
||||||
Store 38(gl_FragColor) 39
|
20: 7(fvec4) Load 9(color)
|
||||||
|
21: 7(fvec4) FAdd 20 19
|
||||||
|
Store 9(color) 21
|
||||||
|
Branch 16
|
||||||
|
16: Label
|
||||||
|
25: 24(ptr) AccessChain 9(color) 23
|
||||||
|
26: 6(float) Load 25
|
||||||
|
29: 6(float) Load 28(d)
|
||||||
|
31: 30(bool) FOrdLessThan 26 29
|
||||||
|
BranchConditional 31 13 15
|
||||||
|
15: Label
|
||||||
|
34: 7(fvec4) Load 9(color)
|
||||||
|
Store 33(gl_FragColor) 34
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -5,87 +5,86 @@ Linked vertex stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 48
|
// Id's are bound by 47
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 46 47
|
EntryPoint Vertex 4 "main" 45 46
|
||||||
Source ESSL 300
|
Source ESSL 300
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "i"
|
Name 8 "i"
|
||||||
Name 17 "A"
|
Name 18 "A"
|
||||||
Name 25 "B"
|
Name 26 "B"
|
||||||
Name 29 "C"
|
Name 28 "C"
|
||||||
Name 36 "D"
|
Name 35 "D"
|
||||||
Name 38 "E"
|
Name 37 "E"
|
||||||
Name 39 "F"
|
Name 38 "F"
|
||||||
Name 43 "G"
|
Name 42 "G"
|
||||||
Name 46 "gl_VertexID"
|
Name 45 "gl_VertexID"
|
||||||
Name 47 "gl_InstanceID"
|
Name 46 "gl_InstanceID"
|
||||||
Decorate 46(gl_VertexID) BuiltIn VertexId
|
Decorate 45(gl_VertexID) BuiltIn VertexId
|
||||||
Decorate 47(gl_InstanceID) BuiltIn InstanceId
|
Decorate 46(gl_InstanceID) BuiltIn InstanceId
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
14: 6(int) Constant 10
|
15: 6(int) Constant 10
|
||||||
15: TypeBool
|
16: TypeBool
|
||||||
18: 6(int) Constant 1
|
19: 6(int) Constant 1
|
||||||
20: 6(int) Constant 2
|
21: 6(int) Constant 2
|
||||||
31: 6(int) Constant 3
|
30: 6(int) Constant 3
|
||||||
40: 6(int) Constant 12
|
39: 6(int) Constant 12
|
||||||
44: 6(int) Constant 99
|
43: 6(int) Constant 99
|
||||||
45: TypePointer Input 6(int)
|
44: TypePointer Input 6(int)
|
||||||
46(gl_VertexID): 45(ptr) Variable Input
|
45(gl_VertexID): 44(ptr) Variable Input
|
||||||
47(gl_InstanceID): 45(ptr) Variable Input
|
46(gl_InstanceID): 44(ptr) Variable Input
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(i): 7(ptr) Variable Function
|
8(i): 7(ptr) Variable Function
|
||||||
17(A): 7(ptr) Variable Function
|
18(A): 7(ptr) Variable Function
|
||||||
25(B): 7(ptr) Variable Function
|
26(B): 7(ptr) Variable Function
|
||||||
29(C): 7(ptr) Variable Function
|
28(C): 7(ptr) Variable Function
|
||||||
36(D): 7(ptr) Variable Function
|
35(D): 7(ptr) Variable Function
|
||||||
38(E): 7(ptr) Variable Function
|
37(E): 7(ptr) Variable Function
|
||||||
39(F): 7(ptr) Variable Function
|
38(F): 7(ptr) Variable Function
|
||||||
43(G): 7(ptr) Variable Function
|
42(G): 7(ptr) Variable Function
|
||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 6(int) Load 8(i)
|
14: 6(int) Load 8(i)
|
||||||
16: 15(bool) SLessThan 13 14
|
17: 16(bool) SLessThan 14 15
|
||||||
LoopMerge 11 10 None
|
LoopMerge 12 13 None
|
||||||
BranchConditional 16 12 11
|
BranchConditional 17 11 12
|
||||||
12: Label
|
|
||||||
Store 17(A) 18
|
|
||||||
19: 6(int) Load 8(i)
|
|
||||||
21: 6(int) SMod 19 20
|
|
||||||
22: 15(bool) IEqual 21 9
|
|
||||||
SelectionMerge 24 None
|
|
||||||
BranchConditional 22 23 24
|
|
||||||
23: Label
|
|
||||||
Store 25(B) 18
|
|
||||||
26: 6(int) Load 8(i)
|
|
||||||
27: 6(int) IAdd 26 18
|
|
||||||
Store 8(i) 27
|
|
||||||
Branch 10
|
|
||||||
24: Label
|
|
||||||
30: 6(int) Load 8(i)
|
|
||||||
32: 6(int) SMod 30 31
|
|
||||||
33: 15(bool) IEqual 32 9
|
|
||||||
SelectionMerge 35 None
|
|
||||||
BranchConditional 33 34 35
|
|
||||||
34: Label
|
|
||||||
Store 36(D) 18
|
|
||||||
Branch 11
|
|
||||||
35: Label
|
|
||||||
Store 39(F) 40
|
|
||||||
41: 6(int) Load 8(i)
|
|
||||||
42: 6(int) IAdd 41 18
|
|
||||||
Store 8(i) 42
|
|
||||||
Branch 10
|
|
||||||
11: Label
|
11: Label
|
||||||
Store 43(G) 44
|
Store 18(A) 19
|
||||||
|
20: 6(int) Load 8(i)
|
||||||
|
22: 6(int) SMod 20 21
|
||||||
|
23: 16(bool) IEqual 22 9
|
||||||
|
SelectionMerge 25 None
|
||||||
|
BranchConditional 23 24 25
|
||||||
|
24: Label
|
||||||
|
Store 26(B) 19
|
||||||
|
Branch 13
|
||||||
|
25: Label
|
||||||
|
29: 6(int) Load 8(i)
|
||||||
|
31: 6(int) SMod 29 30
|
||||||
|
32: 16(bool) IEqual 31 9
|
||||||
|
SelectionMerge 34 None
|
||||||
|
BranchConditional 32 33 34
|
||||||
|
33: Label
|
||||||
|
Store 35(D) 19
|
||||||
|
Branch 12
|
||||||
|
34: Label
|
||||||
|
Store 38(F) 39
|
||||||
|
Branch 13
|
||||||
|
13: Label
|
||||||
|
40: 6(int) Load 8(i)
|
||||||
|
41: 6(int) IAdd 40 19
|
||||||
|
Store 8(i) 41
|
||||||
|
Branch 10
|
||||||
|
12: Label
|
||||||
|
Store 42(G) 43
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
59
Test/baseResults/spv.for-nobody.vert.out
Normal file
59
Test/baseResults/spv.for-nobody.vert.out
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
spv.for-nobody.vert
|
||||||
|
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
|
||||||
|
|
||||||
|
|
||||||
|
Linked vertex stage:
|
||||||
|
|
||||||
|
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 80001
|
||||||
|
// Id's are bound by 27
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint Vertex 4 "main" 22 25 26
|
||||||
|
Source GLSL 450
|
||||||
|
Name 4 "main"
|
||||||
|
Name 8 "i"
|
||||||
|
Name 22 "r"
|
||||||
|
Name 25 "gl_VertexID"
|
||||||
|
Name 26 "gl_InstanceID"
|
||||||
|
Decorate 22(r) Location 0
|
||||||
|
Decorate 25(gl_VertexID) BuiltIn VertexId
|
||||||
|
Decorate 26(gl_InstanceID) BuiltIn InstanceId
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeInt 32 1
|
||||||
|
7: TypePointer Function 6(int)
|
||||||
|
9: 6(int) Constant 0
|
||||||
|
15: 6(int) Constant 10
|
||||||
|
16: TypeBool
|
||||||
|
19: 6(int) Constant 1
|
||||||
|
21: TypePointer Output 6(int)
|
||||||
|
22(r): 21(ptr) Variable Output
|
||||||
|
24: TypePointer Input 6(int)
|
||||||
|
25(gl_VertexID): 24(ptr) Variable Input
|
||||||
|
26(gl_InstanceID): 24(ptr) Variable Input
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
8(i): 7(ptr) Variable Function
|
||||||
|
Store 8(i) 9
|
||||||
|
Branch 10
|
||||||
|
10: Label
|
||||||
|
14: 6(int) Load 8(i)
|
||||||
|
17: 16(bool) SLessThan 14 15
|
||||||
|
LoopMerge 12 13 None
|
||||||
|
BranchConditional 17 11 12
|
||||||
|
11: Label
|
||||||
|
Branch 13
|
||||||
|
13: Label
|
||||||
|
18: 6(int) Load 8(i)
|
||||||
|
20: 6(int) IAdd 18 19
|
||||||
|
Store 8(i) 20
|
||||||
|
Branch 10
|
||||||
|
12: Label
|
||||||
|
23: 6(int) Load 8(i)
|
||||||
|
Store 22(r) 23
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
53
Test/baseResults/spv.for-notest.vert.out
Normal file
53
Test/baseResults/spv.for-notest.vert.out
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
spv.for-notest.vert
|
||||||
|
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
|
||||||
|
|
||||||
|
|
||||||
|
Linked vertex stage:
|
||||||
|
|
||||||
|
|
||||||
|
// Module Version 10000
|
||||||
|
// Generated by (magic number): 80001
|
||||||
|
// Id's are bound by 23
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint Vertex 4 "main" 15 21 22
|
||||||
|
Source GLSL 450
|
||||||
|
Name 4 "main"
|
||||||
|
Name 8 "i"
|
||||||
|
Name 15 "r"
|
||||||
|
Name 21 "gl_VertexID"
|
||||||
|
Name 22 "gl_InstanceID"
|
||||||
|
Decorate 15(r) Location 0
|
||||||
|
Decorate 21(gl_VertexID) BuiltIn VertexId
|
||||||
|
Decorate 22(gl_InstanceID) BuiltIn InstanceId
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeInt 32 1
|
||||||
|
7: TypePointer Function 6(int)
|
||||||
|
9: 6(int) Constant 0
|
||||||
|
14: TypePointer Output 6(int)
|
||||||
|
15(r): 14(ptr) Variable Output
|
||||||
|
18: 6(int) Constant 1
|
||||||
|
20: TypePointer Input 6(int)
|
||||||
|
21(gl_VertexID): 20(ptr) Variable Input
|
||||||
|
22(gl_InstanceID): 20(ptr) Variable Input
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
8(i): 7(ptr) Variable Function
|
||||||
|
Store 8(i) 9
|
||||||
|
Branch 10
|
||||||
|
10: Label
|
||||||
|
LoopMerge 12 13 None
|
||||||
|
Branch 11
|
||||||
|
11: Label
|
||||||
|
16: 6(int) Load 8(i)
|
||||||
|
Store 15(r) 16
|
||||||
|
Branch 13
|
||||||
|
13: Label
|
||||||
|
17: 6(int) Load 8(i)
|
||||||
|
19: 6(int) IAdd 17 18
|
||||||
|
Store 8(i) 19
|
||||||
|
Branch 10
|
||||||
|
FunctionEnd
|
@ -5,49 +5,51 @@ Linked vertex stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 25
|
// Id's are bound by 26
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 23 24
|
EntryPoint Vertex 4 "main" 24 25
|
||||||
Source ESSL 300
|
Source ESSL 300
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "i"
|
Name 8 "i"
|
||||||
Name 17 "j"
|
Name 18 "j"
|
||||||
Name 23 "gl_VertexID"
|
Name 24 "gl_VertexID"
|
||||||
Name 24 "gl_InstanceID"
|
Name 25 "gl_InstanceID"
|
||||||
Decorate 23(gl_VertexID) BuiltIn VertexId
|
Decorate 24(gl_VertexID) BuiltIn VertexId
|
||||||
Decorate 24(gl_InstanceID) BuiltIn InstanceId
|
Decorate 25(gl_InstanceID) BuiltIn InstanceId
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
14: 6(int) Constant 10
|
15: 6(int) Constant 10
|
||||||
15: TypeBool
|
16: TypeBool
|
||||||
18: 6(int) Constant 12
|
19: 6(int) Constant 12
|
||||||
20: 6(int) Constant 1
|
21: 6(int) Constant 1
|
||||||
22: TypePointer Input 6(int)
|
23: TypePointer Input 6(int)
|
||||||
23(gl_VertexID): 22(ptr) Variable Input
|
24(gl_VertexID): 23(ptr) Variable Input
|
||||||
24(gl_InstanceID): 22(ptr) Variable Input
|
25(gl_InstanceID): 23(ptr) Variable Input
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(i): 7(ptr) Variable Function
|
8(i): 7(ptr) Variable Function
|
||||||
17(j): 7(ptr) Variable Function
|
18(j): 7(ptr) Variable Function
|
||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 6(int) Load 8(i)
|
14: 6(int) Load 8(i)
|
||||||
16: 15(bool) SLessThan 13 14
|
17: 16(bool) SLessThan 14 15
|
||||||
LoopMerge 11 10 None
|
LoopMerge 12 13 None
|
||||||
BranchConditional 16 12 11
|
BranchConditional 17 11 12
|
||||||
12: Label
|
|
||||||
Store 17(j) 18
|
|
||||||
19: 6(int) Load 8(i)
|
|
||||||
21: 6(int) IAdd 19 20
|
|
||||||
Store 8(i) 21
|
|
||||||
Branch 10
|
|
||||||
11: Label
|
11: Label
|
||||||
|
Store 18(j) 19
|
||||||
|
Branch 13
|
||||||
|
13: Label
|
||||||
|
20: 6(int) Load 8(i)
|
||||||
|
22: 6(int) IAdd 20 21
|
||||||
|
Store 8(i) 22
|
||||||
|
Branch 10
|
||||||
|
12: Label
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -5,30 +5,30 @@ Linked fragment stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 122
|
// Id's are bound by 127
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 11 35 97
|
EntryPoint Fragment 4 "main" 11 36 101
|
||||||
ExecutionMode 4 OriginLowerLeft
|
ExecutionMode 4 OriginLowerLeft
|
||||||
Source GLSL 130
|
Source GLSL 130
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 9 "color"
|
Name 9 "color"
|
||||||
Name 11 "BaseColor"
|
Name 11 "BaseColor"
|
||||||
Name 15 "i"
|
Name 15 "i"
|
||||||
Name 22 "Count"
|
Name 23 "Count"
|
||||||
Name 27 "bigColor"
|
Name 28 "bigColor"
|
||||||
Name 35 "gl_FragColor"
|
Name 36 "gl_FragColor"
|
||||||
Name 38 "sum"
|
Name 39 "sum"
|
||||||
Name 40 "i"
|
Name 41 "i"
|
||||||
Name 50 "v4"
|
Name 52 "v4"
|
||||||
Name 60 "i"
|
Name 62 "i"
|
||||||
Name 66 "tv4"
|
Name 69 "tv4"
|
||||||
Name 83 "r"
|
Name 86 "r"
|
||||||
Name 89 "i"
|
Name 92 "i"
|
||||||
Name 97 "f"
|
Name 101 "f"
|
||||||
Name 110 "i"
|
Name 114 "i"
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeFloat 32
|
6: TypeFloat 32
|
||||||
@ -39,156 +39,166 @@ Linked fragment stage:
|
|||||||
13: TypeInt 32 1
|
13: TypeInt 32 1
|
||||||
14: TypePointer Function 13(int)
|
14: TypePointer Function 13(int)
|
||||||
16: 13(int) Constant 0
|
16: 13(int) Constant 0
|
||||||
21: TypePointer UniformConstant 13(int)
|
22: TypePointer UniformConstant 13(int)
|
||||||
22(Count): 21(ptr) Variable UniformConstant
|
23(Count): 22(ptr) Variable UniformConstant
|
||||||
24: TypeBool
|
25: TypeBool
|
||||||
26: TypePointer UniformConstant 7(fvec4)
|
27: TypePointer UniformConstant 7(fvec4)
|
||||||
27(bigColor): 26(ptr) Variable UniformConstant
|
28(bigColor): 27(ptr) Variable UniformConstant
|
||||||
32: 13(int) Constant 1
|
33: 13(int) Constant 1
|
||||||
34: TypePointer Output 7(fvec4)
|
35: TypePointer Output 7(fvec4)
|
||||||
35(gl_FragColor): 34(ptr) Variable Output
|
36(gl_FragColor): 35(ptr) Variable Output
|
||||||
37: TypePointer Function 6(float)
|
38: TypePointer Function 6(float)
|
||||||
39: 6(float) Constant 0
|
40: 6(float) Constant 0
|
||||||
45: 13(int) Constant 4
|
47: 13(int) Constant 4
|
||||||
47: TypeInt 32 0
|
49: TypeInt 32 0
|
||||||
48: TypeVector 47(int) 4
|
50: TypeVector 49(int) 4
|
||||||
49: TypePointer UniformConstant 48(ivec4)
|
51: TypePointer UniformConstant 50(ivec4)
|
||||||
50(v4): 49(ptr) Variable UniformConstant
|
52(v4): 51(ptr) Variable UniformConstant
|
||||||
52: TypePointer UniformConstant 47(int)
|
54: TypePointer UniformConstant 49(int)
|
||||||
71: 47(int) Constant 4
|
74: 49(int) Constant 4
|
||||||
84: TypeVector 6(float) 3
|
87: TypeVector 6(float) 3
|
||||||
96: TypePointer Input 6(float)
|
100: TypePointer Input 6(float)
|
||||||
97(f): 96(ptr) Variable Input
|
101(f): 100(ptr) Variable Input
|
||||||
99: 47(int) Constant 3
|
103: 49(int) Constant 3
|
||||||
115: 13(int) Constant 16
|
120: 13(int) Constant 16
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
9(color): 8(ptr) Variable Function
|
9(color): 8(ptr) Variable Function
|
||||||
15(i): 14(ptr) Variable Function
|
15(i): 14(ptr) Variable Function
|
||||||
38(sum): 37(ptr) Variable Function
|
39(sum): 38(ptr) Variable Function
|
||||||
40(i): 14(ptr) Variable Function
|
41(i): 14(ptr) Variable Function
|
||||||
60(i): 14(ptr) Variable Function
|
62(i): 14(ptr) Variable Function
|
||||||
66(tv4): 8(ptr) Variable Function
|
69(tv4): 8(ptr) Variable Function
|
||||||
83(r): 8(ptr) Variable Function
|
86(r): 8(ptr) Variable Function
|
||||||
89(i): 14(ptr) Variable Function
|
92(i): 14(ptr) Variable Function
|
||||||
110(i): 14(ptr) Variable Function
|
114(i): 14(ptr) Variable Function
|
||||||
12: 7(fvec4) Load 11(BaseColor)
|
12: 7(fvec4) Load 11(BaseColor)
|
||||||
Store 9(color) 12
|
Store 9(color) 12
|
||||||
Store 15(i) 16
|
Store 15(i) 16
|
||||||
Branch 17
|
Branch 17
|
||||||
17: Label
|
17: Label
|
||||||
20: 13(int) Load 15(i)
|
21: 13(int) Load 15(i)
|
||||||
23: 13(int) Load 22(Count)
|
24: 13(int) Load 23(Count)
|
||||||
25: 24(bool) SLessThan 20 23
|
26: 25(bool) SLessThan 21 24
|
||||||
LoopMerge 18 17 None
|
LoopMerge 19 20 None
|
||||||
BranchConditional 25 19 18
|
BranchConditional 26 18 19
|
||||||
19: Label
|
|
||||||
28: 7(fvec4) Load 27(bigColor)
|
|
||||||
29: 7(fvec4) Load 9(color)
|
|
||||||
30: 7(fvec4) FAdd 29 28
|
|
||||||
Store 9(color) 30
|
|
||||||
31: 13(int) Load 15(i)
|
|
||||||
33: 13(int) IAdd 31 32
|
|
||||||
Store 15(i) 33
|
|
||||||
Branch 17
|
|
||||||
18: Label
|
18: Label
|
||||||
36: 7(fvec4) Load 9(color)
|
29: 7(fvec4) Load 28(bigColor)
|
||||||
Store 35(gl_FragColor) 36
|
30: 7(fvec4) Load 9(color)
|
||||||
Store 38(sum) 39
|
31: 7(fvec4) FAdd 30 29
|
||||||
Store 40(i) 16
|
Store 9(color) 31
|
||||||
Branch 41
|
Branch 20
|
||||||
41: Label
|
20: Label
|
||||||
44: 13(int) Load 40(i)
|
32: 13(int) Load 15(i)
|
||||||
46: 24(bool) SLessThan 44 45
|
34: 13(int) IAdd 32 33
|
||||||
LoopMerge 42 41 None
|
Store 15(i) 34
|
||||||
BranchConditional 46 43 42
|
Branch 17
|
||||||
43: Label
|
19: Label
|
||||||
51: 13(int) Load 40(i)
|
37: 7(fvec4) Load 9(color)
|
||||||
53: 52(ptr) AccessChain 50(v4) 51
|
Store 36(gl_FragColor) 37
|
||||||
54: 47(int) Load 53
|
Store 39(sum) 40
|
||||||
55: 6(float) ConvertUToF 54
|
Store 41(i) 16
|
||||||
56: 6(float) Load 38(sum)
|
Branch 42
|
||||||
57: 6(float) FAdd 56 55
|
|
||||||
Store 38(sum) 57
|
|
||||||
58: 13(int) Load 40(i)
|
|
||||||
59: 13(int) IAdd 58 32
|
|
||||||
Store 40(i) 59
|
|
||||||
Branch 41
|
|
||||||
42: Label
|
42: Label
|
||||||
Store 60(i) 16
|
46: 13(int) Load 41(i)
|
||||||
Branch 61
|
48: 25(bool) SLessThan 46 47
|
||||||
61: Label
|
LoopMerge 44 45 None
|
||||||
64: 13(int) Load 60(i)
|
BranchConditional 48 43 44
|
||||||
65: 24(bool) SLessThan 64 45
|
43: Label
|
||||||
LoopMerge 62 61 None
|
53: 13(int) Load 41(i)
|
||||||
BranchConditional 65 63 62
|
55: 54(ptr) AccessChain 52(v4) 53
|
||||||
|
56: 49(int) Load 55
|
||||||
|
57: 6(float) ConvertUToF 56
|
||||||
|
58: 6(float) Load 39(sum)
|
||||||
|
59: 6(float) FAdd 58 57
|
||||||
|
Store 39(sum) 59
|
||||||
|
Branch 45
|
||||||
|
45: Label
|
||||||
|
60: 13(int) Load 41(i)
|
||||||
|
61: 13(int) IAdd 60 33
|
||||||
|
Store 41(i) 61
|
||||||
|
Branch 42
|
||||||
|
44: Label
|
||||||
|
Store 62(i) 16
|
||||||
|
Branch 63
|
||||||
63: Label
|
63: Label
|
||||||
67: 13(int) Load 60(i)
|
67: 13(int) Load 62(i)
|
||||||
68: 13(int) Load 60(i)
|
68: 25(bool) SLessThan 67 47
|
||||||
69: 52(ptr) AccessChain 50(v4) 68
|
LoopMerge 65 66 None
|
||||||
70: 47(int) Load 69
|
BranchConditional 68 64 65
|
||||||
72: 47(int) IMul 70 71
|
64: Label
|
||||||
73: 6(float) ConvertUToF 72
|
70: 13(int) Load 62(i)
|
||||||
74: 37(ptr) AccessChain 66(tv4) 67
|
71: 13(int) Load 62(i)
|
||||||
Store 74 73
|
72: 54(ptr) AccessChain 52(v4) 71
|
||||||
75: 13(int) Load 60(i)
|
73: 49(int) Load 72
|
||||||
76: 13(int) IAdd 75 32
|
75: 49(int) IMul 73 74
|
||||||
Store 60(i) 76
|
76: 6(float) ConvertUToF 75
|
||||||
Branch 61
|
77: 38(ptr) AccessChain 69(tv4) 70
|
||||||
62: Label
|
Store 77 76
|
||||||
77: 6(float) Load 38(sum)
|
Branch 66
|
||||||
78: 7(fvec4) CompositeConstruct 77 77 77 77
|
66: Label
|
||||||
79: 7(fvec4) Load 66(tv4)
|
78: 13(int) Load 62(i)
|
||||||
80: 7(fvec4) FAdd 78 79
|
79: 13(int) IAdd 78 33
|
||||||
81: 7(fvec4) Load 35(gl_FragColor)
|
Store 62(i) 79
|
||||||
82: 7(fvec4) FAdd 81 80
|
Branch 63
|
||||||
Store 35(gl_FragColor) 82
|
65: Label
|
||||||
85: 7(fvec4) Load 11(BaseColor)
|
80: 6(float) Load 39(sum)
|
||||||
86: 84(fvec3) VectorShuffle 85 85 0 1 2
|
81: 7(fvec4) CompositeConstruct 80 80 80 80
|
||||||
87: 7(fvec4) Load 83(r)
|
82: 7(fvec4) Load 69(tv4)
|
||||||
88: 7(fvec4) VectorShuffle 87 86 4 5 6 3
|
83: 7(fvec4) FAdd 81 82
|
||||||
Store 83(r) 88
|
84: 7(fvec4) Load 36(gl_FragColor)
|
||||||
Store 89(i) 16
|
85: 7(fvec4) FAdd 84 83
|
||||||
Branch 90
|
Store 36(gl_FragColor) 85
|
||||||
90: Label
|
88: 7(fvec4) Load 11(BaseColor)
|
||||||
93: 13(int) Load 89(i)
|
89: 87(fvec3) VectorShuffle 88 88 0 1 2
|
||||||
94: 13(int) Load 22(Count)
|
90: 7(fvec4) Load 86(r)
|
||||||
95: 24(bool) SLessThan 93 94
|
91: 7(fvec4) VectorShuffle 90 89 4 5 6 3
|
||||||
LoopMerge 91 90 None
|
Store 86(r) 91
|
||||||
BranchConditional 95 92 91
|
Store 92(i) 16
|
||||||
92: Label
|
Branch 93
|
||||||
98: 6(float) Load 97(f)
|
93: Label
|
||||||
100: 37(ptr) AccessChain 83(r) 99
|
97: 13(int) Load 92(i)
|
||||||
Store 100 98
|
98: 13(int) Load 23(Count)
|
||||||
101: 13(int) Load 89(i)
|
99: 25(bool) SLessThan 97 98
|
||||||
102: 13(int) IAdd 101 32
|
LoopMerge 95 96 None
|
||||||
Store 89(i) 102
|
BranchConditional 99 94 95
|
||||||
Branch 90
|
94: Label
|
||||||
91: Label
|
102: 6(float) Load 101(f)
|
||||||
103: 7(fvec4) Load 83(r)
|
104: 38(ptr) AccessChain 86(r) 103
|
||||||
104: 84(fvec3) VectorShuffle 103 103 0 1 2
|
Store 104 102
|
||||||
105: 7(fvec4) Load 35(gl_FragColor)
|
Branch 96
|
||||||
106: 84(fvec3) VectorShuffle 105 105 0 1 2
|
96: Label
|
||||||
107: 84(fvec3) FAdd 106 104
|
105: 13(int) Load 92(i)
|
||||||
108: 7(fvec4) Load 35(gl_FragColor)
|
106: 13(int) IAdd 105 33
|
||||||
109: 7(fvec4) VectorShuffle 108 107 4 5 6 3
|
Store 92(i) 106
|
||||||
Store 35(gl_FragColor) 109
|
Branch 93
|
||||||
Store 110(i) 16
|
95: Label
|
||||||
Branch 111
|
107: 7(fvec4) Load 86(r)
|
||||||
111: Label
|
108: 87(fvec3) VectorShuffle 107 107 0 1 2
|
||||||
114: 13(int) Load 110(i)
|
109: 7(fvec4) Load 36(gl_FragColor)
|
||||||
116: 24(bool) SLessThan 114 115
|
110: 87(fvec3) VectorShuffle 109 109 0 1 2
|
||||||
LoopMerge 112 111 None
|
111: 87(fvec3) FAdd 110 108
|
||||||
BranchConditional 116 113 112
|
112: 7(fvec4) Load 36(gl_FragColor)
|
||||||
113: Label
|
113: 7(fvec4) VectorShuffle 112 111 4 5 6 3
|
||||||
117: 6(float) Load 97(f)
|
Store 36(gl_FragColor) 113
|
||||||
118: 7(fvec4) Load 35(gl_FragColor)
|
Store 114(i) 16
|
||||||
119: 7(fvec4) VectorTimesScalar 118 117
|
Branch 115
|
||||||
Store 35(gl_FragColor) 119
|
115: Label
|
||||||
120: 13(int) Load 110(i)
|
119: 13(int) Load 114(i)
|
||||||
121: 13(int) IAdd 120 45
|
121: 25(bool) SLessThan 119 120
|
||||||
Store 110(i) 121
|
LoopMerge 117 118 None
|
||||||
Branch 111
|
BranchConditional 121 116 117
|
||||||
112: Label
|
116: Label
|
||||||
|
122: 6(float) Load 101(f)
|
||||||
|
123: 7(fvec4) Load 36(gl_FragColor)
|
||||||
|
124: 7(fvec4) VectorTimesScalar 123 122
|
||||||
|
Store 36(gl_FragColor) 124
|
||||||
|
Branch 118
|
||||||
|
118: Label
|
||||||
|
125: 13(int) Load 114(i)
|
||||||
|
126: 13(int) IAdd 125 47
|
||||||
|
Store 114(i) 126
|
||||||
|
Branch 115
|
||||||
|
117: Label
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -8,12 +8,12 @@ Linked fragment stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 136
|
// Id's are bound by 137
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 40 96 106
|
EntryPoint Fragment 4 "main" 40 97 107
|
||||||
ExecutionMode 4 OriginLowerLeft
|
ExecutionMode 4 OriginLowerLeft
|
||||||
Source GLSL 130
|
Source GLSL 130
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
@ -38,14 +38,14 @@ Linked fragment stage:
|
|||||||
Name 68 "x"
|
Name 68 "x"
|
||||||
Name 70 "localArray"
|
Name 70 "localArray"
|
||||||
Name 75 "i"
|
Name 75 "i"
|
||||||
Name 82 "a"
|
Name 83 "a"
|
||||||
Name 88 "condition"
|
Name 89 "condition"
|
||||||
Name 96 "color"
|
Name 97 "color"
|
||||||
Name 106 "gl_FragColor"
|
Name 107 "gl_FragColor"
|
||||||
Name 126 "samp2D"
|
Name 127 "samp2D"
|
||||||
Name 132 "foo"
|
Name 133 "foo"
|
||||||
Name 133 "foo2"
|
Name 134 "foo2"
|
||||||
Name 135 "uFloatArray"
|
Name 136 "uFloatArray"
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
@ -80,26 +80,26 @@ Linked fragment stage:
|
|||||||
48: TypePointer Function 47
|
48: TypePointer Function 47
|
||||||
52: TypePointer Function 6(int)
|
52: TypePointer Function 6(int)
|
||||||
69: 6(int) Constant 5
|
69: 6(int) Constant 5
|
||||||
80: 6(int) Constant 16
|
81: 6(int) Constant 16
|
||||||
84: 7(float) Constant 0
|
85: 7(float) Constant 0
|
||||||
88(condition): 20(ptr) Variable UniformConstant
|
89(condition): 20(ptr) Variable UniformConstant
|
||||||
94: 6(int) Constant 3
|
95: 6(int) Constant 3
|
||||||
95: TypePointer Input 9(fvec4)
|
96: TypePointer Input 9(fvec4)
|
||||||
96(color): 95(ptr) Variable Input
|
97(color): 96(ptr) Variable Input
|
||||||
98: TypePointer Function 9(fvec4)
|
99: TypePointer Function 9(fvec4)
|
||||||
100: 32(int) Constant 1
|
101: 32(int) Constant 1
|
||||||
103: 32(int) Constant 2
|
104: 32(int) Constant 2
|
||||||
105: TypePointer Output 9(fvec4)
|
106: TypePointer Output 9(fvec4)
|
||||||
106(gl_FragColor): 105(ptr) Variable Output
|
107(gl_FragColor): 106(ptr) Variable Output
|
||||||
123: TypeImage 7(float) 2D sampled format:Unknown
|
124: TypeImage 7(float) 2D sampled format:Unknown
|
||||||
124: TypeSampledImage 123
|
125: TypeSampledImage 124
|
||||||
125: TypePointer UniformConstant 124
|
126: TypePointer UniformConstant 125
|
||||||
126(samp2D): 125(ptr) Variable UniformConstant
|
127(samp2D): 126(ptr) Variable UniformConstant
|
||||||
131: TypePointer UniformConstant 8(s1)
|
132: TypePointer UniformConstant 8(s1)
|
||||||
132(foo): 131(ptr) Variable UniformConstant
|
133(foo): 132(ptr) Variable UniformConstant
|
||||||
133(foo2): 17(ptr) Variable UniformConstant
|
134(foo2): 17(ptr) Variable UniformConstant
|
||||||
134: TypePointer UniformConstant 34
|
135: TypePointer UniformConstant 34
|
||||||
135(uFloatArray): 134(ptr) Variable UniformConstant
|
136(uFloatArray): 135(ptr) Variable UniformConstant
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
12(locals2): 11(ptr) Variable Function
|
12(locals2): 11(ptr) Variable Function
|
||||||
@ -108,7 +108,7 @@ Linked fragment stage:
|
|||||||
68(x): 52(ptr) Variable Function
|
68(x): 52(ptr) Variable Function
|
||||||
70(localArray): 35(ptr) Variable Function
|
70(localArray): 35(ptr) Variable Function
|
||||||
75(i): 52(ptr) Variable Function
|
75(i): 52(ptr) Variable Function
|
||||||
82(a): 35(ptr) Variable Function
|
83(a): 35(ptr) Variable Function
|
||||||
18: 17(ptr) AccessChain 15(foo3) 16
|
18: 17(ptr) AccessChain 15(foo3) 16
|
||||||
19: 10(s2) Load 18
|
19: 10(s2) Load 18
|
||||||
Store 12(locals2) 19
|
Store 12(locals2) 19
|
||||||
@ -161,55 +161,57 @@ Linked fragment stage:
|
|||||||
Store 75(i) 16
|
Store 75(i) 16
|
||||||
Branch 76
|
Branch 76
|
||||||
76: Label
|
76: Label
|
||||||
79: 6(int) Load 75(i)
|
80: 6(int) Load 75(i)
|
||||||
81: 23(bool) SLessThan 79 80
|
82: 23(bool) SLessThan 80 81
|
||||||
LoopMerge 77 76 None
|
LoopMerge 78 79 None
|
||||||
BranchConditional 81 78 77
|
BranchConditional 82 77 78
|
||||||
78: Label
|
|
||||||
83: 6(int) Load 75(i)
|
|
||||||
85: 30(ptr) AccessChain 82(a) 83
|
|
||||||
Store 85 84
|
|
||||||
86: 6(int) Load 75(i)
|
|
||||||
87: 6(int) IAdd 86 28
|
|
||||||
Store 75(i) 87
|
|
||||||
Branch 76
|
|
||||||
77: Label
|
77: Label
|
||||||
89: 6(int) Load 88(condition)
|
84: 6(int) Load 75(i)
|
||||||
90: 23(bool) IEqual 89 28
|
86: 30(ptr) AccessChain 83(a) 84
|
||||||
SelectionMerge 92 None
|
Store 86 85
|
||||||
BranchConditional 90 91 92
|
Branch 79
|
||||||
91: Label
|
79: Label
|
||||||
93: 34 Load 70(localArray)
|
87: 6(int) Load 75(i)
|
||||||
Store 82(a) 93
|
88: 6(int) IAdd 87 28
|
||||||
Branch 92
|
Store 75(i) 88
|
||||||
|
Branch 76
|
||||||
|
78: Label
|
||||||
|
90: 6(int) Load 89(condition)
|
||||||
|
91: 23(bool) IEqual 90 28
|
||||||
|
SelectionMerge 93 None
|
||||||
|
BranchConditional 91 92 93
|
||||||
92: Label
|
92: Label
|
||||||
97: 9(fvec4) Load 96(color)
|
94: 34 Load 70(localArray)
|
||||||
99: 98(ptr) AccessChain 12(locals2) 94
|
Store 83(a) 94
|
||||||
Store 99 97
|
Branch 93
|
||||||
101: 42(ptr) AccessChain 40(coord) 100
|
93: Label
|
||||||
102: 7(float) Load 101
|
98: 9(fvec4) Load 97(color)
|
||||||
104: 30(ptr) AccessChain 12(locals2) 94 103
|
100: 99(ptr) AccessChain 12(locals2) 95
|
||||||
Store 104 102
|
Store 100 98
|
||||||
107: 98(ptr) AccessChain 12(locals2) 94
|
102: 42(ptr) AccessChain 40(coord) 101
|
||||||
108: 9(fvec4) Load 107
|
103: 7(float) Load 102
|
||||||
109: 30(ptr) AccessChain 36(localFArray) 37
|
105: 30(ptr) AccessChain 12(locals2) 95 104
|
||||||
110: 7(float) Load 109
|
Store 105 103
|
||||||
111: 30(ptr) AccessChain 12(locals2) 27 28
|
108: 99(ptr) AccessChain 12(locals2) 95
|
||||||
112: 7(float) Load 111
|
109: 9(fvec4) Load 108
|
||||||
113: 7(float) FAdd 110 112
|
110: 30(ptr) AccessChain 36(localFArray) 37
|
||||||
114: 6(int) Load 68(x)
|
111: 7(float) Load 110
|
||||||
115: 30(ptr) AccessChain 70(localArray) 114
|
112: 30(ptr) AccessChain 12(locals2) 27 28
|
||||||
116: 7(float) Load 115
|
113: 7(float) Load 112
|
||||||
117: 7(float) FAdd 113 116
|
114: 7(float) FAdd 111 113
|
||||||
118: 6(int) Load 68(x)
|
115: 6(int) Load 68(x)
|
||||||
119: 30(ptr) AccessChain 82(a) 118
|
116: 30(ptr) AccessChain 70(localArray) 115
|
||||||
120: 7(float) Load 119
|
117: 7(float) Load 116
|
||||||
121: 7(float) FAdd 117 120
|
118: 7(float) FAdd 114 117
|
||||||
122: 9(fvec4) VectorTimesScalar 108 121
|
119: 6(int) Load 68(x)
|
||||||
127: 124 Load 126(samp2D)
|
120: 30(ptr) AccessChain 83(a) 119
|
||||||
128: 38(fvec2) Load 40(coord)
|
121: 7(float) Load 120
|
||||||
129: 9(fvec4) ImageSampleImplicitLod 127 128
|
122: 7(float) FAdd 118 121
|
||||||
130: 9(fvec4) FMul 122 129
|
123: 9(fvec4) VectorTimesScalar 109 122
|
||||||
Store 106(gl_FragColor) 130
|
128: 125 Load 127(samp2D)
|
||||||
|
129: 38(fvec2) Load 40(coord)
|
||||||
|
130: 9(fvec4) ImageSampleImplicitLod 128 129
|
||||||
|
131: 9(fvec4) FMul 123 130
|
||||||
|
Store 107(gl_FragColor) 131
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -7,64 +7,64 @@ Linked fragment stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 191
|
// Id's are bound by 187
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 11 144
|
EntryPoint Fragment 4 "main" 11 140
|
||||||
ExecutionMode 4 OriginLowerLeft
|
ExecutionMode 4 OriginLowerLeft
|
||||||
Source GLSL 130
|
Source GLSL 130
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 9 "color"
|
Name 9 "color"
|
||||||
Name 11 "BaseColor"
|
Name 11 "BaseColor"
|
||||||
Name 27 "d4"
|
Name 18 "bigColor4"
|
||||||
Name 32 "bigColor4"
|
Name 28 "d4"
|
||||||
Name 84 "d13"
|
Name 80 "d13"
|
||||||
Name 144 "gl_FragColor"
|
Name 140 "gl_FragColor"
|
||||||
Name 146 "bigColor"
|
Name 142 "bigColor"
|
||||||
Name 147 "bigColor1_1"
|
Name 143 "bigColor1_1"
|
||||||
Name 148 "bigColor1_2"
|
Name 144 "bigColor1_2"
|
||||||
Name 149 "bigColor1_3"
|
Name 145 "bigColor1_3"
|
||||||
Name 150 "bigColor2"
|
Name 146 "bigColor2"
|
||||||
Name 151 "bigColor3"
|
Name 147 "bigColor3"
|
||||||
Name 152 "bigColor5"
|
Name 148 "bigColor5"
|
||||||
Name 153 "bigColor6"
|
Name 149 "bigColor6"
|
||||||
Name 154 "bigColor7"
|
Name 150 "bigColor7"
|
||||||
Name 155 "bigColor8"
|
Name 151 "bigColor8"
|
||||||
Name 156 "d"
|
Name 152 "d"
|
||||||
Name 157 "d2"
|
Name 153 "d2"
|
||||||
Name 158 "d3"
|
Name 154 "d3"
|
||||||
Name 159 "d5"
|
Name 155 "d5"
|
||||||
Name 160 "d6"
|
Name 156 "d6"
|
||||||
Name 161 "d7"
|
Name 157 "d7"
|
||||||
Name 162 "d8"
|
Name 158 "d8"
|
||||||
Name 163 "d9"
|
Name 159 "d9"
|
||||||
Name 164 "d10"
|
Name 160 "d10"
|
||||||
Name 165 "d11"
|
Name 161 "d11"
|
||||||
Name 166 "d12"
|
Name 162 "d12"
|
||||||
Name 167 "d14"
|
Name 163 "d14"
|
||||||
Name 168 "d15"
|
Name 164 "d15"
|
||||||
Name 169 "d16"
|
Name 165 "d16"
|
||||||
Name 170 "d17"
|
Name 166 "d17"
|
||||||
Name 171 "d18"
|
Name 167 "d18"
|
||||||
Name 172 "d19"
|
Name 168 "d19"
|
||||||
Name 173 "d20"
|
Name 169 "d20"
|
||||||
Name 174 "d21"
|
Name 170 "d21"
|
||||||
Name 175 "d22"
|
Name 171 "d22"
|
||||||
Name 176 "d23"
|
Name 172 "d23"
|
||||||
Name 177 "d24"
|
Name 173 "d24"
|
||||||
Name 178 "d25"
|
Name 174 "d25"
|
||||||
Name 179 "d26"
|
Name 175 "d26"
|
||||||
Name 180 "d27"
|
Name 176 "d27"
|
||||||
Name 181 "d28"
|
Name 177 "d28"
|
||||||
Name 182 "d29"
|
Name 178 "d29"
|
||||||
Name 183 "d30"
|
Name 179 "d30"
|
||||||
Name 184 "d31"
|
Name 180 "d31"
|
||||||
Name 185 "d32"
|
Name 181 "d32"
|
||||||
Name 186 "d33"
|
Name 182 "d33"
|
||||||
Name 187 "d34"
|
Name 183 "d34"
|
||||||
Name 190 "Count"
|
Name 186 "Count"
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeFloat 32
|
6: TypeFloat 32
|
||||||
@ -72,69 +72,67 @@ Linked fragment stage:
|
|||||||
8: TypePointer Function 7(fvec4)
|
8: TypePointer Function 7(fvec4)
|
||||||
10: TypePointer Input 7(fvec4)
|
10: TypePointer Input 7(fvec4)
|
||||||
11(BaseColor): 10(ptr) Variable Input
|
11(BaseColor): 10(ptr) Variable Input
|
||||||
17: TypeBool
|
17: TypePointer UniformConstant 7(fvec4)
|
||||||
18: 17(bool) ConstantTrue
|
18(bigColor4): 17(ptr) Variable UniformConstant
|
||||||
21: TypeInt 32 0
|
22: TypeInt 32 0
|
||||||
22: 21(int) Constant 2
|
23: 22(int) Constant 0
|
||||||
23: TypePointer Function 6(float)
|
24: TypePointer Function 6(float)
|
||||||
26: TypePointer UniformConstant 6(float)
|
27: TypePointer UniformConstant 6(float)
|
||||||
27(d4): 26(ptr) Variable UniformConstant
|
28(d4): 27(ptr) Variable UniformConstant
|
||||||
31: TypePointer UniformConstant 7(fvec4)
|
30: TypeBool
|
||||||
32(bigColor4): 31(ptr) Variable UniformConstant
|
34: 6(float) Constant 1073741824
|
||||||
36: 21(int) Constant 0
|
35: 22(int) Constant 2
|
||||||
43: 6(float) Constant 1073741824
|
48: 6(float) Constant 1065353216
|
||||||
56: 6(float) Constant 1065353216
|
51: 22(int) Constant 1
|
||||||
58: 17(bool) ConstantFalse
|
77: 22(int) Constant 3
|
||||||
60: 21(int) Constant 1
|
80(d13): 27(ptr) Variable UniformConstant
|
||||||
81: 21(int) Constant 3
|
139: TypePointer Output 7(fvec4)
|
||||||
84(d13): 26(ptr) Variable UniformConstant
|
140(gl_FragColor): 139(ptr) Variable Output
|
||||||
143: TypePointer Output 7(fvec4)
|
142(bigColor): 17(ptr) Variable UniformConstant
|
||||||
144(gl_FragColor): 143(ptr) Variable Output
|
143(bigColor1_1): 17(ptr) Variable UniformConstant
|
||||||
146(bigColor): 31(ptr) Variable UniformConstant
|
144(bigColor1_2): 17(ptr) Variable UniformConstant
|
||||||
147(bigColor1_1): 31(ptr) Variable UniformConstant
|
145(bigColor1_3): 17(ptr) Variable UniformConstant
|
||||||
148(bigColor1_2): 31(ptr) Variable UniformConstant
|
146(bigColor2): 17(ptr) Variable UniformConstant
|
||||||
149(bigColor1_3): 31(ptr) Variable UniformConstant
|
147(bigColor3): 17(ptr) Variable UniformConstant
|
||||||
150(bigColor2): 31(ptr) Variable UniformConstant
|
148(bigColor5): 17(ptr) Variable UniformConstant
|
||||||
151(bigColor3): 31(ptr) Variable UniformConstant
|
149(bigColor6): 17(ptr) Variable UniformConstant
|
||||||
152(bigColor5): 31(ptr) Variable UniformConstant
|
150(bigColor7): 17(ptr) Variable UniformConstant
|
||||||
153(bigColor6): 31(ptr) Variable UniformConstant
|
151(bigColor8): 17(ptr) Variable UniformConstant
|
||||||
154(bigColor7): 31(ptr) Variable UniformConstant
|
152(d): 27(ptr) Variable UniformConstant
|
||||||
155(bigColor8): 31(ptr) Variable UniformConstant
|
153(d2): 27(ptr) Variable UniformConstant
|
||||||
156(d): 26(ptr) Variable UniformConstant
|
154(d3): 27(ptr) Variable UniformConstant
|
||||||
157(d2): 26(ptr) Variable UniformConstant
|
155(d5): 27(ptr) Variable UniformConstant
|
||||||
158(d3): 26(ptr) Variable UniformConstant
|
156(d6): 27(ptr) Variable UniformConstant
|
||||||
159(d5): 26(ptr) Variable UniformConstant
|
157(d7): 27(ptr) Variable UniformConstant
|
||||||
160(d6): 26(ptr) Variable UniformConstant
|
158(d8): 27(ptr) Variable UniformConstant
|
||||||
161(d7): 26(ptr) Variable UniformConstant
|
159(d9): 27(ptr) Variable UniformConstant
|
||||||
162(d8): 26(ptr) Variable UniformConstant
|
160(d10): 27(ptr) Variable UniformConstant
|
||||||
163(d9): 26(ptr) Variable UniformConstant
|
161(d11): 27(ptr) Variable UniformConstant
|
||||||
164(d10): 26(ptr) Variable UniformConstant
|
162(d12): 27(ptr) Variable UniformConstant
|
||||||
165(d11): 26(ptr) Variable UniformConstant
|
163(d14): 27(ptr) Variable UniformConstant
|
||||||
166(d12): 26(ptr) Variable UniformConstant
|
164(d15): 27(ptr) Variable UniformConstant
|
||||||
167(d14): 26(ptr) Variable UniformConstant
|
165(d16): 27(ptr) Variable UniformConstant
|
||||||
168(d15): 26(ptr) Variable UniformConstant
|
166(d17): 27(ptr) Variable UniformConstant
|
||||||
169(d16): 26(ptr) Variable UniformConstant
|
167(d18): 27(ptr) Variable UniformConstant
|
||||||
170(d17): 26(ptr) Variable UniformConstant
|
168(d19): 27(ptr) Variable UniformConstant
|
||||||
171(d18): 26(ptr) Variable UniformConstant
|
169(d20): 27(ptr) Variable UniformConstant
|
||||||
172(d19): 26(ptr) Variable UniformConstant
|
170(d21): 27(ptr) Variable UniformConstant
|
||||||
173(d20): 26(ptr) Variable UniformConstant
|
171(d22): 27(ptr) Variable UniformConstant
|
||||||
174(d21): 26(ptr) Variable UniformConstant
|
172(d23): 27(ptr) Variable UniformConstant
|
||||||
175(d22): 26(ptr) Variable UniformConstant
|
173(d24): 27(ptr) Variable UniformConstant
|
||||||
176(d23): 26(ptr) Variable UniformConstant
|
174(d25): 27(ptr) Variable UniformConstant
|
||||||
177(d24): 26(ptr) Variable UniformConstant
|
175(d26): 27(ptr) Variable UniformConstant
|
||||||
178(d25): 26(ptr) Variable UniformConstant
|
176(d27): 27(ptr) Variable UniformConstant
|
||||||
179(d26): 26(ptr) Variable UniformConstant
|
177(d28): 27(ptr) Variable UniformConstant
|
||||||
180(d27): 26(ptr) Variable UniformConstant
|
178(d29): 27(ptr) Variable UniformConstant
|
||||||
181(d28): 26(ptr) Variable UniformConstant
|
179(d30): 27(ptr) Variable UniformConstant
|
||||||
182(d29): 26(ptr) Variable UniformConstant
|
180(d31): 27(ptr) Variable UniformConstant
|
||||||
183(d30): 26(ptr) Variable UniformConstant
|
181(d32): 27(ptr) Variable UniformConstant
|
||||||
184(d31): 26(ptr) Variable UniformConstant
|
182(d33): 27(ptr) Variable UniformConstant
|
||||||
185(d32): 26(ptr) Variable UniformConstant
|
183(d34): 27(ptr) Variable UniformConstant
|
||||||
186(d33): 26(ptr) Variable UniformConstant
|
184: TypeInt 32 1
|
||||||
187(d34): 26(ptr) Variable UniformConstant
|
185: TypePointer UniformConstant 184(int)
|
||||||
188: TypeInt 32 1
|
186(Count): 185(ptr) Variable UniformConstant
|
||||||
189: TypePointer UniformConstant 188(int)
|
|
||||||
190(Count): 189(ptr) Variable UniformConstant
|
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
9(color): 8(ptr) Variable Function
|
9(color): 8(ptr) Variable Function
|
||||||
@ -142,167 +140,162 @@ Linked fragment stage:
|
|||||||
Store 9(color) 12
|
Store 9(color) 12
|
||||||
Branch 13
|
Branch 13
|
||||||
13: Label
|
13: Label
|
||||||
16: 17(bool) Phi 18 5 58 52 58 66
|
LoopMerge 15 16 None
|
||||||
LoopMerge 14 13 None
|
Branch 14
|
||||||
Branch 19
|
|
||||||
19: Label
|
|
||||||
SelectionMerge 15 None
|
|
||||||
BranchConditional 16 15 20
|
|
||||||
20: Label
|
|
||||||
24: 23(ptr) AccessChain 9(color) 22
|
|
||||||
25: 6(float) Load 24
|
|
||||||
28: 6(float) Load 27(d4)
|
|
||||||
29: 17(bool) FOrdLessThan 25 28
|
|
||||||
SelectionMerge 30 None
|
|
||||||
BranchConditional 29 30 14
|
|
||||||
30: Label
|
|
||||||
Branch 15
|
|
||||||
15: Label
|
|
||||||
33: 7(fvec4) Load 32(bigColor4)
|
|
||||||
34: 7(fvec4) Load 9(color)
|
|
||||||
35: 7(fvec4) FAdd 34 33
|
|
||||||
Store 9(color) 35
|
|
||||||
37: 23(ptr) AccessChain 9(color) 36
|
|
||||||
38: 6(float) Load 37
|
|
||||||
39: 6(float) Load 27(d4)
|
|
||||||
40: 17(bool) FOrdLessThan 38 39
|
|
||||||
SelectionMerge 42 None
|
|
||||||
BranchConditional 40 41 42
|
|
||||||
41: Label
|
|
||||||
44: 23(ptr) AccessChain 9(color) 22
|
|
||||||
45: 6(float) Load 44
|
|
||||||
46: 6(float) FAdd 45 43
|
|
||||||
47: 23(ptr) AccessChain 9(color) 22
|
|
||||||
Store 47 46
|
|
||||||
48: 23(ptr) AccessChain 9(color) 22
|
|
||||||
49: 6(float) Load 48
|
|
||||||
50: 6(float) Load 27(d4)
|
|
||||||
51: 17(bool) FOrdLessThan 49 50
|
|
||||||
SelectionMerge 53 None
|
|
||||||
BranchConditional 51 52 53
|
|
||||||
52: Label
|
|
||||||
54: 23(ptr) AccessChain 9(color) 36
|
|
||||||
55: 6(float) Load 54
|
|
||||||
57: 6(float) FAdd 55 56
|
|
||||||
Store 54 57
|
|
||||||
Branch 13
|
|
||||||
53: Label
|
|
||||||
Branch 42
|
|
||||||
42: Label
|
|
||||||
61: 23(ptr) AccessChain 9(color) 60
|
|
||||||
62: 6(float) Load 61
|
|
||||||
63: 6(float) Load 27(d4)
|
|
||||||
64: 17(bool) FOrdLessThan 62 63
|
|
||||||
SelectionMerge 66 None
|
|
||||||
BranchConditional 64 65 72
|
|
||||||
65: Label
|
|
||||||
67: 6(float) Load 27(d4)
|
|
||||||
68: 23(ptr) AccessChain 9(color) 60
|
|
||||||
69: 6(float) Load 68
|
|
||||||
70: 6(float) FAdd 69 67
|
|
||||||
71: 23(ptr) AccessChain 9(color) 60
|
|
||||||
Store 71 70
|
|
||||||
Branch 66
|
|
||||||
72: Label
|
|
||||||
73: 6(float) Load 27(d4)
|
|
||||||
74: 23(ptr) AccessChain 9(color) 36
|
|
||||||
75: 6(float) Load 74
|
|
||||||
76: 6(float) FAdd 75 73
|
|
||||||
77: 23(ptr) AccessChain 9(color) 36
|
|
||||||
Store 77 76
|
|
||||||
Branch 66
|
|
||||||
66: Label
|
|
||||||
Branch 13
|
|
||||||
14: Label
|
14: Label
|
||||||
Branch 78
|
19: 7(fvec4) Load 18(bigColor4)
|
||||||
78: Label
|
20: 7(fvec4) Load 9(color)
|
||||||
82: 23(ptr) AccessChain 9(color) 81
|
21: 7(fvec4) FAdd 20 19
|
||||||
83: 6(float) Load 82
|
Store 9(color) 21
|
||||||
85: 6(float) Load 84(d13)
|
25: 24(ptr) AccessChain 9(color) 23
|
||||||
86: 17(bool) FOrdLessThan 83 85
|
26: 6(float) Load 25
|
||||||
LoopMerge 79 78 None
|
29: 6(float) Load 28(d4)
|
||||||
BranchConditional 86 80 79
|
31: 30(bool) FOrdLessThan 26 29
|
||||||
80: Label
|
SelectionMerge 33 None
|
||||||
87: 23(ptr) AccessChain 9(color) 22
|
BranchConditional 31 32 33
|
||||||
88: 6(float) Load 87
|
32: Label
|
||||||
89: 6(float) Load 84(d13)
|
36: 24(ptr) AccessChain 9(color) 35
|
||||||
90: 17(bool) FOrdLessThan 88 89
|
37: 6(float) Load 36
|
||||||
SelectionMerge 92 None
|
38: 6(float) FAdd 37 34
|
||||||
BranchConditional 90 91 96
|
39: 24(ptr) AccessChain 9(color) 35
|
||||||
91: Label
|
Store 39 38
|
||||||
93: 7(fvec4) Load 9(color)
|
40: 24(ptr) AccessChain 9(color) 35
|
||||||
94: 7(fvec4) CompositeConstruct 56 56 56 56
|
41: 6(float) Load 40
|
||||||
95: 7(fvec4) FAdd 93 94
|
42: 6(float) Load 28(d4)
|
||||||
Store 9(color) 95
|
43: 30(bool) FOrdLessThan 41 42
|
||||||
Branch 92
|
SelectionMerge 45 None
|
||||||
96: Label
|
BranchConditional 43 44 45
|
||||||
97: 7(fvec4) Load 9(color)
|
44: Label
|
||||||
98: 7(fvec4) CompositeConstruct 56 56 56 56
|
46: 24(ptr) AccessChain 9(color) 23
|
||||||
99: 7(fvec4) FSub 97 98
|
47: 6(float) Load 46
|
||||||
Store 9(color) 99
|
49: 6(float) FAdd 47 48
|
||||||
Branch 92
|
Store 46 49
|
||||||
|
Branch 16
|
||||||
|
45: Label
|
||||||
|
Branch 33
|
||||||
|
33: Label
|
||||||
|
52: 24(ptr) AccessChain 9(color) 51
|
||||||
|
53: 6(float) Load 52
|
||||||
|
54: 6(float) Load 28(d4)
|
||||||
|
55: 30(bool) FOrdLessThan 53 54
|
||||||
|
SelectionMerge 57 None
|
||||||
|
BranchConditional 55 56 63
|
||||||
|
56: Label
|
||||||
|
58: 6(float) Load 28(d4)
|
||||||
|
59: 24(ptr) AccessChain 9(color) 51
|
||||||
|
60: 6(float) Load 59
|
||||||
|
61: 6(float) FAdd 60 58
|
||||||
|
62: 24(ptr) AccessChain 9(color) 51
|
||||||
|
Store 62 61
|
||||||
|
Branch 57
|
||||||
|
63: Label
|
||||||
|
64: 6(float) Load 28(d4)
|
||||||
|
65: 24(ptr) AccessChain 9(color) 23
|
||||||
|
66: 6(float) Load 65
|
||||||
|
67: 6(float) FAdd 66 64
|
||||||
|
68: 24(ptr) AccessChain 9(color) 23
|
||||||
|
Store 68 67
|
||||||
|
Branch 57
|
||||||
|
57: Label
|
||||||
|
Branch 16
|
||||||
|
16: Label
|
||||||
|
69: 24(ptr) AccessChain 9(color) 35
|
||||||
|
70: 6(float) Load 69
|
||||||
|
71: 6(float) Load 28(d4)
|
||||||
|
72: 30(bool) FOrdLessThan 70 71
|
||||||
|
BranchConditional 72 13 15
|
||||||
|
15: Label
|
||||||
|
Branch 73
|
||||||
|
73: Label
|
||||||
|
78: 24(ptr) AccessChain 9(color) 77
|
||||||
|
79: 6(float) Load 78
|
||||||
|
81: 6(float) Load 80(d13)
|
||||||
|
82: 30(bool) FOrdLessThan 79 81
|
||||||
|
LoopMerge 75 76 None
|
||||||
|
BranchConditional 82 74 75
|
||||||
|
74: Label
|
||||||
|
83: 24(ptr) AccessChain 9(color) 35
|
||||||
|
84: 6(float) Load 83
|
||||||
|
85: 6(float) Load 80(d13)
|
||||||
|
86: 30(bool) FOrdLessThan 84 85
|
||||||
|
SelectionMerge 88 None
|
||||||
|
BranchConditional 86 87 92
|
||||||
|
87: Label
|
||||||
|
89: 7(fvec4) Load 9(color)
|
||||||
|
90: 7(fvec4) CompositeConstruct 48 48 48 48
|
||||||
|
91: 7(fvec4) FAdd 89 90
|
||||||
|
Store 9(color) 91
|
||||||
|
Branch 88
|
||||||
92: Label
|
92: Label
|
||||||
100: 7(fvec4) Load 32(bigColor4)
|
93: 7(fvec4) Load 9(color)
|
||||||
101: 7(fvec4) Load 9(color)
|
94: 7(fvec4) CompositeConstruct 48 48 48 48
|
||||||
102: 7(fvec4) FAdd 101 100
|
95: 7(fvec4) FSub 93 94
|
||||||
Store 9(color) 102
|
Store 9(color) 95
|
||||||
103: 23(ptr) AccessChain 9(color) 36
|
Branch 88
|
||||||
104: 6(float) Load 103
|
88: Label
|
||||||
105: 6(float) Load 27(d4)
|
96: 7(fvec4) Load 18(bigColor4)
|
||||||
106: 17(bool) FOrdLessThan 104 105
|
97: 7(fvec4) Load 9(color)
|
||||||
SelectionMerge 108 None
|
98: 7(fvec4) FAdd 97 96
|
||||||
BranchConditional 106 107 108
|
Store 9(color) 98
|
||||||
107: Label
|
99: 24(ptr) AccessChain 9(color) 23
|
||||||
109: 23(ptr) AccessChain 9(color) 22
|
100: 6(float) Load 99
|
||||||
|
101: 6(float) Load 28(d4)
|
||||||
|
102: 30(bool) FOrdLessThan 100 101
|
||||||
|
SelectionMerge 104 None
|
||||||
|
BranchConditional 102 103 104
|
||||||
|
103: Label
|
||||||
|
105: 24(ptr) AccessChain 9(color) 35
|
||||||
|
106: 6(float) Load 105
|
||||||
|
107: 6(float) FAdd 106 34
|
||||||
|
108: 24(ptr) AccessChain 9(color) 35
|
||||||
|
Store 108 107
|
||||||
|
109: 24(ptr) AccessChain 9(color) 35
|
||||||
110: 6(float) Load 109
|
110: 6(float) Load 109
|
||||||
111: 6(float) FAdd 110 43
|
111: 6(float) Load 28(d4)
|
||||||
112: 23(ptr) AccessChain 9(color) 22
|
112: 30(bool) FOrdLessThan 110 111
|
||||||
Store 112 111
|
SelectionMerge 114 None
|
||||||
113: 23(ptr) AccessChain 9(color) 22
|
BranchConditional 112 113 114
|
||||||
114: 6(float) Load 113
|
113: Label
|
||||||
115: 6(float) Load 27(d4)
|
115: 24(ptr) AccessChain 9(color) 23
|
||||||
116: 17(bool) FOrdLessThan 114 115
|
116: 6(float) Load 115
|
||||||
SelectionMerge 118 None
|
117: 6(float) FAdd 116 48
|
||||||
BranchConditional 116 117 118
|
Store 115 117
|
||||||
117: Label
|
Branch 76
|
||||||
119: 23(ptr) AccessChain 9(color) 36
|
114: Label
|
||||||
|
Branch 104
|
||||||
|
104: Label
|
||||||
|
119: 24(ptr) AccessChain 9(color) 51
|
||||||
120: 6(float) Load 119
|
120: 6(float) Load 119
|
||||||
121: 6(float) FAdd 120 56
|
121: 6(float) Load 28(d4)
|
||||||
Store 119 121
|
122: 30(bool) FOrdLessThan 120 121
|
||||||
Branch 78
|
SelectionMerge 124 None
|
||||||
118: Label
|
BranchConditional 122 123 130
|
||||||
Branch 108
|
123: Label
|
||||||
108: Label
|
125: 6(float) Load 28(d4)
|
||||||
123: 23(ptr) AccessChain 9(color) 60
|
126: 24(ptr) AccessChain 9(color) 51
|
||||||
124: 6(float) Load 123
|
127: 6(float) Load 126
|
||||||
125: 6(float) Load 27(d4)
|
128: 6(float) FAdd 127 125
|
||||||
126: 17(bool) FOrdLessThan 124 125
|
129: 24(ptr) AccessChain 9(color) 51
|
||||||
SelectionMerge 128 None
|
Store 129 128
|
||||||
BranchConditional 126 127 134
|
Branch 124
|
||||||
127: Label
|
130: Label
|
||||||
129: 6(float) Load 27(d4)
|
131: 6(float) Load 28(d4)
|
||||||
130: 23(ptr) AccessChain 9(color) 60
|
132: 24(ptr) AccessChain 9(color) 23
|
||||||
131: 6(float) Load 130
|
133: 6(float) Load 132
|
||||||
132: 6(float) FAdd 131 129
|
134: 6(float) FAdd 133 131
|
||||||
133: 23(ptr) AccessChain 9(color) 60
|
135: 24(ptr) AccessChain 9(color) 23
|
||||||
Store 133 132
|
Store 135 134
|
||||||
Branch 128
|
Branch 124
|
||||||
134: Label
|
124: Label
|
||||||
135: 6(float) Load 27(d4)
|
Branch 76
|
||||||
136: 23(ptr) AccessChain 9(color) 36
|
76: Label
|
||||||
137: 6(float) Load 136
|
Branch 73
|
||||||
138: 6(float) FAdd 137 135
|
75: Label
|
||||||
139: 23(ptr) AccessChain 9(color) 36
|
136: 7(fvec4) Load 9(color)
|
||||||
Store 139 138
|
137: 7(fvec4) CompositeConstruct 48 48 48 48
|
||||||
Branch 128
|
138: 7(fvec4) FAdd 136 137
|
||||||
128: Label
|
Store 9(color) 138
|
||||||
Branch 78
|
141: 7(fvec4) Load 9(color)
|
||||||
79: Label
|
Store 140(gl_FragColor) 141
|
||||||
140: 7(fvec4) Load 9(color)
|
|
||||||
141: 7(fvec4) CompositeConstruct 56 56 56 56
|
|
||||||
142: 7(fvec4) FAdd 140 141
|
|
||||||
Store 9(color) 142
|
|
||||||
145: 7(fvec4) Load 9(color)
|
|
||||||
Store 144(gl_FragColor) 145
|
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -10,12 +10,12 @@ Linked fragment stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 263
|
// Id's are bound by 265
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 73 221
|
EntryPoint Fragment 4 "main" 73 223
|
||||||
ExecutionMode 4 OriginLowerLeft
|
ExecutionMode 4 OriginLowerLeft
|
||||||
Source ESSL 310
|
Source ESSL 310
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
@ -33,24 +33,24 @@ Linked fragment stage:
|
|||||||
Name 73 "x"
|
Name 73 "x"
|
||||||
Name 127 "d"
|
Name 127 "d"
|
||||||
Name 153 "i"
|
Name 153 "i"
|
||||||
Name 171 "j"
|
Name 172 "j"
|
||||||
Name 221 "color"
|
Name 223 "color"
|
||||||
Name 227 "v"
|
Name 229 "v"
|
||||||
Name 228 "param"
|
|
||||||
Name 230 "param"
|
Name 230 "param"
|
||||||
Name 232 "param"
|
Name 232 "param"
|
||||||
Name 240 "param"
|
Name 234 "param"
|
||||||
Name 242 "param"
|
Name 242 "param"
|
||||||
Name 244 "param"
|
Name 244 "param"
|
||||||
|
Name 246 "param"
|
||||||
Decorate 58(local) RelaxedPrecision
|
Decorate 58(local) RelaxedPrecision
|
||||||
Decorate 60(c) RelaxedPrecision
|
Decorate 60(c) RelaxedPrecision
|
||||||
Decorate 71(f) RelaxedPrecision
|
Decorate 71(f) RelaxedPrecision
|
||||||
Decorate 73(x) RelaxedPrecision
|
Decorate 73(x) RelaxedPrecision
|
||||||
Decorate 127(d) RelaxedPrecision
|
Decorate 127(d) RelaxedPrecision
|
||||||
Decorate 153(i) RelaxedPrecision
|
Decorate 153(i) RelaxedPrecision
|
||||||
Decorate 171(j) RelaxedPrecision
|
Decorate 172(j) RelaxedPrecision
|
||||||
Decorate 221(color) RelaxedPrecision
|
Decorate 223(color) RelaxedPrecision
|
||||||
Decorate 227(v) RelaxedPrecision
|
Decorate 229(v) RelaxedPrecision
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeFloat 32
|
6: TypeFloat 32
|
||||||
@ -71,31 +71,31 @@ Linked fragment stage:
|
|||||||
73(x): 72(ptr) Variable Input
|
73(x): 72(ptr) Variable Input
|
||||||
127(d): 59(ptr) Variable UniformConstant
|
127(d): 59(ptr) Variable UniformConstant
|
||||||
154: 9(int) Constant 0
|
154: 9(int) Constant 0
|
||||||
159: 9(int) Constant 10
|
160: 9(int) Constant 10
|
||||||
160: TypeBool
|
161: TypeBool
|
||||||
172: 9(int) Constant 20
|
173: 9(int) Constant 20
|
||||||
177: 9(int) Constant 30
|
179: 9(int) Constant 30
|
||||||
182: 6(float) Constant 1120429670
|
184: 6(float) Constant 1120429670
|
||||||
202: 6(float) Constant 1079739679
|
204: 6(float) Constant 1079739679
|
||||||
220: TypePointer Output 6(float)
|
222: TypePointer Output 6(float)
|
||||||
221(color): 220(ptr) Variable Output
|
223(color): 222(ptr) Variable Output
|
||||||
226: TypePointer UniformConstant 7(fvec4)
|
228: TypePointer UniformConstant 7(fvec4)
|
||||||
227(v): 226(ptr) Variable UniformConstant
|
229(v): 228(ptr) Variable UniformConstant
|
||||||
235: TypeInt 32 0
|
237: TypeInt 32 0
|
||||||
236: 235(int) Constant 1
|
238: 237(int) Constant 1
|
||||||
247: 235(int) Constant 2
|
249: 237(int) Constant 2
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
58(local): 10(ptr) Variable Function
|
58(local): 10(ptr) Variable Function
|
||||||
71(f): 70(ptr) Variable Function
|
71(f): 70(ptr) Variable Function
|
||||||
153(i): 10(ptr) Variable Function
|
153(i): 10(ptr) Variable Function
|
||||||
171(j): 10(ptr) Variable Function
|
172(j): 10(ptr) Variable Function
|
||||||
228(param): 8(ptr) Variable Function
|
|
||||||
230(param): 8(ptr) Variable Function
|
230(param): 8(ptr) Variable Function
|
||||||
232(param): 10(ptr) Variable Function
|
232(param): 8(ptr) Variable Function
|
||||||
240(param): 8(ptr) Variable Function
|
234(param): 10(ptr) Variable Function
|
||||||
242(param): 8(ptr) Variable Function
|
242(param): 8(ptr) Variable Function
|
||||||
244(param): 10(ptr) Variable Function
|
244(param): 8(ptr) Variable Function
|
||||||
|
246(param): 10(ptr) Variable Function
|
||||||
61: 9(int) Load 60(c)
|
61: 9(int) Load 60(c)
|
||||||
Store 58(local) 61
|
Store 58(local) 61
|
||||||
62: 9(int) Load 58(local)
|
62: 9(int) Load 58(local)
|
||||||
@ -218,130 +218,134 @@ Linked fragment stage:
|
|||||||
Store 153(i) 154
|
Store 153(i) 154
|
||||||
Branch 155
|
Branch 155
|
||||||
155: Label
|
155: Label
|
||||||
158: 9(int) Load 153(i)
|
159: 9(int) Load 153(i)
|
||||||
161: 160(bool) SLessThan 158 159
|
162: 161(bool) SLessThan 159 160
|
||||||
LoopMerge 156 155 None
|
LoopMerge 157 158 None
|
||||||
BranchConditional 161 157 156
|
BranchConditional 162 156 157
|
||||||
157: Label
|
|
||||||
162: 9(int) Load 60(c)
|
|
||||||
SelectionMerge 166 None
|
|
||||||
Switch 162 165
|
|
||||||
case 1: 163
|
|
||||||
case 2: 164
|
|
||||||
165: Label
|
|
||||||
196: 6(float) Load 73(x)
|
|
||||||
197: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 196
|
|
||||||
198: 6(float) Load 71(f)
|
|
||||||
199: 6(float) FAdd 198 197
|
|
||||||
Store 71(f) 199
|
|
||||||
Branch 166
|
|
||||||
163: Label
|
|
||||||
167: 6(float) Load 73(x)
|
|
||||||
168: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 167
|
|
||||||
169: 6(float) Load 71(f)
|
|
||||||
170: 6(float) FAdd 169 168
|
|
||||||
Store 71(f) 170
|
|
||||||
Store 171(j) 172
|
|
||||||
Branch 173
|
|
||||||
173: Label
|
|
||||||
176: 9(int) Load 171(j)
|
|
||||||
178: 160(bool) SLessThan 176 177
|
|
||||||
LoopMerge 174 173 None
|
|
||||||
BranchConditional 178 175 174
|
|
||||||
175: Label
|
|
||||||
179: 6(float) Load 71(f)
|
|
||||||
180: 6(float) FAdd 179 47
|
|
||||||
Store 71(f) 180
|
|
||||||
181: 6(float) Load 71(f)
|
|
||||||
183: 160(bool) FOrdLessThan 181 182
|
|
||||||
SelectionMerge 185 None
|
|
||||||
BranchConditional 183 184 185
|
|
||||||
184: Label
|
|
||||||
Branch 174
|
|
||||||
185: Label
|
|
||||||
187: 9(int) Load 171(j)
|
|
||||||
188: 9(int) IAdd 187 63
|
|
||||||
Store 171(j) 188
|
|
||||||
Branch 173
|
|
||||||
174: Label
|
|
||||||
Branch 166
|
|
||||||
164: Label
|
|
||||||
190: 6(float) Load 73(x)
|
|
||||||
191: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 190
|
|
||||||
192: 6(float) Load 71(f)
|
|
||||||
193: 6(float) FAdd 192 191
|
|
||||||
Store 71(f) 193
|
|
||||||
Branch 166
|
|
||||||
166: Label
|
|
||||||
201: 6(float) Load 71(f)
|
|
||||||
203: 160(bool) FOrdLessThan 201 202
|
|
||||||
SelectionMerge 205 None
|
|
||||||
BranchConditional 203 204 205
|
|
||||||
204: Label
|
|
||||||
Branch 156
|
|
||||||
205: Label
|
|
||||||
207: 9(int) Load 153(i)
|
|
||||||
208: 9(int) IAdd 207 63
|
|
||||||
Store 153(i) 208
|
|
||||||
Branch 155
|
|
||||||
156: Label
|
156: Label
|
||||||
209: 9(int) Load 60(c)
|
163: 9(int) Load 60(c)
|
||||||
SelectionMerge 212 None
|
SelectionMerge 167 None
|
||||||
Switch 209 212
|
Switch 163 166
|
||||||
case 1: 210
|
case 1: 164
|
||||||
case 2: 211
|
case 2: 165
|
||||||
210: Label
|
166: Label
|
||||||
213: 6(float) Load 73(x)
|
198: 6(float) Load 73(x)
|
||||||
214: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 213
|
199: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 198
|
||||||
215: 6(float) Load 71(f)
|
200: 6(float) Load 71(f)
|
||||||
216: 6(float) FAdd 215 214
|
201: 6(float) FAdd 200 199
|
||||||
Store 71(f) 216
|
Store 71(f) 201
|
||||||
Branch 212
|
Branch 167
|
||||||
211: Label
|
164: Label
|
||||||
Branch 212
|
168: 6(float) Load 73(x)
|
||||||
|
169: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 168
|
||||||
|
170: 6(float) Load 71(f)
|
||||||
|
171: 6(float) FAdd 170 169
|
||||||
|
Store 71(f) 171
|
||||||
|
Store 172(j) 173
|
||||||
|
Branch 174
|
||||||
|
174: Label
|
||||||
|
178: 9(int) Load 172(j)
|
||||||
|
180: 161(bool) SLessThan 178 179
|
||||||
|
LoopMerge 176 177 None
|
||||||
|
BranchConditional 180 175 176
|
||||||
|
175: Label
|
||||||
|
181: 6(float) Load 71(f)
|
||||||
|
182: 6(float) FAdd 181 47
|
||||||
|
Store 71(f) 182
|
||||||
|
183: 6(float) Load 71(f)
|
||||||
|
185: 161(bool) FOrdLessThan 183 184
|
||||||
|
SelectionMerge 187 None
|
||||||
|
BranchConditional 185 186 187
|
||||||
|
186: Label
|
||||||
|
Branch 176
|
||||||
|
187: Label
|
||||||
|
Branch 177
|
||||||
|
177: Label
|
||||||
|
189: 9(int) Load 172(j)
|
||||||
|
190: 9(int) IAdd 189 63
|
||||||
|
Store 172(j) 190
|
||||||
|
Branch 174
|
||||||
|
176: Label
|
||||||
|
Branch 167
|
||||||
|
165: Label
|
||||||
|
192: 6(float) Load 73(x)
|
||||||
|
193: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 192
|
||||||
|
194: 6(float) Load 71(f)
|
||||||
|
195: 6(float) FAdd 194 193
|
||||||
|
Store 71(f) 195
|
||||||
|
Branch 167
|
||||||
|
167: Label
|
||||||
|
203: 6(float) Load 71(f)
|
||||||
|
205: 161(bool) FOrdLessThan 203 204
|
||||||
|
SelectionMerge 207 None
|
||||||
|
BranchConditional 205 206 207
|
||||||
|
206: Label
|
||||||
|
Branch 157
|
||||||
|
207: Label
|
||||||
|
Branch 158
|
||||||
|
158: Label
|
||||||
|
209: 9(int) Load 153(i)
|
||||||
|
210: 9(int) IAdd 209 63
|
||||||
|
Store 153(i) 210
|
||||||
|
Branch 155
|
||||||
|
157: Label
|
||||||
|
211: 9(int) Load 60(c)
|
||||||
|
SelectionMerge 214 None
|
||||||
|
Switch 211 214
|
||||||
|
case 1: 212
|
||||||
|
case 2: 213
|
||||||
212: Label
|
212: Label
|
||||||
222: 6(float) Load 71(f)
|
215: 6(float) Load 73(x)
|
||||||
223: 9(int) Load 58(local)
|
216: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 215
|
||||||
224: 6(float) ConvertSToF 223
|
217: 6(float) Load 71(f)
|
||||||
225: 6(float) FAdd 222 224
|
218: 6(float) FAdd 217 216
|
||||||
Store 221(color) 225
|
Store 71(f) 218
|
||||||
229: 7(fvec4) Load 227(v)
|
Branch 214
|
||||||
Store 228(param) 229
|
213: Label
|
||||||
231: 7(fvec4) Load 227(v)
|
Branch 214
|
||||||
|
214: Label
|
||||||
|
224: 6(float) Load 71(f)
|
||||||
|
225: 9(int) Load 58(local)
|
||||||
|
226: 6(float) ConvertSToF 225
|
||||||
|
227: 6(float) FAdd 224 226
|
||||||
|
Store 223(color) 227
|
||||||
|
231: 7(fvec4) Load 229(v)
|
||||||
Store 230(param) 231
|
Store 230(param) 231
|
||||||
233: 9(int) Load 60(c)
|
233: 7(fvec4) Load 229(v)
|
||||||
Store 232(param) 233
|
Store 232(param) 233
|
||||||
234: 7(fvec4) FunctionCall 15(foo1(vf4;vf4;i1;) 228(param) 230(param) 232(param)
|
235: 9(int) Load 60(c)
|
||||||
237: 6(float) CompositeExtract 234 1
|
Store 234(param) 235
|
||||||
238: 6(float) Load 221(color)
|
236: 7(fvec4) FunctionCall 15(foo1(vf4;vf4;i1;) 230(param) 232(param) 234(param)
|
||||||
239: 6(float) FAdd 238 237
|
239: 6(float) CompositeExtract 236 1
|
||||||
Store 221(color) 239
|
240: 6(float) Load 223(color)
|
||||||
241: 7(fvec4) Load 227(v)
|
241: 6(float) FAdd 240 239
|
||||||
Store 240(param) 241
|
Store 223(color) 241
|
||||||
243: 7(fvec4) Load 227(v)
|
243: 7(fvec4) Load 229(v)
|
||||||
Store 242(param) 243
|
Store 242(param) 243
|
||||||
245: 9(int) Load 60(c)
|
245: 7(fvec4) Load 229(v)
|
||||||
Store 244(param) 245
|
Store 244(param) 245
|
||||||
246: 7(fvec4) FunctionCall 20(foo2(vf4;vf4;i1;) 240(param) 242(param) 244(param)
|
247: 9(int) Load 60(c)
|
||||||
248: 6(float) CompositeExtract 246 2
|
Store 246(param) 247
|
||||||
249: 6(float) Load 221(color)
|
248: 7(fvec4) FunctionCall 20(foo2(vf4;vf4;i1;) 242(param) 244(param) 246(param)
|
||||||
250: 6(float) FAdd 249 248
|
250: 6(float) CompositeExtract 248 2
|
||||||
Store 221(color) 250
|
251: 6(float) Load 223(color)
|
||||||
251: 9(int) Load 60(c)
|
252: 6(float) FAdd 251 250
|
||||||
SelectionMerge 254 None
|
Store 223(color) 252
|
||||||
Switch 251 253
|
253: 9(int) Load 60(c)
|
||||||
case 0: 252
|
SelectionMerge 256 None
|
||||||
253: Label
|
Switch 253 255
|
||||||
Branch 254
|
case 0: 254
|
||||||
252: Label
|
255: Label
|
||||||
Branch 254
|
Branch 256
|
||||||
254: Label
|
254: Label
|
||||||
258: 9(int) Load 60(c)
|
Branch 256
|
||||||
SelectionMerge 260 None
|
256: Label
|
||||||
Switch 258 259
|
260: 9(int) Load 60(c)
|
||||||
259: Label
|
SelectionMerge 262 None
|
||||||
Branch 260
|
Switch 260 261
|
||||||
260: Label
|
261: Label
|
||||||
|
Branch 262
|
||||||
|
262: Label
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
15(foo1(vf4;vf4;i1;): 7(fvec4) Function None 11
|
15(foo1(vf4;vf4;i1;): 7(fvec4) Function None 11
|
||||||
|
@ -5,76 +5,78 @@ Linked vertex stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 42
|
// Id's are bound by 43
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 40 41
|
EntryPoint Vertex 4 "main" 41 42
|
||||||
Source ESSL 300
|
Source ESSL 300
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "i"
|
Name 8 "i"
|
||||||
Name 17 "A"
|
Name 18 "A"
|
||||||
Name 25 "B"
|
Name 26 "B"
|
||||||
Name 27 "C"
|
Name 28 "C"
|
||||||
Name 37 "D"
|
Name 38 "D"
|
||||||
Name 40 "gl_VertexID"
|
Name 41 "gl_VertexID"
|
||||||
Name 41 "gl_InstanceID"
|
Name 42 "gl_InstanceID"
|
||||||
Decorate 40(gl_VertexID) BuiltIn VertexId
|
Decorate 41(gl_VertexID) BuiltIn VertexId
|
||||||
Decorate 41(gl_InstanceID) BuiltIn InstanceId
|
Decorate 42(gl_InstanceID) BuiltIn InstanceId
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
14: 6(int) Constant 10
|
15: 6(int) Constant 10
|
||||||
15: TypeBool
|
16: TypeBool
|
||||||
18: 6(int) Constant 1
|
19: 6(int) Constant 1
|
||||||
20: 6(int) Constant 2
|
21: 6(int) Constant 2
|
||||||
29: 6(int) Constant 5
|
30: 6(int) Constant 5
|
||||||
38: 6(int) Constant 3
|
39: 6(int) Constant 3
|
||||||
39: TypePointer Input 6(int)
|
40: TypePointer Input 6(int)
|
||||||
40(gl_VertexID): 39(ptr) Variable Input
|
41(gl_VertexID): 40(ptr) Variable Input
|
||||||
41(gl_InstanceID): 39(ptr) Variable Input
|
42(gl_InstanceID): 40(ptr) Variable Input
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(i): 7(ptr) Variable Function
|
8(i): 7(ptr) Variable Function
|
||||||
17(A): 7(ptr) Variable Function
|
18(A): 7(ptr) Variable Function
|
||||||
25(B): 7(ptr) Variable Function
|
26(B): 7(ptr) Variable Function
|
||||||
27(C): 7(ptr) Variable Function
|
28(C): 7(ptr) Variable Function
|
||||||
37(D): 7(ptr) Variable Function
|
38(D): 7(ptr) Variable Function
|
||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 6(int) Load 8(i)
|
14: 6(int) Load 8(i)
|
||||||
16: 15(bool) SLessThan 13 14
|
17: 16(bool) SLessThan 14 15
|
||||||
LoopMerge 11 10 None
|
LoopMerge 12 13 None
|
||||||
BranchConditional 16 12 11
|
BranchConditional 17 11 12
|
||||||
12: Label
|
|
||||||
Store 17(A) 18
|
|
||||||
19: 6(int) Load 8(i)
|
|
||||||
21: 6(int) SMod 19 20
|
|
||||||
22: 15(bool) IEqual 21 9
|
|
||||||
SelectionMerge 24 None
|
|
||||||
BranchConditional 22 23 24
|
|
||||||
23: Label
|
|
||||||
Store 25(B) 20
|
|
||||||
Branch 10
|
|
||||||
24: Label
|
|
||||||
28: 6(int) Load 8(i)
|
|
||||||
30: 6(int) SMod 28 29
|
|
||||||
31: 15(bool) IEqual 30 9
|
|
||||||
SelectionMerge 33 None
|
|
||||||
BranchConditional 31 32 33
|
|
||||||
32: Label
|
|
||||||
Store 25(B) 20
|
|
||||||
Branch 11
|
|
||||||
33: Label
|
|
||||||
35: 6(int) Load 8(i)
|
|
||||||
36: 6(int) IAdd 35 18
|
|
||||||
Store 8(i) 36
|
|
||||||
Branch 10
|
|
||||||
11: Label
|
11: Label
|
||||||
Store 37(D) 38
|
Store 18(A) 19
|
||||||
|
20: 6(int) Load 8(i)
|
||||||
|
22: 6(int) SMod 20 21
|
||||||
|
23: 16(bool) IEqual 22 9
|
||||||
|
SelectionMerge 25 None
|
||||||
|
BranchConditional 23 24 25
|
||||||
|
24: Label
|
||||||
|
Store 26(B) 21
|
||||||
|
Branch 13
|
||||||
|
25: Label
|
||||||
|
29: 6(int) Load 8(i)
|
||||||
|
31: 6(int) SMod 29 30
|
||||||
|
32: 16(bool) IEqual 31 9
|
||||||
|
SelectionMerge 34 None
|
||||||
|
BranchConditional 32 33 34
|
||||||
|
33: Label
|
||||||
|
Store 26(B) 21
|
||||||
|
Branch 12
|
||||||
|
34: Label
|
||||||
|
36: 6(int) Load 8(i)
|
||||||
|
37: 6(int) IAdd 36 19
|
||||||
|
Store 8(i) 37
|
||||||
|
Branch 13
|
||||||
|
13: Label
|
||||||
|
Branch 10
|
||||||
|
12: Label
|
||||||
|
Store 38(D) 39
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -5,45 +5,47 @@ Linked vertex stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 23
|
// Id's are bound by 24
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "main" 21 22
|
EntryPoint Vertex 4 "main" 22 23
|
||||||
Source ESSL 300
|
Source ESSL 300
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 8 "i"
|
Name 8 "i"
|
||||||
Name 21 "gl_VertexID"
|
Name 22 "gl_VertexID"
|
||||||
Name 22 "gl_InstanceID"
|
Name 23 "gl_InstanceID"
|
||||||
Decorate 21(gl_VertexID) BuiltIn VertexId
|
Decorate 22(gl_VertexID) BuiltIn VertexId
|
||||||
Decorate 22(gl_InstanceID) BuiltIn InstanceId
|
Decorate 23(gl_InstanceID) BuiltIn InstanceId
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
14: 6(int) Constant 10
|
15: 6(int) Constant 10
|
||||||
15: TypeBool
|
16: TypeBool
|
||||||
18: 6(int) Constant 1
|
19: 6(int) Constant 1
|
||||||
20: TypePointer Input 6(int)
|
21: TypePointer Input 6(int)
|
||||||
21(gl_VertexID): 20(ptr) Variable Input
|
22(gl_VertexID): 21(ptr) Variable Input
|
||||||
22(gl_InstanceID): 20(ptr) Variable Input
|
23(gl_InstanceID): 21(ptr) Variable Input
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
8(i): 7(ptr) Variable Function
|
8(i): 7(ptr) Variable Function
|
||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 6(int) Load 8(i)
|
14: 6(int) Load 8(i)
|
||||||
16: 15(bool) SLessThan 13 14
|
17: 16(bool) SLessThan 14 15
|
||||||
LoopMerge 11 10 None
|
LoopMerge 12 13 None
|
||||||
BranchConditional 16 12 11
|
BranchConditional 17 11 12
|
||||||
12: Label
|
|
||||||
17: 6(int) Load 8(i)
|
|
||||||
19: 6(int) IAdd 17 18
|
|
||||||
Store 8(i) 19
|
|
||||||
Branch 10
|
|
||||||
11: Label
|
11: Label
|
||||||
|
18: 6(int) Load 8(i)
|
||||||
|
20: 6(int) IAdd 18 19
|
||||||
|
Store 8(i) 20
|
||||||
|
Branch 13
|
||||||
|
13: Label
|
||||||
|
Branch 10
|
||||||
|
12: Label
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -5,20 +5,20 @@ Linked fragment stage:
|
|||||||
|
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 34
|
// Id's are bound by 35
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4 "main" 11 32
|
EntryPoint Fragment 4 "main" 11 33
|
||||||
ExecutionMode 4 OriginLowerLeft
|
ExecutionMode 4 OriginLowerLeft
|
||||||
Source GLSL 110
|
Source GLSL 110
|
||||||
Name 4 "main"
|
Name 4 "main"
|
||||||
Name 9 "color"
|
Name 9 "color"
|
||||||
Name 11 "BaseColor"
|
Name 11 "BaseColor"
|
||||||
Name 22 "d"
|
Name 23 "d"
|
||||||
Name 27 "bigColor"
|
Name 28 "bigColor"
|
||||||
Name 32 "gl_FragColor"
|
Name 33 "gl_FragColor"
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeFloat 32
|
6: TypeFloat 32
|
||||||
@ -26,16 +26,16 @@ Linked fragment stage:
|
|||||||
8: TypePointer Function 7(fvec4)
|
8: TypePointer Function 7(fvec4)
|
||||||
10: TypePointer Input 7(fvec4)
|
10: TypePointer Input 7(fvec4)
|
||||||
11(BaseColor): 10(ptr) Variable Input
|
11(BaseColor): 10(ptr) Variable Input
|
||||||
16: TypeInt 32 0
|
17: TypeInt 32 0
|
||||||
17: 16(int) Constant 0
|
18: 17(int) Constant 0
|
||||||
18: TypePointer Function 6(float)
|
19: TypePointer Function 6(float)
|
||||||
21: TypePointer UniformConstant 6(float)
|
22: TypePointer UniformConstant 6(float)
|
||||||
22(d): 21(ptr) Variable UniformConstant
|
23(d): 22(ptr) Variable UniformConstant
|
||||||
24: TypeBool
|
25: TypeBool
|
||||||
26: TypePointer UniformConstant 7(fvec4)
|
27: TypePointer UniformConstant 7(fvec4)
|
||||||
27(bigColor): 26(ptr) Variable UniformConstant
|
28(bigColor): 27(ptr) Variable UniformConstant
|
||||||
31: TypePointer Output 7(fvec4)
|
32: TypePointer Output 7(fvec4)
|
||||||
32(gl_FragColor): 31(ptr) Variable Output
|
33(gl_FragColor): 32(ptr) Variable Output
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
9(color): 8(ptr) Variable Function
|
9(color): 8(ptr) Variable Function
|
||||||
@ -43,20 +43,22 @@ Linked fragment stage:
|
|||||||
Store 9(color) 12
|
Store 9(color) 12
|
||||||
Branch 13
|
Branch 13
|
||||||
13: Label
|
13: Label
|
||||||
19: 18(ptr) AccessChain 9(color) 17
|
20: 19(ptr) AccessChain 9(color) 18
|
||||||
20: 6(float) Load 19
|
21: 6(float) Load 20
|
||||||
23: 6(float) Load 22(d)
|
24: 6(float) Load 23(d)
|
||||||
25: 24(bool) FOrdLessThan 20 23
|
26: 25(bool) FOrdLessThan 21 24
|
||||||
LoopMerge 14 13 None
|
LoopMerge 15 16 None
|
||||||
BranchConditional 25 15 14
|
BranchConditional 26 14 15
|
||||||
15: Label
|
|
||||||
28: 7(fvec4) Load 27(bigColor)
|
|
||||||
29: 7(fvec4) Load 9(color)
|
|
||||||
30: 7(fvec4) FAdd 29 28
|
|
||||||
Store 9(color) 30
|
|
||||||
Branch 13
|
|
||||||
14: Label
|
14: Label
|
||||||
33: 7(fvec4) Load 9(color)
|
29: 7(fvec4) Load 28(bigColor)
|
||||||
Store 32(gl_FragColor) 33
|
30: 7(fvec4) Load 9(color)
|
||||||
|
31: 7(fvec4) FAdd 30 29
|
||||||
|
Store 9(color) 31
|
||||||
|
Branch 16
|
||||||
|
16: Label
|
||||||
|
Branch 13
|
||||||
|
15: Label
|
||||||
|
34: 7(fvec4) Load 9(color)
|
||||||
|
Store 33(gl_FragColor) 34
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
7
Test/spv.for-nobody.vert
Normal file
7
Test/spv.for-nobody.vert
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
#version 450
|
||||||
|
layout(location=0) out highp int r;
|
||||||
|
void main() {
|
||||||
|
int i;
|
||||||
|
for (i=0; i<10; i++);
|
||||||
|
r = i;
|
||||||
|
}
|
9
Test/spv.for-notest.vert
Normal file
9
Test/spv.for-notest.vert
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#version 450
|
||||||
|
layout(location=0) out highp int r;
|
||||||
|
void main() {
|
||||||
|
int i;
|
||||||
|
// This infinite loop results in bad SPIR-V generated, since the merge block
|
||||||
|
// is dropped as unreachable. It is still useful for testing the rest of the
|
||||||
|
// code generation.
|
||||||
|
for (i=0; ; i++) { r = i; }
|
||||||
|
}
|
@ -5,6 +5,8 @@ spv.do-simple.vert
|
|||||||
spv.do-while-continue-break.vert
|
spv.do-while-continue-break.vert
|
||||||
spv.for-continue-break.vert
|
spv.for-continue-break.vert
|
||||||
spv.for-simple.vert
|
spv.for-simple.vert
|
||||||
|
spv.for-notest.vert
|
||||||
|
spv.for-nobody.vert
|
||||||
spv.while-continue-break.vert
|
spv.while-continue-break.vert
|
||||||
spv.while-simple.vert
|
spv.while-simple.vert
|
||||||
# vulkan-specific tests
|
# vulkan-specific tests
|
||||||
|
Loading…
x
Reference in New Issue
Block a user