Updated glslang.

This commit is contained in:
Бранимир Караџић 2019-11-04 20:03:31 -08:00
parent db5dbddf99
commit 15a4bcda82
678 changed files with 3060 additions and 2077 deletions

View File

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

View File

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

9
3rdparty/glslang/SPIRV/GlslangToSpv.cpp vendored Normal file → Executable file
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Some files were not shown because too many files have changed in this diff Show More