Merge branch 'master' of github.com:google/glslang into loopgen

Change-Id: Ie8236430bb9e30a9be2e0c1573c42183c2f4d0d4
This commit is contained in:
Dejan Mircevski 2016-01-11 16:26:18 -05:00
commit dba2826328
279 changed files with 59955 additions and 57020 deletions

3
.gitattributes vendored
View file

@ -12,3 +12,6 @@
*.c text eof=lf *.c text eof=lf
*.cpp text eof=lf *.cpp text eof=lf
*.y text eof=lf *.y text eof=lf
*.out text eof=lf
*.conf text eof=lf
*.err text eof=lf

View file

@ -5,7 +5,6 @@ set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "prefix")
project(glslang) project(glslang)
if(WIN32) if(WIN32)
set(CMAKE_GENERATOR_TOOLSET "v110" CACHE STRING "Platform Toolset" FORCE)
include(ChooseMSVCCRT.cmake) include(ChooseMSVCCRT.cmake)
add_definitions(-DGLSLANG_OSINCLUDE_WIN32) add_definitions(-DGLSLANG_OSINCLUDE_WIN32)
elseif(UNIX) elseif(UNIX)

View file

@ -85,17 +85,17 @@ public:
bool visitLoop(glslang::TVisit, glslang::TIntermLoop*); bool visitLoop(glslang::TVisit, glslang::TIntermLoop*);
bool visitBranch(glslang::TVisit visit, glslang::TIntermBranch*); bool visitBranch(glslang::TVisit visit, glslang::TIntermBranch*);
void dumpSpv(std::vector<unsigned int>& out) { builder.dump(out); } void dumpSpv(std::vector<unsigned int>& out);
protected: protected:
spv::Id createSpvVariable(const glslang::TIntermSymbol*); spv::Id createSpvVariable(const glslang::TIntermSymbol*);
spv::Id getSampledType(const glslang::TSampler&); spv::Id getSampledType(const glslang::TSampler&);
spv::Id convertGlslangToSpvType(const glslang::TType& type); spv::Id convertGlslangToSpvType(const glslang::TType& type);
spv::Id convertGlslangToSpvType(const glslang::TType& type, bool explicitLayout); spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&);
bool requiresExplicitLayout(const glslang::TType& type) const; glslang::TLayoutPacking getExplicitLayout(const glslang::TType& type) const;
int getArrayStride(const glslang::TType& arrayType); int getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking, glslang::TLayoutMatrix);
int getMatrixStride(const glslang::TType& matrixType); int getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking, glslang::TLayoutMatrix);
void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset); void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset, glslang::TLayoutPacking, glslang::TLayoutMatrix);
bool isShaderEntrypoint(const glslang::TIntermAggregate* node); bool isShaderEntrypoint(const glslang::TIntermAggregate* node);
void makeFunctions(const glslang::TIntermSequence&); void makeFunctions(const glslang::TIntermSequence&);
@ -108,6 +108,7 @@ protected:
spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*); spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*);
spv::Id createBinaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id left, spv::Id right, glslang::TBasicType typeProxy, bool reduceComparison = true); spv::Id createBinaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id left, spv::Id right, glslang::TBasicType typeProxy, bool reduceComparison = true);
spv::Id createBinaryMatrixOperation(spv::Op, spv::Decoration precision, spv::Id typeId, spv::Id left, spv::Id right);
spv::Id createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy); spv::Id createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy);
spv::Id createConversion(glslang::TOperator op, spv::Decoration precision, spv::Id destTypeId, spv::Id operand); spv::Id createConversion(glslang::TOperator op, spv::Decoration precision, spv::Id destTypeId, spv::Id operand);
spv::Id makeSmearedConstant(spv::Id constant, int vectorSize); spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
@ -132,14 +133,15 @@ protected:
spv::Builder builder; spv::Builder builder;
bool inMain; bool inMain;
bool mainTerminated; bool mainTerminated;
bool linkageOnly; bool linkageOnly; // true when visiting the set of objects in the AST present only for establishing interface, whether or not they were statically used
std::set<spv::Id> iOSet; // all input/output variables from either static use or declaration of interface
const glslang::TIntermediate* glslangIntermediate; const glslang::TIntermediate* glslangIntermediate;
spv::Id stdBuiltins; spv::Id stdBuiltins;
std::unordered_map<int, spv::Id> symbolValues; std::unordered_map<int, spv::Id> symbolValues;
std::unordered_set<int> constReadOnlyParameters; // set of formal function parameters that have glslang qualifier constReadOnly, so we know they are not local function "const" that are write-once std::unordered_set<int> constReadOnlyParameters; // set of formal function parameters that have glslang qualifier constReadOnly, so we know they are not local function "const" that are write-once
std::unordered_map<std::string, spv::Function*> functionMap; std::unordered_map<std::string, spv::Function*> functionMap;
std::unordered_map<const glslang::TTypeList*, spv::Id> structMap; 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
}; };
@ -227,7 +229,7 @@ spv::Dim TranslateDimensionality(const glslang::TSampler& sampler)
spv::Decoration TranslatePrecisionDecoration(const glslang::TType& type) spv::Decoration TranslatePrecisionDecoration(const glslang::TType& type)
{ {
switch (type.getQualifier().precision) { switch (type.getQualifier().precision) {
case glslang::EpqLow: return spv::DecorationRelaxedPrecision; // TODO: Map instead to 16-bit types? case glslang::EpqLow: return spv::DecorationRelaxedPrecision;
case glslang::EpqMedium: return spv::DecorationRelaxedPrecision; case glslang::EpqMedium: return spv::DecorationRelaxedPrecision;
case glslang::EpqHigh: return spv::NoPrecision; case glslang::EpqHigh: return spv::NoPrecision;
default: default:
@ -254,14 +256,17 @@ spv::Decoration TranslateBlockDecoration(const glslang::TType& type)
} }
// Translate glslang type to SPIR-V layout decorations. // Translate glslang type to SPIR-V layout decorations.
spv::Decoration TranslateLayoutDecoration(const glslang::TType& type) spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::TLayoutMatrix matrixLayout)
{ {
if (type.isMatrix()) { if (type.isMatrix()) {
switch (type.getQualifier().layoutMatrix) { switch (matrixLayout) {
case glslang::ElmRowMajor: case glslang::ElmRowMajor:
return spv::DecorationRowMajor; return spv::DecorationRowMajor;
default: case glslang::ElmColumnMajor:
return spv::DecorationColMajor; return spv::DecorationColMajor;
default:
// opaque layouts don't need a majorness
return (spv::Decoration)spv::BadValue;
} }
} else { } else {
switch (type.getBasicType()) { switch (type.getBasicType()) {
@ -293,30 +298,30 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type)
// Translate glslang type to SPIR-V interpolation decorations. // Translate glslang type to SPIR-V interpolation decorations.
// Returns spv::Decoration(spv::BadValue) when no decoration // Returns spv::Decoration(spv::BadValue) when no decoration
// should be applied. // should be applied.
spv::Decoration TranslateInterpolationDecoration(const glslang::TType& type) spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier)
{ {
if (type.getQualifier().smooth) { if (qualifier.smooth) {
// Smooth decoration doesn't exist in SPIR-V 1.0 // Smooth decoration doesn't exist in SPIR-V 1.0
return (spv::Decoration)spv::BadValue; return (spv::Decoration)spv::BadValue;
} }
if (type.getQualifier().nopersp) if (qualifier.nopersp)
return spv::DecorationNoPerspective; return spv::DecorationNoPerspective;
else if (type.getQualifier().patch) else if (qualifier.patch)
return spv::DecorationPatch; return spv::DecorationPatch;
else if (type.getQualifier().flat) else if (qualifier.flat)
return spv::DecorationFlat; return spv::DecorationFlat;
else if (type.getQualifier().centroid) else if (qualifier.centroid)
return spv::DecorationCentroid; return spv::DecorationCentroid;
else if (type.getQualifier().sample) else if (qualifier.sample)
return spv::DecorationSample; return spv::DecorationSample;
else else
return (spv::Decoration)spv::BadValue; return (spv::Decoration)spv::BadValue;
} }
// If glslang type is invaraiant, return SPIR-V invariant decoration. // If glslang type is invaraiant, return SPIR-V invariant decoration.
spv::Decoration TranslateInvariantDecoration(const glslang::TType& type) spv::Decoration TranslateInvariantDecoration(const glslang::TQualifier& qualifier)
{ {
if (type.getQualifier().invariant) if (qualifier.invariant)
return spv::DecorationInvariant; return spv::DecorationInvariant;
else else
return (spv::Decoration)spv::BadValue; return (spv::Decoration)spv::BadValue;
@ -414,6 +419,34 @@ spv::ImageFormat TranslateImageFormat(const glslang::TType& type)
} }
} }
void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& parent)
{
if (child.layoutMatrix == glslang::ElmNone)
child.layoutMatrix = parent.layoutMatrix;
if (parent.invariant)
child.invariant = true;
if (parent.nopersp)
child.nopersp = true;
if (parent.flat)
child.flat = true;
if (parent.centroid)
child.centroid = true;
if (parent.patch)
child.patch = true;
if (parent.sample)
child.sample = true;
}
bool HasNonLayoutQualifiers(const glslang::TQualifier& qualifier)
{
// This should list qualifiers that simultaneous satisify:
// - struct members can inherit from a struct declaration
// - effect decorations on the struct members (note smooth does not, and expecting something like volatile to effect the whole object)
// - are not part of the offset/st430/etc or row/column-major layout
return qualifier.invariant || qualifier.nopersp || qualifier.flat || qualifier.centroid || qualifier.patch || qualifier.sample;
}
// //
// Implement the TGlslangToSpvTraverser class. // Implement the TGlslangToSpvTraverser class.
// //
@ -550,6 +583,16 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(const glslang::TIntermediate* gls
} }
// Finish everything and dump
void TGlslangToSpvTraverser::dumpSpv(std::vector<unsigned int>& out)
{
// finish off the entry-point SPV instruction by adding the Input/Output <id>
for (auto it : iOSet)
entryPoint->addIdOperand(it);
builder.dump(out);
}
TGlslangToSpvTraverser::~TGlslangToSpvTraverser() TGlslangToSpvTraverser::~TGlslangToSpvTraverser()
{ {
if (! mainTerminated) { if (! mainTerminated) {
@ -580,6 +623,14 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
// Formal function parameters were mapped during makeFunctions(). // Formal function parameters were mapped during makeFunctions().
spv::Id id = getSymbolId(symbol); spv::Id id = getSymbolId(symbol);
// Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction
if (builder.isPointer(id)) {
spv::StorageClass sc = builder.getStorageClass(id);
if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)
iOSet.insert(id);
}
// Only process non-linkage-only nodes for generating actual static uses
if (! linkageOnly) { if (! linkageOnly) {
// Prepare to generate code for the access // Prepare to generate code for the access
@ -596,11 +647,6 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
builder.setAccessChainRValue(id); builder.setAccessChainRValue(id);
else else
builder.setAccessChainLValue(id); builder.setAccessChainLValue(id);
} else {
// finish off the entry-point SPV instruction by adding the Input/Output <id>
spv::StorageClass sc = builder.getStorageClass(id);
if (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)
entryPoint->addIdOperand(id);
} }
} }
@ -767,16 +813,14 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
convertGlslangToSpvType(node->getType()), left, right, convertGlslangToSpvType(node->getType()), left, right,
node->getLeft()->getType().getBasicType()); node->getLeft()->getType().getBasicType());
builder.clearAccessChain();
if (! result) { if (! result) {
spv::MissingFunctionality("unknown glslang binary operation"); spv::MissingFunctionality("unknown glslang binary operation");
return true; // pick up a child as the place-holder result
} else { } else {
builder.clearAccessChain();
builder.setAccessChainRValue(result); builder.setAccessChainRValue(result);
return false; return false;
} }
return true;
} }
bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node) bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node)
@ -821,7 +865,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
if (node->getOp() == glslang::EOpAtomicCounterIncrement || if (node->getOp() == glslang::EOpAtomicCounterIncrement ||
node->getOp() == glslang::EOpAtomicCounterDecrement || node->getOp() == glslang::EOpAtomicCounterDecrement ||
node->getOp() == glslang::EOpAtomicCounter) node->getOp() == glslang::EOpAtomicCounter ||
node->getOp() == glslang::EOpInterpolateAtCentroid)
operand = builder.accessChainGetLValue(); // Special case l-value operands operand = builder.accessChainGetLValue(); // Special case l-value operands
else else
operand = builder.accessChainLoad(convertGlslangToSpvType(node->getOperand()->getType())); operand = builder.accessChainLoad(convertGlslangToSpvType(node->getOperand()->getType()));
@ -888,10 +933,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
default: default:
spv::MissingFunctionality("unknown glslang unary"); spv::MissingFunctionality("unknown glslang unary");
break; return true; // pick up operand as placeholder result
} }
return true;
} }
bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TIntermAggregate* node) bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TIntermAggregate* node)
@ -1173,6 +1216,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
if (arg == 1) if (arg == 1)
lvalue = true; lvalue = true;
break; break;
case glslang::EOpInterpolateAtSample:
case glslang::EOpInterpolateAtOffset:
if (arg == 0)
lvalue = true;
break;
case glslang::EOpAtomicAdd: case glslang::EOpAtomicAdd:
case glslang::EOpAtomicMin: case glslang::EOpAtomicMin:
case glslang::EOpAtomicMax: case glslang::EOpAtomicMax:
@ -1226,7 +1274,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
if (! result) { if (! result) {
spv::MissingFunctionality("unknown glslang aggregate"); spv::MissingFunctionality("unknown glslang aggregate");
return true; return true; // pick up a child as a placeholder operand
} else { } else {
builder.clearAccessChain(); builder.clearAccessChain();
builder.setAccessChainRValue(result); builder.setAccessChainRValue(result);
@ -1469,18 +1517,19 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
} }
} }
// Convert from a glslang type to an SPV type, by calling into // Convert from a glslang type to an SPV type, by calling into a
// recursive version of this function. // recursive version of this function. This establishes the inherited
// layout state rooted from the top-level type.
spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type) spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type)
{ {
return convertGlslangToSpvType(type, requiresExplicitLayout(type)); return convertGlslangToSpvType(type, getExplicitLayout(type), type.getQualifier());
} }
// Do full recursive conversion of an arbitrary glslang type to a SPIR-V Id. // Do full recursive conversion of an arbitrary glslang type to a SPIR-V Id.
// explicitLayout can be kept the same throughout the heirarchical recursive walk. // explicitLayout can be kept the same throughout the heirarchical recursive walk.
spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type, bool explicitLayout) spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking explicitLayout, const glslang::TQualifier& qualifier)
{ {
spv::Id spvType = 0; spv::Id spvType = spv::NoResult;
switch (type.getBasicType()) { switch (type.getBasicType()) {
case glslang::EbtVoid: case glslang::EbtVoid:
@ -1509,13 +1558,13 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
case glslang::EbtSampler: case glslang::EbtSampler:
{ {
const glslang::TSampler& sampler = type.getSampler(); const glslang::TSampler& sampler = type.getSampler();
// an image is present, make its type // an image is present, make its type
spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler), sampler.shadow, sampler.arrayed, sampler.ms, spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler), sampler.shadow, sampler.arrayed, sampler.ms,
sampler.image ? 2 : 1, TranslateImageFormat(type)); sampler.image ? 2 : 1, TranslateImageFormat(type));
if (! sampler.image) { if (! sampler.image) {
spvType = builder.makeSampledImageType(spvType); spvType = builder.makeSampledImageType(spvType);
}
} }
}
break; break;
case glslang::EbtStruct: case glslang::EbtStruct:
case glslang::EbtBlock: case glslang::EbtBlock:
@ -1523,8 +1572,12 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
// If we've seen this struct type, return it // If we've seen this struct type, return it
const glslang::TTypeList* glslangStruct = type.getStruct(); const glslang::TTypeList* glslangStruct = type.getStruct();
std::vector<spv::Id> structFields; std::vector<spv::Id> structFields;
spvType = structMap[glslangStruct];
if (spvType) // Try to share structs for different layouts, but not yet for other
// kinds of qualification (primarily not yet including interpolant qualification).
if (! HasNonLayoutQualifiers(qualifier))
spvType = structMap[explicitLayout][qualifier.layoutMatrix][glslangStruct];
if (spvType != spv::NoResult)
break; break;
// else, we haven't seen it... // else, we haven't seen it...
@ -1542,13 +1595,17 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
} else { } else {
if (type.getBasicType() == glslang::EbtBlock) if (type.getBasicType() == glslang::EbtBlock)
memberRemapper[glslangStruct][i] = i - memberDelta; memberRemapper[glslangStruct][i] = i - memberDelta;
structFields.push_back(convertGlslangToSpvType(glslangType, explicitLayout)); // modify just this child's view of the qualifier
glslang::TQualifier subQualifier = glslangType.getQualifier();
InheritQualifiers(subQualifier, qualifier);
structFields.push_back(convertGlslangToSpvType(glslangType, explicitLayout, subQualifier));
} }
} }
// Make the SPIR-V type // Make the SPIR-V type
spvType = builder.makeStructType(structFields, type.getTypeName().c_str()); spvType = builder.makeStructType(structFields, type.getTypeName().c_str());
structMap[glslangStruct] = spvType; if (! HasNonLayoutQualifiers(qualifier))
structMap[explicitLayout][qualifier.layoutMatrix][glslangStruct] = spvType;
// Name and decorate the non-hidden members // Name and decorate the non-hidden members
int offset = -1; int offset = -1;
@ -1557,31 +1614,35 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
int member = i; int member = i;
if (type.getBasicType() == glslang::EbtBlock) if (type.getBasicType() == glslang::EbtBlock)
member = memberRemapper[glslangStruct][i]; member = memberRemapper[glslangStruct][i];
// modify just this child's view of the qualifier
glslang::TQualifier subQualifier = glslangType.getQualifier();
InheritQualifiers(subQualifier, qualifier);
// using -1 above to indicate a hidden member // using -1 above to indicate a hidden member
if (member >= 0) { if (member >= 0) {
builder.addMemberName(spvType, member, glslangType.getFieldName().c_str()); builder.addMemberName(spvType, member, glslangType.getFieldName().c_str());
addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangType)); addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangType, subQualifier.layoutMatrix));
addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangType)); addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangType));
addMemberDecoration(spvType, member, TranslateInterpolationDecoration(glslangType)); addMemberDecoration(spvType, member, TranslateInterpolationDecoration(subQualifier));
addMemberDecoration(spvType, member, TranslateInvariantDecoration(glslangType)); addMemberDecoration(spvType, member, TranslateInvariantDecoration(subQualifier));
if (glslangType.getQualifier().hasLocation()) if (glslangType.getQualifier().hasLocation())
builder.addMemberDecoration(spvType, member, spv::DecorationLocation, glslangType.getQualifier().layoutLocation); builder.addMemberDecoration(spvType, member, spv::DecorationLocation, glslangType.getQualifier().layoutLocation);
if (glslangType.getQualifier().hasComponent()) if (glslangType.getQualifier().hasComponent())
builder.addMemberDecoration(spvType, member, spv::DecorationComponent, glslangType.getQualifier().layoutComponent); builder.addMemberDecoration(spvType, member, spv::DecorationComponent, glslangType.getQualifier().layoutComponent);
if (glslangType.getQualifier().hasXfbOffset()) if (glslangType.getQualifier().hasXfbOffset())
builder.addMemberDecoration(spvType, member, spv::DecorationOffset, glslangType.getQualifier().layoutXfbOffset); builder.addMemberDecoration(spvType, member, spv::DecorationOffset, glslangType.getQualifier().layoutXfbOffset);
else if (explicitLayout) { else if (explicitLayout != glslang::ElpNone) {
// figure out what to do with offset, which is accumulating // figure out what to do with offset, which is accumulating
int nextOffset; int nextOffset;
updateMemberOffset(type, glslangType, offset, nextOffset); updateMemberOffset(type, glslangType, offset, nextOffset, explicitLayout, subQualifier.layoutMatrix);
if (offset >= 0) if (offset >= 0)
builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset); builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset);
offset = nextOffset; offset = nextOffset;
} }
if (glslangType.isMatrix() && explicitLayout) { if (glslangType.isMatrix() && explicitLayout != glslang::ElpNone)
builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, getMatrixStride(glslangType)); builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, getMatrixStride(glslangType, explicitLayout, subQualifier.layoutMatrix));
}
// built-in variable decorations // built-in variable decorations
spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangType.getQualifier().builtIn); spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangType.getQualifier().builtIn);
@ -1591,7 +1652,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
} }
// Decorate the structure // Decorate the structure
addDecoration(spvType, TranslateLayoutDecoration(type)); addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
addDecoration(spvType, TranslateBlockDecoration(type)); addDecoration(spvType, TranslateBlockDecoration(type));
if (type.getQualifier().hasStream()) if (type.getQualifier().hasStream())
builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream); builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream);
@ -1617,10 +1678,38 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
} }
if (type.isArray()) { if (type.isArray()) {
int stride = 0; // keep this 0 unless doing an explicit layout; 0 will mean no decoration, no stride
// Do all but the outer dimension // Do all but the outer dimension
for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) { if (type.getArraySizes()->getNumDims() > 1) {
assert(type.getArraySizes()->getDimSize(dim) > 0); // We need to decorate array strides for types needing explicit layout, except blocks.
spvType = builder.makeArrayType(spvType, type.getArraySizes()->getDimSize(dim)); if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock) {
// Use a dummy glslang type for querying internal strides of
// arrays of arrays, but using just a one-dimensional array.
glslang::TType simpleArrayType(type, 0); // deference type of the array
while (simpleArrayType.getArraySizes().getNumDims() > 1)
simpleArrayType.getArraySizes().dereference();
// Will compute the higher-order strides here, rather than making a whole
// pile of types and doing repetitive recursion on their contents.
stride = getArrayStride(simpleArrayType, explicitLayout, qualifier.layoutMatrix);
}
// make the arrays
for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) {
int size = type.getArraySizes()->getDimSize(dim);
assert(size > 0);
spvType = builder.makeArrayType(spvType, size, stride);
if (stride > 0)
builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
stride *= size;
}
} else {
// single-dimensional array, and don't yet have stride
// We need to decorate array strides for types needing explicit layout, except blocks.
if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock)
stride = getArrayStride(type, explicitLayout, qualifier.layoutMatrix);
} }
// Do the outer dimension, which might not be known for a runtime-sized array // Do the outer dimension, which might not be known for a runtime-sized array
@ -1628,55 +1717,62 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
spvType = builder.makeRuntimeArray(spvType); spvType = builder.makeRuntimeArray(spvType);
} else { } else {
assert(type.getOuterArraySize() > 0); assert(type.getOuterArraySize() > 0);
spvType = builder.makeArrayType(spvType, type.getOuterArraySize()); spvType = builder.makeArrayType(spvType, type.getOuterArraySize(), stride);
} }
if (stride > 0)
// TODO: explicit layout still needs to be done hierarchically for arrays of arrays, which builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
// may still require additional "link time" support from the front-end
// for arrays of arrays
// We need to decorate array strides for types needing explicit layout,
// except for the very top if it is an array of blocks; that array is
// not laid out in memory in a way needing a stride.
if (explicitLayout && type.getBasicType() != glslang::EbtBlock)
builder.addDecoration(spvType, spv::DecorationArrayStride, getArrayStride(type));
} }
return spvType; return spvType;
} }
bool TGlslangToSpvTraverser::requiresExplicitLayout(const glslang::TType& type) const // Decide whether or not this type should be
// decorated with offsets and strides, and if so
// whether std140 or std430 rules should be applied.
glslang::TLayoutPacking TGlslangToSpvTraverser::getExplicitLayout(const glslang::TType& type) const
{ {
return type.getBasicType() == glslang::EbtBlock && // has to be a block
type.getQualifier().layoutPacking != glslang::ElpShared && if (type.getBasicType() != glslang::EbtBlock)
type.getQualifier().layoutPacking != glslang::ElpPacked && return glslang::ElpNone;
(type.getQualifier().storage == glslang::EvqUniform ||
type.getQualifier().storage == glslang::EvqBuffer); // has to be a uniform or buffer block
if (type.getQualifier().storage != glslang::EvqUniform &&
type.getQualifier().storage != glslang::EvqBuffer)
return glslang::ElpNone;
// return the layout to use
switch (type.getQualifier().layoutPacking) {
case glslang::ElpStd140:
case glslang::ElpStd430:
return type.getQualifier().layoutPacking;
default:
return glslang::ElpNone;
}
} }
// Given an array type, returns the integer stride required for that array // Given an array type, returns the integer stride required for that array
int TGlslangToSpvTraverser::getArrayStride(const glslang::TType& arrayType) int TGlslangToSpvTraverser::getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
{ {
int size; int size;
int stride = glslangIntermediate->getBaseAlignment(arrayType, size, arrayType.getQualifier().layoutPacking == glslang::ElpStd140); int stride;
if (arrayType.isMatrix()) { glslangIntermediate->getBaseAlignment(arrayType, size, stride, explicitLayout == glslang::ElpStd140, matrixLayout == glslang::ElmRowMajor);
// GLSL strides are set to alignments of the matrix flattened to individual rows/cols,
// but SPV needs an array stride for the whole matrix, not the rows/cols
if (arrayType.getQualifier().layoutMatrix == glslang::ElmRowMajor)
stride *= arrayType.getMatrixRows();
else
stride *= arrayType.getMatrixCols();
}
return stride; return stride;
} }
// Given a matrix type, returns the integer stride required for that matrix // Given a matrix type, or array (of array) of matrixes type, returns the integer stride required for that matrix
// when used as a member of an interface block // when used as a member of an interface block
int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType) int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
{ {
glslang::TType elementType;
elementType.shallowCopy(matrixType);
elementType.clearArraySizes();
int size; int size;
return glslangIntermediate->getBaseAlignment(matrixType, size, matrixType.getQualifier().layoutPacking == glslang::ElpStd140); int stride;
glslangIntermediate->getBaseAlignment(elementType, size, stride, explicitLayout == glslang::ElpStd140, matrixLayout == glslang::ElmRowMajor);
return stride;
} }
// Given a member type of a struct, realign the current offset for it, and compute // Given a member type of a struct, realign the current offset for it, and compute
@ -1685,14 +1781,12 @@ int TGlslangToSpvTraverser::getMatrixStride(const glslang::TType& matrixType)
// 'currentOffset' should be passed in already initialized, ready to modify, and reflecting // 'currentOffset' should be passed in already initialized, ready to modify, and reflecting
// the migration of data from nextOffset -> currentOffset. It should be -1 on the first call. // the migration of data from nextOffset -> currentOffset. It should be -1 on the first call.
// -1 means a non-forced member offset (no decoration needed). // -1 means a non-forced member offset (no decoration needed).
void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset) void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset,
glslang::TLayoutPacking explicitLayout, glslang::TLayoutMatrix matrixLayout)
{ {
// this will get a positive value when deemed necessary // this will get a positive value when deemed necessary
nextOffset = -1; nextOffset = -1;
bool forceOffset = structType.getQualifier().layoutPacking == glslang::ElpStd140 ||
structType.getQualifier().layoutPacking == glslang::ElpStd430;
// override anything in currentOffset with user-set offset // override anything in currentOffset with user-set offset
if (memberType.getQualifier().hasOffset()) if (memberType.getQualifier().hasOffset())
currentOffset = memberType.getQualifier().layoutOffset; currentOffset = memberType.getQualifier().layoutOffset;
@ -1702,14 +1796,14 @@ void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType
// once cross-compilation unit GLSL validation is done, as the original user // once cross-compilation unit GLSL validation is done, as the original user
// settings are needed in layoutOffset, and then the following will come into play. // settings are needed in layoutOffset, and then the following will come into play.
if (! forceOffset) { if (explicitLayout == glslang::ElpNone) {
if (! memberType.getQualifier().hasOffset()) if (! memberType.getQualifier().hasOffset())
currentOffset = -1; currentOffset = -1;
return; return;
} }
// Getting this far means we are forcing offsets // Getting this far means we need explicit offsets
if (currentOffset < 0) if (currentOffset < 0)
currentOffset = 0; currentOffset = 0;
@ -1717,7 +1811,8 @@ void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& structType
// but possibly not yet correctly aligned. // but possibly not yet correctly aligned.
int memberSize; int memberSize;
int memberAlignment = glslangIntermediate->getBaseAlignment(memberType, memberSize, memberType.getQualifier().layoutPacking == glslang::ElpStd140); int dummyStride;
int memberAlignment = glslangIntermediate->getBaseAlignment(memberType, memberSize, dummyStride, explicitLayout == glslang::ElpStd140, matrixLayout == glslang::ElmRowMajor);
glslang::RoundToPow2(currentOffset, memberAlignment); glslang::RoundToPow2(currentOffset, memberAlignment);
nextOffset = currentOffset + memberSize; nextOffset = currentOffset + memberSize;
} }
@ -1876,6 +1971,9 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
// Check for queries // Check for queries
if (cracked.query) { if (cracked.query) {
// a sampled image needs to have the image extracted first
if (builder.isSampledImage(params.sampler))
params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler);
switch (node->getOp()) { switch (node->getOp()) {
case glslang::EOpImageQuerySize: case glslang::EOpImageQuerySize:
case glslang::EOpTextureQuerySize: case glslang::EOpTextureQuerySize:
@ -1904,15 +2002,19 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
auto opIt = arguments.begin(); auto opIt = arguments.begin();
operands.push_back(*(opIt++)); operands.push_back(*(opIt++));
operands.push_back(*(opIt++)); operands.push_back(*(opIt++));
if (node->getOp() == glslang::EOpImageStore)
operands.push_back(*(opIt++));
if (node->getOp() == glslang::EOpImageLoad) { if (node->getOp() == glslang::EOpImageLoad) {
if (sampler.ms) { if (sampler.ms) {
operands.push_back(spv::ImageOperandsSampleMask); operands.push_back(spv::ImageOperandsSampleMask);
operands.push_back(*(opIt++)); operands.push_back(*opIt);
} }
return builder.createOp(spv::OpImageRead, convertGlslangToSpvType(node->getType()), operands); return builder.createOp(spv::OpImageRead, convertGlslangToSpvType(node->getType()), operands);
} else if (node->getOp() == glslang::EOpImageStore) { } else if (node->getOp() == glslang::EOpImageStore) {
if (sampler.ms) {
operands.push_back(*(opIt + 1));
operands.push_back(spv::ImageOperandsSampleMask);
operands.push_back(*opIt);
} else
operands.push_back(*opIt);
builder.createNoResultOp(spv::OpImageWrite, operands); builder.createNoResultOp(spv::OpImageWrite, operands);
return spv::NoResult; return spv::NoResult;
} else { } else {
@ -1966,7 +2068,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
std::vector<spv::Id> indexes; std::vector<spv::Id> indexes;
int comp; int comp;
if (cracked.proj) if (cracked.proj)
comp = 3; comp = 2; // "The resulting 3rd component of P in the shadow forms is used as Dref"
else else
comp = builder.getNumComponents(params.coords) - 1; comp = builder.getNumComponents(params.coords) - 1;
indexes.push_back(comp); indexes.push_back(comp);
@ -2138,26 +2240,17 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
break; break;
case glslang::EOpVectorTimesMatrix: case glslang::EOpVectorTimesMatrix:
case glslang::EOpVectorTimesMatrixAssign: case glslang::EOpVectorTimesMatrixAssign:
assert(builder.isVector(left));
assert(builder.isMatrix(right));
binOp = spv::OpVectorTimesMatrix; binOp = spv::OpVectorTimesMatrix;
break; break;
case glslang::EOpMatrixTimesVector: case glslang::EOpMatrixTimesVector:
assert(builder.isMatrix(left));
assert(builder.isVector(right));
binOp = spv::OpMatrixTimesVector; binOp = spv::OpMatrixTimesVector;
break; break;
case glslang::EOpMatrixTimesScalar: case glslang::EOpMatrixTimesScalar:
case glslang::EOpMatrixTimesScalarAssign: case glslang::EOpMatrixTimesScalarAssign:
if (builder.isMatrix(right))
std::swap(left, right);
assert(builder.isScalar(right));
binOp = spv::OpMatrixTimesScalar; binOp = spv::OpMatrixTimesScalar;
break; break;
case glslang::EOpMatrixTimesMatrix: case glslang::EOpMatrixTimesMatrix:
case glslang::EOpMatrixTimesMatrixAssign: case glslang::EOpMatrixTimesMatrixAssign:
assert(builder.isMatrix(left));
assert(builder.isMatrix(right));
binOp = spv::OpMatrixTimesMatrix; binOp = spv::OpMatrixTimesMatrix;
break; break;
case glslang::EOpOuterProduct: case glslang::EOpOuterProduct:
@ -2236,29 +2329,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
// handle mapped binary operations (should be non-comparison) // handle mapped binary operations (should be non-comparison)
if (binOp != spv::OpNop) { if (binOp != spv::OpNop) {
assert(comparison == false); assert(comparison == false);
if (builder.isMatrix(left) || builder.isMatrix(right)) { if (builder.isMatrix(left) || builder.isMatrix(right))
switch (binOp) { return createBinaryMatrixOperation(binOp, precision, typeId, left, right);
case spv::OpMatrixTimesScalar:
case spv::OpVectorTimesMatrix:
case spv::OpMatrixTimesVector:
case spv::OpMatrixTimesMatrix:
break;
case spv::OpFDiv:
// turn it into a multiply...
assert(builder.isMatrix(left) && builder.isScalar(right));
right = builder.createBinOp(spv::OpFDiv, builder.getTypeId(right), builder.makeFloatConstant(1.0F), right);
binOp = spv::OpFMul;
break;
default:
spv::MissingFunctionality("binary operation on matrix");
break;
}
spv::Id id = builder.createBinOp(binOp, typeId, left, right);
builder.setPrecision(id, precision);
return id;
}
// No matrix involved; make both operands be the same number of components, if needed // No matrix involved; make both operands be the same number of components, if needed
if (needMatchingVectors) if (needMatchingVectors)
@ -2278,7 +2350,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
if (reduceComparison && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) { if (reduceComparison && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) {
assert(op == glslang::EOpEqual || op == glslang::EOpNotEqual); assert(op == glslang::EOpEqual || op == glslang::EOpNotEqual);
return builder.createCompare(precision, left, right, op == glslang::EOpEqual); return builder.createCompositeCompare(precision, left, right, op == glslang::EOpEqual);
} }
switch (op) { switch (op) {
@ -2342,6 +2414,111 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
return 0; return 0;
} }
//
// Translate AST matrix operation to SPV operation, already having SPV-based operands/types.
// These can be any of:
//
// matrix * scalar
// scalar * matrix
// matrix * matrix linear algebraic
// matrix * vector
// vector * matrix
// matrix * matrix componentwise
// matrix op matrix op in {+, -, /}
// matrix op scalar op in {+, -, /}
// scalar op matrix op in {+, -, /}
//
spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Id typeId, spv::Id left, spv::Id right)
{
bool firstClass = true;
// First, handle first-class matrix operations (* and matrix/scalar)
switch (op) {
case spv::OpFDiv:
if (builder.isMatrix(left) && builder.isScalar(right)) {
// turn matrix / scalar into a multiply...
right = builder.createBinOp(spv::OpFDiv, builder.getTypeId(right), builder.makeFloatConstant(1.0F), right);
op = spv::OpMatrixTimesScalar;
} else
firstClass = false;
break;
case spv::OpMatrixTimesScalar:
if (builder.isMatrix(right))
std::swap(left, right);
assert(builder.isScalar(right));
break;
case spv::OpVectorTimesMatrix:
assert(builder.isVector(left));
assert(builder.isMatrix(right));
break;
case spv::OpMatrixTimesVector:
assert(builder.isMatrix(left));
assert(builder.isVector(right));
break;
case spv::OpMatrixTimesMatrix:
assert(builder.isMatrix(left));
assert(builder.isMatrix(right));
break;
default:
firstClass = false;
break;
}
if (firstClass) {
spv::Id id = builder.createBinOp(op, typeId, left, right);
builder.setPrecision(id, precision);
return id;
}
// Handle component-wise +, -, *, and / for all combinations of type.
// The result type of all of them is the same type as the (a) matrix operand.
// The algorithm is to:
// - break the matrix(es) into vectors
// - smear any scalar to a vector
// - do vector operations
// - make a matrix out the vector results
switch (op) {
case spv::OpFAdd:
case spv::OpFSub:
case spv::OpFDiv:
case spv::OpFMul:
{
// one time set up...
bool leftMat = builder.isMatrix(left);
bool rightMat = builder.isMatrix(right);
unsigned int numCols = leftMat ? builder.getNumColumns(left) : builder.getNumColumns(right);
int numRows = leftMat ? builder.getNumRows(left) : builder.getNumRows(right);
spv::Id scalarType = builder.getScalarTypeId(typeId);
spv::Id vecType = builder.makeVectorType(scalarType, numRows);
std::vector<spv::Id> results;
spv::Id smearVec = spv::NoResult;
if (builder.isScalar(left))
smearVec = builder.smearScalar(precision, left, vecType);
else if (builder.isScalar(right))
smearVec = builder.smearScalar(precision, right, vecType);
// do each vector op
for (unsigned int c = 0; c < numCols; ++c) {
std::vector<unsigned int> indexes;
indexes.push_back(c);
spv::Id leftVec = leftMat ? builder.createCompositeExtract( left, vecType, indexes) : smearVec;
spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec;
results.push_back(builder.createBinOp(op, vecType, leftVec, rightVec));
builder.setPrecision(results.back(), precision);
}
// put the pieces together
spv::Id id = builder.createCompositeConstruct(typeId, results);
builder.setPrecision(id, precision);
return id;
}
default:
assert(0);
return spv::NoResult;
}
}
spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy) spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy)
{ {
spv::Op unaryOp = spv::OpNop; spv::Op unaryOp = spv::OpNop;
@ -2471,6 +2648,13 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
unaryOp = spv::OpIsInf; unaryOp = spv::OpIsInf;
break; break;
case glslang::EOpFloatBitsToInt:
case glslang::EOpFloatBitsToUint:
case glslang::EOpIntBitsToFloat:
case glslang::EOpUintBitsToFloat:
unaryOp = spv::OpBitcast;
break;
case glslang::EOpPackSnorm2x16: case glslang::EOpPackSnorm2x16:
libCall = spv::GLSLstd450PackSnorm2x16; libCall = spv::GLSLstd450PackSnorm2x16;
break; break;
@ -2535,7 +2719,9 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
case glslang::EOpFwidthCoarse: case glslang::EOpFwidthCoarse:
unaryOp = spv::OpFwidthCoarse; unaryOp = spv::OpFwidthCoarse;
break; break;
case glslang::EOpInterpolateAtCentroid:
libCall = spv::GLSLstd450InterpolateAtCentroid;
break;
case glslang::EOpAny: case glslang::EOpAny:
unaryOp = spv::OpAny; unaryOp = spv::OpAny;
break; break;
@ -2809,6 +2995,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
libCall = spv::GLSLstd450UMin; libCall = spv::GLSLstd450UMin;
else else
libCall = spv::GLSLstd450SMin; libCall = spv::GLSLstd450SMin;
builder.promoteScalar(precision, operands.front(), operands.back());
break; break;
case glslang::EOpModf: case glslang::EOpModf:
libCall = spv::GLSLstd450Modf; libCall = spv::GLSLstd450Modf;
@ -2820,6 +3007,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
libCall = spv::GLSLstd450UMax; libCall = spv::GLSLstd450UMax;
else else
libCall = spv::GLSLstd450SMax; libCall = spv::GLSLstd450SMax;
builder.promoteScalar(precision, operands.front(), operands.back());
break; break;
case glslang::EOpPow: case glslang::EOpPow:
libCall = spv::GLSLstd450Pow; libCall = spv::GLSLstd450Pow;
@ -2838,18 +3026,24 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
libCall = spv::GLSLstd450UClamp; libCall = spv::GLSLstd450UClamp;
else else
libCall = spv::GLSLstd450SClamp; libCall = spv::GLSLstd450SClamp;
builder.promoteScalar(precision, operands.front(), operands[1]);
builder.promoteScalar(precision, operands.front(), operands[2]);
break; break;
case glslang::EOpMix: case glslang::EOpMix:
if (isFloat) if (isFloat)
libCall = spv::GLSLstd450FMix; libCall = spv::GLSLstd450FMix;
else else
libCall = spv::GLSLstd450IMix; libCall = spv::GLSLstd450IMix;
builder.promoteScalar(precision, operands.front(), operands.back());
break; break;
case glslang::EOpStep: case glslang::EOpStep:
libCall = spv::GLSLstd450Step; libCall = spv::GLSLstd450Step;
builder.promoteScalar(precision, operands.front(), operands.back());
break; break;
case glslang::EOpSmoothStep: case glslang::EOpSmoothStep:
libCall = spv::GLSLstd450SmoothStep; libCall = spv::GLSLstd450SmoothStep;
builder.promoteScalar(precision, operands[0], operands[2]);
builder.promoteScalar(precision, operands[1], operands[2]);
break; break;
case glslang::EOpDistance: case glslang::EOpDistance:
@ -2867,7 +3061,12 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
case glslang::EOpRefract: case glslang::EOpRefract:
libCall = spv::GLSLstd450Refract; libCall = spv::GLSLstd450Refract;
break; break;
case glslang::EOpInterpolateAtSample:
libCall = spv::GLSLstd450InterpolateAtSample;
break;
case glslang::EOpInterpolateAtOffset:
libCall = spv::GLSLstd450InterpolateAtOffset;
break;
case glslang::EOpAddCarry: case glslang::EOpAddCarry:
opCode = spv::OpIAddCarry; opCode = spv::OpIAddCarry;
typeId = builder.makeStructResultType(typeId0, typeId0); typeId = builder.makeStructResultType(typeId0, typeId0);
@ -3027,7 +3226,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
if (! symbol->getType().isStruct()) { if (! symbol->getType().isStruct()) {
addDecoration(id, TranslatePrecisionDecoration(symbol->getType())); addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
addDecoration(id, TranslateInterpolationDecoration(symbol->getType())); addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
if (symbol->getQualifier().hasLocation()) if (symbol->getQualifier().hasLocation())
builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation); builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation);
if (symbol->getQualifier().hasIndex()) if (symbol->getQualifier().hasIndex())
@ -3044,7 +3243,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
} }
} }
addDecoration(id, TranslateInvariantDecoration(symbol->getType())); addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier()));
if (symbol->getQualifier().hasStream()) if (symbol->getQualifier().hasStream())
builder.addDecoration(id, spv::DecorationStream, symbol->getQualifier().layoutStream); builder.addDecoration(id, spv::DecorationStream, symbol->getQualifier().layoutStream);
if (symbol->getQualifier().hasSet()) if (symbol->getQualifier().hasSet())

View file

@ -281,18 +281,23 @@ Id Builder::makeMatrixType(Id component, int cols, int rows)
return type->getResultId(); return type->getResultId();
} }
Id Builder::makeArrayType(Id element, unsigned size) // TODO: performance: track arrays per stride
// If a stride is supplied (non-zero) make an array.
// If no stride (0), reuse previous array types.
Id Builder::makeArrayType(Id element, unsigned size, int stride)
{ {
// First, we need a constant instruction for the size // First, we need a constant instruction for the size
Id sizeId = makeUintConstant(size); Id sizeId = makeUintConstant(size);
// try to find existing type
Instruction* type; Instruction* type;
for (int t = 0; t < (int)groupedTypes[OpTypeArray].size(); ++t) { if (stride == 0) {
type = groupedTypes[OpTypeArray][t]; // try to find existing type
if (type->getIdOperand(0) == element && for (int t = 0; t < (int)groupedTypes[OpTypeArray].size(); ++t) {
type->getIdOperand(1) == sizeId) type = groupedTypes[OpTypeArray][t];
return type->getResultId(); if (type->getIdOperand(0) == element &&
type->getIdOperand(1) == sizeId)
return type->getResultId();
}
} }
// not found, make it // not found, make it
@ -435,7 +440,7 @@ Op Builder::getMostBasicTypeClass(Id typeId) const
} }
} }
int Builder::getNumTypeComponents(Id typeId) const int Builder::getNumTypeConstituents(Id typeId) const
{ {
Instruction* instr = module.getInstruction(typeId); Instruction* instr = module.getInstruction(typeId);
@ -447,7 +452,10 @@ int Builder::getNumTypeComponents(Id typeId) const
return 1; return 1;
case OpTypeVector: case OpTypeVector:
case OpTypeMatrix: case OpTypeMatrix:
case OpTypeArray:
return instr->getImmediateOperand(1); return instr->getImmediateOperand(1);
case OpTypeStruct:
return instr->getNumOperands();
default: default:
assert(0); assert(0);
return 1; return 1;
@ -1174,9 +1182,9 @@ void Builder::promoteScalar(Decoration precision, Id& left, Id& right)
int direction = getNumComponents(right) - getNumComponents(left); int direction = getNumComponents(right) - getNumComponents(left);
if (direction > 0) if (direction > 0)
left = smearScalar(precision, left, getTypeId(right)); left = smearScalar(precision, left, makeVectorType(getTypeId(left), getNumComponents(right)));
else if (direction < 0) else if (direction < 0)
right = smearScalar(precision, right, getTypeId(left)); right = smearScalar(precision, right, makeVectorType(getTypeId(right), getNumComponents(left)));
return; return;
} }
@ -1185,6 +1193,7 @@ void Builder::promoteScalar(Decoration precision, Id& left, Id& right)
Id Builder::smearScalar(Decoration /*precision*/, Id scalar, Id vectorType) Id Builder::smearScalar(Decoration /*precision*/, Id scalar, Id vectorType)
{ {
assert(getNumComponents(scalar) == 1); assert(getNumComponents(scalar) == 1);
assert(getTypeId(scalar) == getScalarTypeId(vectorType));
int numComponents = getNumTypeComponents(vectorType); int numComponents = getNumTypeComponents(vectorType);
if (numComponents == 1) if (numComponents == 1)
@ -1365,14 +1374,12 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter
case Dim2D: case Dim2D:
case DimCube: case DimCube:
case DimRect: case DimRect:
case DimSubpassData:
numComponents = 2; numComponents = 2;
break; break;
case Dim3D: case Dim3D:
numComponents = 3; numComponents = 3;
break; break;
case DimSubpassData:
MissingFunctionality("input-attachment dim");
break;
default: default:
assert(0); assert(0);
@ -1410,88 +1417,79 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter
return query->getResultId(); return query->getResultId();
} }
// Comments in header // External comments in header.
Id Builder::createCompare(Decoration precision, Id value1, Id value2, bool equal) // Operates recursively to visit the composite's hierarchy.
Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, bool equal)
{ {
Id boolType = makeBoolType(); Id boolType = makeBoolType();
Id valueType = getTypeId(value1); Id valueType = getTypeId(value1);
assert(valueType == getTypeId(value2)); Id resultId;
assert(! isScalar(value1));
// Vectors int numConstituents = getNumTypeConstituents(valueType);
if (isVectorType(valueType)) { // Scalars and Vectors
Id boolVectorType = makeVectorType(boolType, getNumTypeComponents(valueType));
Id boolVector; if (isScalarType(valueType) || isVectorType(valueType)) {
assert(valueType == getTypeId(value2));
// These just need a single comparison, just have
// to figure out what it is.
Op op; Op op;
if (getMostBasicTypeClass(valueType) == OpTypeFloat) switch (getMostBasicTypeClass(valueType)) {
case OpTypeFloat:
op = equal ? OpFOrdEqual : OpFOrdNotEqual; op = equal ? OpFOrdEqual : OpFOrdNotEqual;
else break;
case OpTypeInt:
op = equal ? OpIEqual : OpINotEqual; op = equal ? OpIEqual : OpINotEqual;
break;
case OpTypeBool:
op = equal ? OpLogicalEqual : OpLogicalNotEqual;
precision = NoPrecision;
break;
}
boolVector = createBinOp(op, boolVectorType, value1, value2); if (isScalarType(valueType)) {
setPrecision(boolVector, precision); // scalar
resultId = createBinOp(op, boolType, value1, value2);
setPrecision(resultId, precision);
} else {
// vector
resultId = createBinOp(op, makeVectorType(boolType, numConstituents), value1, value2);
setPrecision(resultId, precision);
// reduce vector compares...
resultId = createUnaryOp(equal ? OpAll : OpAny, boolType, resultId);
}
// Reduce vector compares with any() and all(). return resultId;
op = equal ? OpAll : OpAny;
return createUnaryOp(op, boolType, boolVector);
} }
spv::MissingFunctionality("Composite comparison of non-vectors"); // Only structs, arrays, and matrices should be left.
// They share in common the reduction operation across their constituents.
assert(isAggregateType(valueType) || isMatrixType(valueType));
return NoResult; // Compare each pair of constituents
for (int constituent = 0; constituent < numConstituents; ++constituent) {
std::vector<unsigned> indexes(1, constituent);
Id constituentType1 = getContainedTypeId(getTypeId(value1), constituent);
Id constituentType2 = getContainedTypeId(getTypeId(value2), constituent);
Id constituent1 = createCompositeExtract(value1, constituentType1, indexes);
Id constituent2 = createCompositeExtract(value2, constituentType2, indexes);
// Recursively handle aggregates, which include matrices, arrays, and structures Id subResultId = createCompositeCompare(precision, constituent1, constituent2, equal);
// and accumulate the results.
// Matrices if (constituent == 0)
resultId = subResultId;
else
resultId = createBinOp(equal ? OpLogicalAnd : OpLogicalOr, boolType, resultId, subResultId);
}
// Arrays return resultId;
//int numElements;
//const llvm::ArrayType* arrayType = llvm::dyn_cast<llvm::ArrayType>(value1->getType());
//if (arrayType)
// numElements = (int)arrayType->getNumElements();
//else {
// // better be structure
// const llvm::StructType* structType = llvm::dyn_cast<llvm::StructType>(value1->getType());
// assert(structType);
// numElements = structType->getNumElements();
//}
//assert(numElements > 0);
//for (int element = 0; element < numElements; ++element) {
// // Get intermediate comparison values
// llvm::Value* element1 = builder.CreateExtractValue(value1, element, "element1");
// setInstructionPrecision(element1, precision);
// llvm::Value* element2 = builder.CreateExtractValue(value2, element, "element2");
// setInstructionPrecision(element2, precision);
// llvm::Value* subResult = createCompare(precision, element1, element2, equal, "comp");
// // Accumulate intermediate comparison
// if (element == 0)
// result = subResult;
// else {
// if (equal)
// result = builder.CreateAnd(result, subResult);
// else
// result = builder.CreateOr(result, subResult);
// setInstructionPrecision(result, precision);
// }
//}
//return result;
} }
// OpCompositeConstruct // OpCompositeConstruct
Id Builder::createCompositeConstruct(Id typeId, std::vector<Id>& constituents) Id Builder::createCompositeConstruct(Id typeId, std::vector<Id>& constituents)
{ {
assert(isAggregateType(typeId) || (getNumTypeComponents(typeId) > 1 && getNumTypeComponents(typeId) == (int)constituents.size())); assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 && getNumTypeConstituents(typeId) == (int)constituents.size()));
Instruction* op = new Instruction(getUniqueId(), typeId, OpCompositeConstruct); Instruction* op = new Instruction(getUniqueId(), typeId, OpCompositeConstruct);
for (int c = 0; c < (int)constituents.size(); ++c) for (int c = 0; c < (int)constituents.size(); ++c)
@ -2146,7 +2144,6 @@ void TbdFunctionality(const char* tbd)
void MissingFunctionality(const char* fun) void MissingFunctionality(const char* fun)
{ {
printf("Missing functionality: %s\n", fun); printf("Missing functionality: %s\n", fun);
exit(1);
} }
}; // end spv namespace }; // end spv namespace

View file

@ -102,7 +102,7 @@ public:
Id makeStructResultType(Id type0, Id type1); Id makeStructResultType(Id type0, Id type1);
Id makeVectorType(Id component, int size); Id makeVectorType(Id component, int size);
Id makeMatrixType(Id component, int cols, int rows); Id makeMatrixType(Id component, int cols, int rows);
Id makeArrayType(Id element, unsigned size); Id makeArrayType(Id element, unsigned size, int stride); // 0 means no stride decoration
Id makeRuntimeArray(Id element); Id makeRuntimeArray(Id element);
Id makeFunctionType(Id returnType, std::vector<Id>& paramTypes); Id makeFunctionType(Id returnType, std::vector<Id>& paramTypes);
Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format); Id makeImageType(Id sampledType, Dim, bool depth, bool arrayed, bool ms, unsigned sampled, ImageFormat format);
@ -116,29 +116,31 @@ public:
Op getTypeClass(Id typeId) const { return getOpCode(typeId); } Op getTypeClass(Id typeId) const { return getOpCode(typeId); }
Op getMostBasicTypeClass(Id typeId) const; Op getMostBasicTypeClass(Id typeId) const;
int getNumComponents(Id resultId) const { return getNumTypeComponents(getTypeId(resultId)); } int getNumComponents(Id resultId) const { return getNumTypeComponents(getTypeId(resultId)); }
int getNumTypeComponents(Id typeId) const; int getNumTypeConstituents(Id typeId) const;
int getNumTypeComponents(Id typeId) const { return getNumTypeConstituents(typeId); }
Id getScalarTypeId(Id typeId) const; Id getScalarTypeId(Id typeId) const;
Id getContainedTypeId(Id typeId) const; Id getContainedTypeId(Id typeId) const;
Id getContainedTypeId(Id typeId, int) const; Id getContainedTypeId(Id typeId, int) const;
StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); } StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); }
bool isPointer(Id resultId) const { return isPointerType(getTypeId(resultId)); } bool isPointer(Id resultId) const { return isPointerType(getTypeId(resultId)); }
bool isScalar(Id resultId) const { return isScalarType(getTypeId(resultId)); } bool isScalar(Id resultId) const { return isScalarType(getTypeId(resultId)); }
bool isVector(Id resultId) const { return isVectorType(getTypeId(resultId)); } bool isVector(Id resultId) const { return isVectorType(getTypeId(resultId)); }
bool isMatrix(Id resultId) const { return isMatrixType(getTypeId(resultId)); } bool isMatrix(Id resultId) const { return isMatrixType(getTypeId(resultId)); }
bool isAggregate(Id resultId) const { return isAggregateType(getTypeId(resultId)); } bool isAggregate(Id resultId) const { return isAggregateType(getTypeId(resultId)); }
bool isBoolType(Id typeId) const { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); } bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); }
bool isPointerType(Id typeId) const { return getTypeClass(typeId) == OpTypePointer; } bool isBoolType(Id typeId) const { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
bool isScalarType(Id typeId) const { return getTypeClass(typeId) == OpTypeFloat || getTypeClass(typeId) == OpTypeInt || getTypeClass(typeId) == OpTypeBool; } bool isPointerType(Id typeId) const { return getTypeClass(typeId) == OpTypePointer; }
bool isVectorType(Id typeId) const { return getTypeClass(typeId) == OpTypeVector; } bool isScalarType(Id typeId) const { return getTypeClass(typeId) == OpTypeFloat || getTypeClass(typeId) == OpTypeInt || getTypeClass(typeId) == OpTypeBool; }
bool isMatrixType(Id typeId) const { return getTypeClass(typeId) == OpTypeMatrix; } bool isVectorType(Id typeId) const { return getTypeClass(typeId) == OpTypeVector; }
bool isStructType(Id typeId) const { return getTypeClass(typeId) == OpTypeStruct; } bool isMatrixType(Id typeId) const { return getTypeClass(typeId) == OpTypeMatrix; }
bool isArrayType(Id typeId) const { return getTypeClass(typeId) == OpTypeArray; } bool isStructType(Id typeId) const { return getTypeClass(typeId) == OpTypeStruct; }
bool isAggregateType(Id typeId) const { return isArrayType(typeId) || isStructType(typeId); } bool isArrayType(Id typeId) const { return getTypeClass(typeId) == OpTypeArray; }
bool isImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeImage; } bool isAggregateType(Id typeId) const { return isArrayType(typeId) || isStructType(typeId); }
bool isSamplerType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampler; } bool isImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeImage; }
bool isSampledImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampledImage; } bool isSamplerType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampler; }
bool isSampledImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampledImage; }
bool isConstantOpCode(Op opcode) const; bool isConstantOpCode(Op opcode) const;
bool isConstant(Id resultId) const { return isConstantOpCode(getOpCode(resultId)); } bool isConstant(Id resultId) const { return isConstantOpCode(getOpCode(resultId)); }
@ -149,7 +151,7 @@ public:
int getTypeNumColumns(Id typeId) const int getTypeNumColumns(Id typeId) const
{ {
assert(isMatrixType(typeId)); assert(isMatrixType(typeId));
return getNumTypeComponents(typeId); return getNumTypeConstituents(typeId);
} }
int getNumColumns(Id resultId) const { return getTypeNumColumns(getTypeId(resultId)); } int getNumColumns(Id resultId) const { return getTypeNumColumns(getTypeId(resultId)); }
int getTypeNumRows(Id typeId) const int getTypeNumRows(Id typeId) const
@ -264,11 +266,13 @@ public:
// (No true lvalue or stores are used.) // (No true lvalue or stores are used.)
Id createLvalueSwizzle(Id typeId, Id target, Id source, std::vector<unsigned>& channels); Id createLvalueSwizzle(Id typeId, Id target, Id source, std::vector<unsigned>& channels);
// If the value passed in is an instruction and the precision is not EMpNone, // If the value passed in is an instruction and the precision is not NoPrecision,
// it gets tagged with the requested precision. // it gets tagged with the requested precision.
void setPrecision(Id /* value */, Decoration /* precision */) void setPrecision(Id /* value */, Decoration precision)
{ {
// TODO if (precision != NoPrecision) {
;// TODO
}
} }
// Can smear a scalar to a vector for the following forms: // Can smear a scalar to a vector for the following forms:
@ -278,12 +282,17 @@ public:
// - promoteScalar(scalar, scalar) // do nothing // - promoteScalar(scalar, scalar) // do nothing
// Other forms are not allowed. // Other forms are not allowed.
// //
// Generally, the type of 'scalar' does not need to be the same type as the components in 'vector'.
// The type of the created vector is a vector of components of the same type as the scalar.
//
// Note: One of the arguments will change, with the result coming back that way rather than // Note: One of the arguments will change, with the result coming back that way rather than
// through the return value. // through the return value.
void promoteScalar(Decoration precision, Id& left, Id& right); void promoteScalar(Decoration precision, Id& left, Id& right);
// make a value by smearing the scalar to fill the type // Make a value by smearing the scalar to fill the type.
Id smearScalar(Decoration precision, Id scalarVal, Id); // vectorType should be the correct type for making a vector of scalarVal.
// (No conversions are done.)
Id smearScalar(Decoration precision, Id scalarVal, Id vectorType);
// Create a call to a built-in function. // Create a call to a built-in function.
Id createBuiltinCall(Decoration precision, Id resultType, Id builtins, int entryPoint, std::vector<Id>& args); Id createBuiltinCall(Decoration precision, Id resultType, Id builtins, int entryPoint, std::vector<Id>& args);
@ -316,7 +325,7 @@ public:
Id createBitFieldInsertCall(Decoration precision, Id, Id, Id, Id); Id createBitFieldInsertCall(Decoration precision, Id, Id, Id, Id);
// Reduction comparision for composites: For equal and not-equal resulting in a scalar. // Reduction comparision for composites: For equal and not-equal resulting in a scalar.
Id createCompare(Decoration precision, Id, Id, bool /* true if for equal, fales if for not-equal */); Id createCompositeCompare(Decoration precision, Id, Id, bool /* true if for equal, false if for not-equal */);
// OpCompositeConstruct // OpCompositeConstruct
Id createCompositeConstruct(Id typeId, std::vector<Id>& constituents); Id createCompositeConstruct(Id typeId, std::vector<Id>& constituents);

View file

@ -300,7 +300,12 @@ public:
Instruction* getInstruction(Id id) const { return idToInstruction[id]; } Instruction* getInstruction(Id id) const { return idToInstruction[id]; }
spv::Id getTypeId(Id resultId) const { return idToInstruction[resultId]->getTypeId(); } spv::Id getTypeId(Id resultId) const { return idToInstruction[resultId]->getTypeId(); }
StorageClass getStorageClass(Id typeId) const { return (StorageClass)idToInstruction[typeId]->getImmediateOperand(0); } StorageClass getStorageClass(Id typeId) const
{
assert(idToInstruction[typeId]->getOpCode() == spv::OpTypePointer);
return (StorageClass)idToInstruction[typeId]->getImmediateOperand(0);
}
void dump(std::vector<unsigned int>& out) const void dump(std::vector<unsigned int>& out) const
{ {
for (int f = 0; f < (int)functions.size(); ++f) for (int f = 0; f < (int)functions.size(); ++f)

View file

@ -827,7 +827,7 @@ int C_DECL main(int argc, char* argv[])
// Print out all the resulting infologs // Print out all the resulting infologs
for (int w = 0; w < NumWorkItems; ++w) { for (int w = 0; w < NumWorkItems; ++w) {
if (Work[w]) { if (Work[w]) {
if (printShaderNames) if (printShaderNames || Work[w]->results.size() > 0)
PutsIfNonEmpty(Work[w]->name.c_str()); PutsIfNonEmpty(Work[w]->name.c_str());
PutsIfNonEmpty(Work[w]->results.c_str()); PutsIfNonEmpty(Work[w]->results.c_str());
delete Work[w]; delete Work[w];

View file

@ -43,3 +43,8 @@ void barWxyz()
ivec4 t42 = texelFetch(ismsa, ivec3(2), samp); ivec4 t42 = texelFetch(ismsa, ivec3(2), samp);
uvec4 t43 = texelFetch(usmsa, p3, samp); uvec4 t43 = texelFetch(usmsa, p3, samp);
} }
int primitiveID()
{
return gl_PrimitiveID;
}

View file

@ -37,7 +37,7 @@ struct s {
}; };
in s badout; // ERROR, can't contain a sampler in s badout; // ERROR, can't contain a sampler
// ERROR, can't have int in struct without flat
struct S2 { struct S2 {
vec3 c; vec3 c;
float f; float f;

View file

@ -39,3 +39,5 @@ void foo()
; ;
} }
} }
layout(vertices = 0) out; // ERROR, can't be 0

View file

@ -146,3 +146,8 @@ void interp()
interpolateAtCentroid(sampInArray[2].xy); interpolateAtCentroid(sampInArray[2].xy);
interpolateAtSample(sampInArray[2].x.x, 2); interpolateAtSample(sampInArray[2].x.x, 2);
} }
int layer()
{
return gl_Layer;
}

View file

@ -1,3 +1,4 @@
100Limits.vert
ERROR: 0:24: 'limitation' : while loops not available ERROR: 0:24: 'limitation' : while loops not available
ERROR: 0:26: 'limitation' : do-while loops not available ERROR: 0:26: 'limitation' : do-while loops not available
ERROR: 0:28: 'limitations' : inductive-loop init-declaration requires the form "type-specifier loop-index = constant-expression" ERROR: 0:28: 'limitations' : inductive-loop init-declaration requires the form "type-specifier loop-index = constant-expression"

View file

@ -101,6 +101,11 @@ ERROR: node is still EOpNull!
0:44 'usmsa' (uniform usampler2DMSArray) 0:44 'usmsa' (uniform usampler2DMSArray)
0:44 'p3' (flat in 3-component vector of int) 0:44 'p3' (flat in 3-component vector of int)
0:44 'samp' (flat in int) 0:44 'samp' (flat in int)
0:47 Function Definition: primitiveID( (global int)
0:47 Function Parameters:
0:49 Sequence
0:49 Branch: Return with expression
0:49 'gl_PrimitiveID' (flat in int PrimitiveID)
0:? Linker Objects 0:? Linker Objects
0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord) 0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord) 0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
@ -216,6 +221,11 @@ ERROR: node is still EOpNull!
0:44 'usmsa' (uniform usampler2DMSArray) 0:44 'usmsa' (uniform usampler2DMSArray)
0:44 'p3' (flat in 3-component vector of int) 0:44 'p3' (flat in 3-component vector of int)
0:44 'samp' (flat in int) 0:44 'samp' (flat in int)
0:47 Function Definition: primitiveID( (global int)
0:47 Function Parameters:
0:49 Sequence
0:49 Branch: Return with expression
0:49 'gl_PrimitiveID' (flat in int PrimitiveID)
0:? Linker Objects 0:? Linker Objects
0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord) 0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)
0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord) 0:? 'gl_FragCoord' (gl_FragCoord 4-component vector of float FragCoord)

View file

@ -586,7 +586,7 @@ ERROR: 1 compilation errors. No code generated.
Shader version: 400 Shader version: 400
vertices = 0 vertices = -1
ERROR: node is still EOpNull! ERROR: node is still EOpNull!
0:8 Function Definition: main( (global void) 0:8 Function Definition: main( (global void)
0:8 Function Parameters: 0:8 Function Parameters:
@ -603,7 +603,8 @@ ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size
ERROR: 0:26: 'gl_PointSize' : no such field in structure ERROR: 0:26: 'gl_PointSize' : no such field in structure
ERROR: 0:26: 'assign' : cannot convert from 'temp float' to 'temp block{out 4-component vector of float Position gl_Position}' ERROR: 0:26: 'assign' : cannot convert from 'temp float' to 'temp block{out 4-component vector of float Position gl_Position}'
ERROR: 0:29: 'out' : type must be an array: outf ERROR: 0:29: 'out' : type must be an array: outf
ERROR: 6 compilation errors. No code generated. ERROR: 0:43: 'vertices' : must be greater than 0
ERROR: 7 compilation errors. No code generated.
Shader version: 420 Shader version: 420

View file

@ -4,6 +4,7 @@ ERROR: 0:30: 'noperspective' : Reserved word.
ERROR: 0:30: 'noperspective' : not supported with this profile: es ERROR: 0:30: 'noperspective' : not supported with this profile: es
ERROR: 0:31: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: bads ERROR: 0:31: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: bads
ERROR: 0:32: 'uint' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type ERROR: 0:32: 'uint' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type
ERROR: 0:39: 'structure' : must be qualified as flat in
ERROR: 0:39: 'structure' : non-uniform struct contains a sampler or image: badout ERROR: 0:39: 'structure' : non-uniform struct contains a sampler or image: badout
ERROR: 0:60: 'texel offset' : argument must be compile-time constant ERROR: 0:60: 'texel offset' : argument must be compile-time constant
ERROR: 0:62: 'texel offset' : argument must be compile-time constant ERROR: 0:62: 'texel offset' : argument must be compile-time constant
@ -43,7 +44,7 @@ ERROR: 0:157: 'invariant' : can only apply to an output
ERROR: 0:158: 'invariant' : can only apply to an output ERROR: 0:158: 'invariant' : can only apply to an output
ERROR: 0:160: 'imageBuffer' : Reserved word. ERROR: 0:160: 'imageBuffer' : Reserved word.
ERROR: 0:160: '' : syntax error ERROR: 0:160: '' : syntax error
ERROR: 44 compilation errors. No code generated. ERROR: 45 compilation errors. No code generated.
Shader version: 300 Shader version: 300

View file

@ -12,8 +12,8 @@ ERROR: 7 compilation errors. No code generated.
Shader version: 410 Shader version: 410
invocations = 0 invocations = -1
max_vertices = 0 max_vertices = -1
input primitive = none input primitive = none
output primitive = none output primitive = none
ERROR: node is still EOpNull! ERROR: node is still EOpNull!
@ -65,8 +65,8 @@ ERROR: Linking geometry stage: At least one shader must specify an output layout
ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value) ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value)
Shader version: 410 Shader version: 410
invocations = 0 invocations = 1
max_vertices = 0 max_vertices = -1
input primitive = none input primitive = none
output primitive = none output primitive = none
ERROR: node is still EOpNull! ERROR: node is still EOpNull!

View file

@ -5,7 +5,7 @@ ERROR: 1 compilation errors. No code generated.
Shader version: 400 Shader version: 400
vertices = 0 vertices = -1
ERROR: node is still EOpNull! ERROR: node is still EOpNull!
0:8 Function Definition: main( (global void) 0:8 Function Definition: main( (global void)
0:8 Function Parameters: 0:8 Function Parameters:
@ -20,7 +20,7 @@ Linked tessellation control stage:
ERROR: Linking tessellation control stage: At least one shader must specify an output layout(vertices=...) ERROR: Linking tessellation control stage: At least one shader must specify an output layout(vertices=...)
Shader version: 400 Shader version: 400
vertices = 0 vertices = -1
ERROR: node is still EOpNull! ERROR: node is still EOpNull!
0:8 Function Definition: main( (global void) 0:8 Function Definition: main( (global void)
0:8 Function Parameters: 0:8 Function Parameters:

View file

@ -10,8 +10,8 @@ ERROR: 6 compilation errors. No code generated.
Shader version: 420 Shader version: 420
invocations = 0 invocations = -1
max_vertices = 0 max_vertices = -1
input primitive = triangles input primitive = triangles
output primitive = none output primitive = none
ERROR: node is still EOpNull! ERROR: node is still EOpNull!
@ -137,8 +137,8 @@ ERROR: Linking geometry stage: At least one shader must specify an output layout
ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value) ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value)
Shader version: 420 Shader version: 420
invocations = 0 invocations = 1
max_vertices = 0 max_vertices = -1
input primitive = triangles input primitive = triangles
output primitive = none output primitive = none
ERROR: node is still EOpNull! ERROR: node is still EOpNull!

View file

@ -6,7 +6,8 @@ ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size
ERROR: 0:26: 'gl_PointSize' : no such field in structure ERROR: 0:26: 'gl_PointSize' : no such field in structure
ERROR: 0:26: 'assign' : cannot convert from 'temp float' to 'temp block{out 4-component vector of float Position gl_Position}' ERROR: 0:26: 'assign' : cannot convert from 'temp float' to 'temp block{out 4-component vector of float Position gl_Position}'
ERROR: 0:29: 'out' : type must be an array: outf ERROR: 0:29: 'out' : type must be an array: outf
ERROR: 6 compilation errors. No code generated. ERROR: 0:43: 'vertices' : must be greater than 0
ERROR: 7 compilation errors. No code generated.
Shader version: 420 Shader version: 420

View file

@ -5,8 +5,8 @@ ERROR: 1 compilation errors. No code generated.
Shader version: 420 Shader version: 420
invocations = 0 invocations = -1
max_vertices = 0 max_vertices = -1
input primitive = triangles input primitive = triangles
output primitive = none output primitive = none
ERROR: node is still EOpNull! ERROR: node is still EOpNull!
@ -44,8 +44,8 @@ ERROR: Linking geometry stage: At least one shader must specify an output layout
ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value) ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value)
Shader version: 420 Shader version: 420
invocations = 0 invocations = 1
max_vertices = 0 max_vertices = -1
input primitive = triangles input primitive = triangles
output primitive = none output primitive = none
ERROR: node is still EOpNull! ERROR: node is still EOpNull!

View file

@ -77,6 +77,11 @@ ERROR: node is still EOpNull!
0:147 0 (const int) 0:147 0 (const int)
0:147 Constant: 0:147 Constant:
0:147 2 (const int) 0:147 2 (const int)
0:150 Function Definition: layer( (global int)
0:150 Function Parameters:
0:152 Sequence
0:152 Branch: Return with expression
0:152 'gl_Layer' (flat in int Layer)
0:? Linker Objects 0:? Linker Objects
0:? 'a' (layout(location=4 component=2 ) smooth in 2-component vector of float) 0:? 'a' (layout(location=4 component=2 ) smooth in 2-component vector of float)
0:? 'b' (layout(location=4 component=1 ) smooth in float) 0:? 'b' (layout(location=4 component=1 ) smooth in float)
@ -145,6 +150,11 @@ ERROR: node is still EOpNull!
0:147 0 (const int) 0:147 0 (const int)
0:147 Constant: 0:147 Constant:
0:147 2 (const int) 0:147 2 (const int)
0:150 Function Definition: layer( (global int)
0:150 Function Parameters:
0:152 Sequence
0:152 Branch: Return with expression
0:152 'gl_Layer' (flat in int Layer)
0:? Linker Objects 0:? Linker Objects
0:? 'a' (layout(location=4 component=2 ) smooth in 2-component vector of float) 0:? 'a' (layout(location=4 component=2 ) smooth in 2-component vector of float)
0:? 'b' (layout(location=4 component=1 ) smooth in float) 0:? 'b' (layout(location=4 component=1 ) smooth in float)

View file

@ -2,8 +2,8 @@
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Shader version: 450 Shader version: 450
invocations = 0 invocations = -1
max_vertices = 0 max_vertices = -1
input primitive = none input primitive = none
output primitive = none output primitive = none
0:? Sequence 0:? Sequence
@ -40,8 +40,8 @@ ERROR: Linking geometry stage: At least one shader must specify an output layout
ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value) ERROR: Linking geometry stage: At least one shader must specify a layout(max_vertices = value)
Shader version: 450 Shader version: 450
invocations = 0 invocations = 1
max_vertices = 0 max_vertices = -1
input primitive = none input primitive = none
output primitive = none output primitive = none
0:? Sequence 0:? Sequence

View file

@ -2,7 +2,7 @@
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing. Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Shader version: 450 Shader version: 450
vertices = 0 vertices = -1
0:? Sequence 0:? Sequence
0:11 Function Definition: main( (global void) 0:11 Function Definition: main( (global void)
0:11 Function Parameters: 0:11 Function Parameters:
@ -37,7 +37,7 @@ Linked tessellation control stage:
ERROR: Linking tessellation control stage: At least one shader must specify an output layout(vertices=...) ERROR: Linking tessellation control stage: At least one shader must specify an output layout(vertices=...)
Shader version: 450 Shader version: 450
vertices = 0 vertices = -1
0:? Sequence 0:? Sequence
0:11 Function Definition: main( (global void) 0:11 Function Definition: main( (global void)
0:11 Function Parameters: 0:11 Function Parameters:

View file

@ -257,6 +257,19 @@ ERROR: node is still EOpNull!
0:120 1.000000 0:120 1.000000
0:120 Constant: 0:120 Constant:
0:120 3 (const int) 0:120 3 (const int)
0:126 Function Definition: foo3( (global void)
0:126 Function Parameters:
0:128 Sequence
0:128 Sequence
0:128 move second child to first child (temp 3X2 matrix of float)
0:128 'r32' (temp 3X2 matrix of float)
0:128 Constant:
0:128 43.000000
0:128 64.000000
0:128 51.000000
0:128 76.000000
0:128 59.000000
0:128 88.000000
0:? Linker Objects 0:? Linker Objects
0:? 'a' (const int) 0:? 'a' (const int)
0:? 1 (const int) 0:? 1 (const int)
@ -331,6 +344,18 @@ ERROR: node is still EOpNull!
0:? 4.000000 0:? 4.000000
0:? 5.000000 0:? 5.000000
0:? 'a4' (global 2-element array of float) 0:? 'a4' (global 2-element array of float)
0:? 'mm2' (const 2X2 matrix of float)
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:? 'mm32' (const 3X2 matrix of float)
0:? 10.000000
0:? 11.000000
0:? 12.000000
0:? 13.000000
0:? 14.000000
0:? 15.000000
Linked fragment stage: Linked fragment stage:
@ -584,6 +609,19 @@ ERROR: node is still EOpNull!
0:120 1.000000 0:120 1.000000
0:120 Constant: 0:120 Constant:
0:120 3 (const int) 0:120 3 (const int)
0:126 Function Definition: foo3( (global void)
0:126 Function Parameters:
0:128 Sequence
0:128 Sequence
0:128 move second child to first child (temp 3X2 matrix of float)
0:128 'r32' (temp 3X2 matrix of float)
0:128 Constant:
0:128 43.000000
0:128 64.000000
0:128 51.000000
0:128 76.000000
0:128 59.000000
0:128 88.000000
0:? Linker Objects 0:? Linker Objects
0:? 'a' (const int) 0:? 'a' (const int)
0:? 1 (const int) 0:? 1 (const int)
@ -658,4 +696,16 @@ ERROR: node is still EOpNull!
0:? 4.000000 0:? 4.000000
0:? 5.000000 0:? 5.000000
0:? 'a4' (global 2-element array of float) 0:? 'a4' (global 2-element array of float)
0:? 'mm2' (const 2X2 matrix of float)
0:? 1.000000
0:? 2.000000
0:? 3.000000
0:? 4.000000
0:? 'mm32' (const 3X2 matrix of float)
0:? 10.000000
0:? 11.000000
0:? 12.000000
0:? 13.000000
0:? 14.000000
0:? 15.000000

View file

@ -18,8 +18,8 @@ ERROR: 1 compilation errors. No code generated.
Shader version: 150 Shader version: 150
invocations = 0 invocations = -1
max_vertices = 0 max_vertices = -1
input primitive = none input primitive = none
output primitive = points output primitive = points
ERROR: node is still EOpNull! ERROR: node is still EOpNull!
@ -29,8 +29,8 @@ ERROR: node is still EOpNull!
noMain2.geom noMain2.geom
Shader version: 150 Shader version: 150
invocations = 0 invocations = -1
max_vertices = 0 max_vertices = -1
input primitive = none input primitive = none
output primitive = line_strip output primitive = line_strip
0:? Sequence 0:? Sequence
@ -52,8 +52,8 @@ ERROR: Linking fragment stage: Multiple function bodies in multiple compilation
main( main(
Shader version: 150 Shader version: 150
invocations = 0 invocations = 1
max_vertices = 0 max_vertices = -1
input primitive = none input primitive = none
output primitive = points output primitive = points
ERROR: node is still EOpNull! ERROR: node is still EOpNull!

View file

@ -0,0 +1,35 @@
max_vertices_0.geom
Shader version: 330
invocations = -1
max_vertices = 0
input primitive = points
output primitive = triangle_strip
0:? Sequence
0:8 Function Definition: main( (global void)
0:8 Function Parameters:
0:10 Sequence
0:10 EndPrimitive (global void)
0:11 EndPrimitive (global void)
0:? Linker Objects
0:? 'v_geom_FragColor' (in 1-element array of 4-component vector of float)
0:? 'v_frag_FragColor' (layout(stream=0 ) out 4-component vector of float)
Linked geometry stage:
Shader version: 330
invocations = 1
max_vertices = 0
input primitive = points
output primitive = triangle_strip
0:? Sequence
0:8 Function Definition: main( (global void)
0:8 Function Parameters:
0:10 Sequence
0:10 EndPrimitive (global void)
0:11 EndPrimitive (global void)
0:? Linker Objects
0:? 'v_geom_FragColor' (in 1-element array of 4-component vector of float)
0:? 'v_frag_FragColor' (layout(stream=0 ) out 4-component vector of float)

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" EntryPoint Fragment 4 "main" 36
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source ESSL 100 Source ESSL 100
Name 4 "main" Name 4 "main"

View file

@ -7,12 +7,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 212 // Id's are bound by 214
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 78 17 68 98 182 183 184 185 185 171 EntryPoint Fragment 4 "main" 17 68 79 99 173 184 185 186 187
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
SourceExtension "GL_ARB_gpu_shader5" SourceExtension "GL_ARB_gpu_shader5"
@ -33,38 +33,38 @@ Linked fragment stage:
Name 55 "samp2DS" Name 55 "samp2DS"
Name 68 "io" Name 68 "io"
Name 72 "Sca" Name 72 "Sca"
Name 78 "i" Name 79 "i"
Name 86 "Isca" Name 87 "Isca"
Name 98 "uo" Name 99 "uo"
Name 102 "Usca" Name 103 "Usca"
Name 113 "a" Name 114 "a"
Name 117 "Scas" Name 118 "Scas"
Name 122 "f" Name 124 "f"
Name 131 "c" Name 133 "c"
Name 152 "a1" Name 154 "a1"
Name 155 "m43" Name 157 "m43"
Name 158 "b" Name 160 "b"
Name 165 "sampC" Name 167 "sampC"
Name 171 "gl_ClipDistance" Name 173 "gl_ClipDistance"
Name 181 "b" Name 183 "b"
Name 182 "fflat" Name 184 "fflat"
Name 183 "fsmooth" Name 185 "fsmooth"
Name 184 "fnop" Name 186 "fnop"
Name 185 "gl_Color" Name 187 "gl_Color"
Name 192 "bounds" Name 194 "bounds"
Name 193 "s2D" Name 195 "s2D"
Name 194 "s2DR" Name 196 "s2DR"
Name 198 "s2DRS" Name 200 "s2DRS"
Name 202 "s1D" Name 204 "s1D"
Name 203 "s2DS" Name 205 "s2DS"
Name 205 "f" Name 207 "f"
Name 207 "v2" Name 209 "v2"
Name 209 "v3" Name 211 "v3"
Name 211 "v4" Name 213 "v4"
Decorate 171(gl_ClipDistance) BuiltIn ClipDistance Decorate 173(gl_ClipDistance) BuiltIn ClipDistance
Decorate 182(fflat) Flat Decorate 184(fflat) Flat
Decorate 184(fnop) NoPerspective Decorate 186(fnop) NoPerspective
Decorate 192(bounds) Binding 0 Decorate 194(bounds) Binding 0
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
14: TypeFloat 32 14: TypeFloat 32
@ -107,94 +107,94 @@ Linked fragment stage:
71: TypePointer UniformConstant 70 71: TypePointer UniformConstant 70
72(Sca): 71(ptr) Variable UniformConstant 72(Sca): 71(ptr) Variable UniformConstant
74: 26(int) Constant 3 74: 26(int) Constant 3
77: TypePointer Input 15(fvec4) 78: TypePointer Input 15(fvec4)
78(i): 77(ptr) Variable Input 79(i): 78(ptr) Variable Input
83: TypeImage 26(int) Cube array sampled format:Unknown 84: TypeImage 26(int) Cube array sampled format:Unknown
84: TypeSampledImage 83 85: TypeSampledImage 84
85: TypePointer UniformConstant 84 86: TypePointer UniformConstant 85
86(Isca): 85(ptr) Variable UniformConstant 87(Isca): 86(ptr) Variable UniformConstant
89: 14(float) Constant 1060320051 90: 14(float) Constant 1060320051
90: TypeVector 26(int) 4 91: TypeVector 26(int) 4
95: TypeInt 32 0 96: TypeInt 32 0
96: TypeVector 95(int) 4 97: TypeVector 96(int) 4
97: TypePointer Output 96(ivec4) 98: TypePointer Output 97(ivec4)
98(uo): 97(ptr) Variable Output 99(uo): 98(ptr) Variable Output
99: TypeImage 95(int) Cube array sampled format:Unknown 100: TypeImage 96(int) Cube array sampled format:Unknown
100: TypeSampledImage 99 101: TypeSampledImage 100
101: TypePointer UniformConstant 100 102: TypePointer UniformConstant 101
102(Usca): 101(ptr) Variable UniformConstant 103(Usca): 102(ptr) Variable UniformConstant
108: 14(float) Constant 1071225242 109: 14(float) Constant 1071225242
112: TypePointer Private 39(fvec3) 113: TypePointer Private 39(fvec3)
113(a): 112(ptr) Variable Private 114(a): 113(ptr) Variable Private
114: TypeImage 14(float) Cube depth array sampled format:Unknown 115: TypeImage 14(float) Cube depth array sampled format:Unknown
115: TypeSampledImage 114 116: TypeSampledImage 115
116: TypePointer UniformConstant 115 117: TypePointer UniformConstant 116
117(Scas): 116(ptr) Variable UniformConstant 118(Scas): 117(ptr) Variable UniformConstant
121: TypePointer Function 14(float) 123: TypePointer Function 14(float)
125: 95(int) Constant 1 127: 96(int) Constant 1
126: TypePointer Input 14(float) 128: TypePointer Input 14(float)
130: TypePointer Function 90(ivec4) 132: TypePointer Function 91(ivec4)
134: 14(float) Constant 1036831949 136: 14(float) Constant 1036831949
135: 39(fvec3) ConstantComposite 134 134 134
136: 14(float) Constant 1045220557
137: 39(fvec3) ConstantComposite 136 136 136 137: 39(fvec3) ConstantComposite 136 136 136
153: TypeMatrix 39(fvec3) 4 138: 14(float) Constant 1045220557
154: TypePointer Function 153 139: 39(fvec3) ConstantComposite 138 138 138
159: 14(float) Constant 1073741824 155: TypeMatrix 39(fvec3) 4
162: TypeImage 14(float) Cube sampled format:Unknown 156: TypePointer Function 155
163: TypeSampledImage 162 161: 14(float) Constant 1073741824
164: TypePointer UniformConstant 163 164: TypeImage 14(float) Cube sampled format:Unknown
165(sampC): 164(ptr) Variable UniformConstant 165: TypeSampledImage 164
168: 95(int) Constant 4 166: TypePointer UniformConstant 165
169: TypeArray 14(float) 168 167(sampC): 166(ptr) Variable UniformConstant
170: TypePointer Input 169 170: 96(int) Constant 4
171(gl_ClipDistance): 170(ptr) Variable Input 171: TypeArray 14(float) 170
174: TypePointer Output 14(float) 172: TypePointer Input 171
180: TypePointer Private 14(float) 173(gl_ClipDistance): 172(ptr) Variable Input
181(b): 180(ptr) Variable Private 176: TypePointer Output 14(float)
182(fflat): 126(ptr) Variable Input 182: TypePointer Private 14(float)
183(fsmooth): 126(ptr) Variable Input 183(b): 182(ptr) Variable Private
184(fnop): 126(ptr) Variable Input 184(fflat): 128(ptr) Variable Input
185(gl_Color): 77(ptr) Variable Input 185(fsmooth): 128(ptr) Variable Input
186: 95(int) Constant 3 186(fnop): 128(ptr) Variable Input
187: TypeArray 26(int) 186 187(gl_Color): 78(ptr) Variable Input
188: 26(int) Constant 10 188: 96(int) Constant 3
189: 26(int) Constant 23 189: TypeArray 26(int) 188
190: 26(int) Constant 32 190: 26(int) Constant 10
191: 187 ConstantComposite 188 189 190 191: 26(int) Constant 23
192(bounds): 20(ptr) Variable UniformConstant 192: 26(int) Constant 32
193(s2D): 20(ptr) Variable UniformConstant 193: 189 ConstantComposite 190 191 192
194(s2DR): 46(ptr) Variable UniformConstant 194(bounds): 20(ptr) Variable UniformConstant
195: TypeImage 14(float) Rect depth sampled format:Unknown 195(s2D): 20(ptr) Variable UniformConstant
196: TypeSampledImage 195 196(s2DR): 46(ptr) Variable UniformConstant
197: TypePointer UniformConstant 196 197: TypeImage 14(float) Rect depth sampled format:Unknown
198(s2DRS): 197(ptr) Variable UniformConstant 198: TypeSampledImage 197
199: TypeImage 14(float) 1D sampled format:Unknown 199: TypePointer UniformConstant 198
200: TypeSampledImage 199 200(s2DRS): 199(ptr) Variable UniformConstant
201: TypePointer UniformConstant 200 201: TypeImage 14(float) 1D sampled format:Unknown
202(s1D): 201(ptr) Variable UniformConstant 202: TypeSampledImage 201
203(s2DS): 54(ptr) Variable UniformConstant 203: TypePointer UniformConstant 202
204: TypePointer UniformConstant 14(float) 204(s1D): 203(ptr) Variable UniformConstant
205(f): 204(ptr) Variable UniformConstant 205(s2DS): 54(ptr) Variable UniformConstant
206: TypePointer UniformConstant 23(fvec2) 206: TypePointer UniformConstant 14(float)
207(v2): 206(ptr) Variable UniformConstant 207(f): 206(ptr) Variable UniformConstant
208: TypePointer UniformConstant 39(fvec3) 208: TypePointer UniformConstant 23(fvec2)
209(v3): 208(ptr) Variable UniformConstant 209(v2): 208(ptr) Variable UniformConstant
210: TypePointer UniformConstant 15(fvec4) 210: TypePointer UniformConstant 39(fvec3)
211(v4): 210(ptr) Variable UniformConstant 211(v3): 210(ptr) Variable UniformConstant
212: TypePointer UniformConstant 15(fvec4)
213(v4): 212(ptr) Variable UniformConstant
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
166: 163 Load 165(sampC) 168: 165 Load 167(sampC)
167: 15(fvec4) ImageGather 166 137 30 169: 15(fvec4) ImageGather 168 139 30
Store 17(o) 167 Store 17(o) 169
172: 126(ptr) AccessChain 171(gl_ClipDistance) 74 174: 128(ptr) AccessChain 173(gl_ClipDistance) 74
173: 14(float) Load 172 175: 14(float) Load 174
175: 174(ptr) AccessChain 17(o) 125 177: 176(ptr) AccessChain 17(o) 127
Store 175 173 Store 177 175
176: 2 FunctionCall 6(bar3() 178: 2 FunctionCall 6(bar3()
177: 2 FunctionCall 8(bar4() 179: 2 FunctionCall 8(bar4()
178: 2 FunctionCall 10(bar5() 180: 2 FunctionCall 10(bar5()
179: 2 FunctionCall 12(bar6() 181: 2 FunctionCall 12(bar6()
Return Return
FunctionEnd FunctionEnd
6(bar3(): 2 Function None 3 6(bar3(): 2 Function None 3
@ -232,74 +232,76 @@ Linked fragment stage:
FunctionEnd FunctionEnd
10(bar5(): 2 Function None 3 10(bar5(): 2 Function None 3
11: Label 11: Label
122(f): 121(ptr) Variable Function 124(f): 123(ptr) Variable Function
131(c): 130(ptr) Variable Function 133(c): 132(ptr) Variable Function
73: 70 Load 72(Sca) 73: 70 Load 72(Sca)
75: 66(ivec3) ImageQuerySizeLod 73 74 75: 69 Image 73
Store 68(io) 75 76: 66(ivec3) ImageQuerySizeLod 75 74
76: 70 Load 72(Sca) Store 68(io) 76
79: 15(fvec4) Load 78(i) 77: 70 Load 72(Sca)
80: 15(fvec4) ImageSampleImplicitLod 76 79 80: 15(fvec4) Load 79(i)
81: 15(fvec4) Load 17(o) 81: 15(fvec4) ImageSampleImplicitLod 77 80
82: 15(fvec4) FAdd 81 80 82: 15(fvec4) Load 17(o)
Store 17(o) 82 83: 15(fvec4) FAdd 82 81
87: 84 Load 86(Isca) Store 17(o) 83
88: 15(fvec4) Load 78(i) 88: 85 Load 87(Isca)
91: 90(ivec4) ImageSampleImplicitLod 87 88 Bias 89 89: 15(fvec4) Load 79(i)
92: 66(ivec3) VectorShuffle 91 91 0 1 2 92: 91(ivec4) ImageSampleImplicitLod 88 89 Bias 90
93: 66(ivec3) Load 68(io) 93: 66(ivec3) VectorShuffle 92 92 0 1 2
94: 66(ivec3) IAdd 93 92 94: 66(ivec3) Load 68(io)
Store 68(io) 94 95: 66(ivec3) IAdd 94 93
103: 100 Load 102(Usca) Store 68(io) 95
104: 15(fvec4) Load 78(i) 104: 101 Load 103(Usca)
105: 96(ivec4) ImageSampleImplicitLod 103 104 105: 15(fvec4) Load 79(i)
Store 98(uo) 105 106: 97(ivec4) ImageSampleImplicitLod 104 105
106: 70 Load 72(Sca) Store 99(uo) 106
107: 15(fvec4) Load 78(i) 107: 70 Load 72(Sca)
109: 15(fvec4) ImageSampleExplicitLod 106 107 Lod 108 108: 15(fvec4) Load 79(i)
110: 15(fvec4) Load 17(o) 110: 15(fvec4) ImageSampleExplicitLod 107 108 Lod 109
111: 15(fvec4) FAdd 110 109 111: 15(fvec4) Load 17(o)
Store 17(o) 111 112: 15(fvec4) FAdd 111 110
118: 115 Load 117(Scas) Store 17(o) 112
119: 66(ivec3) ImageQuerySizeLod 118 74 119: 116 Load 118(Scas)
120: 39(fvec3) ConvertSToF 119 120: 115 Image 119
Store 113(a) 120 121: 66(ivec3) ImageQuerySizeLod 120 74
123: 115 Load 117(Scas) 122: 39(fvec3) ConvertSToF 121
124: 15(fvec4) Load 78(i) Store 114(a) 122
127: 126(ptr) AccessChain 78(i) 125 125: 116 Load 118(Scas)
128: 14(float) Load 127 126: 15(fvec4) Load 79(i)
129: 14(float) ImageSampleDrefImplicitLod 123 124 128 129: 128(ptr) AccessChain 79(i) 127
Store 122(f) 129 130: 14(float) Load 129
132: 84 Load 86(Isca) 131: 14(float) ImageSampleDrefImplicitLod 125 126 130
133: 15(fvec4) Load 78(i) Store 124(f) 131
138: 90(ivec4) ImageSampleExplicitLod 132 133 Grad 135 137 134: 85 Load 87(Isca)
Store 131(c) 138 135: 15(fvec4) Load 79(i)
139: 39(fvec3) Load 113(a) 140: 91(ivec4) ImageSampleExplicitLod 134 135 Grad 137 139
140: 14(float) Load 122(f) Store 133(c) 140
141: 90(ivec4) Load 131(c) 141: 39(fvec3) Load 114(a)
142: 15(fvec4) ConvertSToF 141 142: 14(float) Load 124(f)
143: 15(fvec4) CompositeConstruct 140 140 140 140 143: 91(ivec4) Load 133(c)
144: 15(fvec4) FAdd 143 142 144: 15(fvec4) ConvertSToF 143
145: 14(float) CompositeExtract 139 0 145: 15(fvec4) CompositeConstruct 142 142 142 142
146: 14(float) CompositeExtract 139 1 146: 15(fvec4) FAdd 145 144
147: 14(float) CompositeExtract 139 2 147: 14(float) CompositeExtract 141 0
148: 14(float) CompositeExtract 144 0 148: 14(float) CompositeExtract 141 1
149: 15(fvec4) CompositeConstruct 145 146 147 148 149: 14(float) CompositeExtract 141 2
150: 15(fvec4) Load 17(o) 150: 14(float) CompositeExtract 146 0
151: 15(fvec4) FAdd 150 149 151: 15(fvec4) CompositeConstruct 147 148 149 150
Store 17(o) 151 152: 15(fvec4) Load 17(o)
153: 15(fvec4) FAdd 152 151
Store 17(o) 153
Return Return
FunctionEnd FunctionEnd
12(bar6(): 2 Function None 3 12(bar6(): 2 Function None 3
13: Label 13: Label
152(a1): 121(ptr) Variable Function 154(a1): 123(ptr) Variable Function
155(m43): 154(ptr) Variable Function 157(m43): 156(ptr) Variable Function
158(b): 121(ptr) Variable Function 160(b): 123(ptr) Variable Function
156: 121(ptr) AccessChain 155(m43) 74 125 158: 123(ptr) AccessChain 157(m43) 74 127
157: 14(float) Load 156 159: 14(float) Load 158
Store 152(a1) 157 Store 154(a1) 159
160: 14(float) Load 152(a1) 162: 14(float) Load 154(a1)
161: 14(float) FMul 159 160 163: 14(float) FMul 161 162
Store 158(b) 161 Store 160(b) 163
Return Return
FunctionEnd FunctionEnd

View file

@ -5,12 +5,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 97 // Id's are bound by 100
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 43 28 33 33 EntryPoint Fragment 4 "main" 16 28 33 43
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 140 Source GLSL 140
Name 4 "main" Name 4 "main"
@ -22,41 +22,41 @@ Linked fragment stage:
Name 33 "gl_ClipDistance" Name 33 "gl_ClipDistance"
Name 43 "k" Name 43 "k"
Name 55 "sampR" Name 55 "sampR"
Name 62 "sampB" Name 63 "sampB"
Name 84 "samp2Da" Name 86 "samp2Da"
Name 88 "bn" Name 91 "bn"
MemberName 88(bn) 0 "matra" MemberName 91(bn) 0 "matra"
MemberName 88(bn) 1 "matca" MemberName 91(bn) 1 "matca"
MemberName 88(bn) 2 "matr" MemberName 91(bn) 2 "matr"
MemberName 88(bn) 3 "matc" MemberName 91(bn) 3 "matc"
MemberName 88(bn) 4 "matrdef" MemberName 91(bn) 4 "matrdef"
Name 90 "" Name 93 ""
Name 93 "bi" Name 96 "bi"
MemberName 93(bi) 0 "v" MemberName 96(bi) 0 "v"
Name 96 "bname" Name 99 "bname"
Decorate 16(gl_FrontFacing) BuiltIn FrontFacing Decorate 16(gl_FrontFacing) BuiltIn FrontFacing
Decorate 33(gl_ClipDistance) BuiltIn ClipDistance Decorate 33(gl_ClipDistance) BuiltIn ClipDistance
Decorate 87 ArrayStride 64 Decorate 89 ArrayStride 64
Decorate 87 ArrayStride 64 Decorate 90 ArrayStride 64
MemberDecorate 88(bn) 0 RowMajor MemberDecorate 91(bn) 0 RowMajor
MemberDecorate 88(bn) 0 Offset 0 MemberDecorate 91(bn) 0 Offset 0
MemberDecorate 88(bn) 0 MatrixStride 16 MemberDecorate 91(bn) 0 MatrixStride 16
MemberDecorate 88(bn) 1 ColMajor MemberDecorate 91(bn) 1 ColMajor
MemberDecorate 88(bn) 1 Offset 256 MemberDecorate 91(bn) 1 Offset 256
MemberDecorate 88(bn) 1 MatrixStride 16 MemberDecorate 91(bn) 1 MatrixStride 16
MemberDecorate 88(bn) 2 RowMajor MemberDecorate 91(bn) 2 RowMajor
MemberDecorate 88(bn) 2 Offset 512 MemberDecorate 91(bn) 2 Offset 512
MemberDecorate 88(bn) 2 MatrixStride 16 MemberDecorate 91(bn) 2 MatrixStride 16
MemberDecorate 88(bn) 3 ColMajor MemberDecorate 91(bn) 3 ColMajor
MemberDecorate 88(bn) 3 Offset 576 MemberDecorate 91(bn) 3 Offset 576
MemberDecorate 88(bn) 3 MatrixStride 16 MemberDecorate 91(bn) 3 MatrixStride 16
MemberDecorate 88(bn) 4 RowMajor MemberDecorate 91(bn) 4 RowMajor
MemberDecorate 88(bn) 4 Offset 640 MemberDecorate 91(bn) 4 Offset 640
MemberDecorate 88(bn) 4 MatrixStride 16 MemberDecorate 91(bn) 4 MatrixStride 16
Decorate 88(bn) Block Decorate 91(bn) Block
Decorate 92 ArrayStride 16 Decorate 95 ArrayStride 16
MemberDecorate 93(bi) 0 Offset 0 MemberDecorate 96(bi) 0 Offset 0
Decorate 93(bi) Block Decorate 96(bi) Block
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -92,31 +92,32 @@ Linked fragment stage:
53: TypeSampledImage 52 53: TypeSampledImage 52
54: TypePointer UniformConstant 53 54: TypePointer UniformConstant 53
55(sampR): 54(ptr) Variable UniformConstant 55(sampR): 54(ptr) Variable UniformConstant
57: TypeVector 34(int) 2 58: TypeVector 34(int) 2
59: TypeImage 34(int) Buffer sampled format:Unknown 60: TypeImage 34(int) Buffer sampled format:Unknown
60: TypeSampledImage 59 61: TypeSampledImage 60
61: TypePointer UniformConstant 60 62: TypePointer UniformConstant 61
62(sampB): 61(ptr) Variable UniformConstant 63(sampB): 62(ptr) Variable UniformConstant
67: TypeVector 6(float) 2 69: TypeVector 6(float) 2
70: 6(float) Constant 1120403456 72: 6(float) Constant 1120403456
72: 29(int) Constant 3 74: 29(int) Constant 3
80: TypeImage 6(float) 2D sampled format:Unknown 82: TypeImage 6(float) 2D sampled format:Unknown
81: TypeSampledImage 80 83: TypeSampledImage 82
82: TypeArray 81 72 84: TypeArray 83 74
83: TypePointer UniformConstant 82 85: TypePointer UniformConstant 84
84(samp2Da): 83(ptr) Variable UniformConstant 86(samp2Da): 85(ptr) Variable UniformConstant
85: TypeMatrix 26(fvec4) 4 87: TypeMatrix 26(fvec4) 4
86: 29(int) Constant 4 88: 29(int) Constant 4
87: TypeArray 85 86 89: TypeArray 87 88
88(bn): TypeStruct 87 87 85 85 85 90: TypeArray 87 88
89: TypePointer Uniform 88(bn) 91(bn): TypeStruct 89 90 87 87 87
90: 89(ptr) Variable Uniform 92: TypePointer Uniform 91(bn)
91: TypeVector 6(float) 3 93: 92(ptr) Variable Uniform
92: TypeArray 91(fvec3) 50 94: TypeVector 6(float) 3
93(bi): TypeStruct 92 95: TypeArray 94(fvec3) 50
94: TypeArray 93(bi) 86 96(bi): TypeStruct 95
95: TypePointer Uniform 94 97: TypeArray 96(bi) 88
96(bname): 95(ptr) Variable Uniform 98: TypePointer Uniform 97
99(bname): 98(ptr) Variable Uniform
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
13: 12(ptr) Variable Function 13: 12(ptr) Variable Function
@ -145,25 +146,27 @@ Linked fragment stage:
51: 40(ptr) AccessChain 28(o) 50 51: 40(ptr) AccessChain 28(o) 50
Store 51 49 Store 51 49
56: 53 Load 55(sampR) 56: 53 Load 55(sampR)
58: 57(ivec2) ImageQuerySize 56 57: 52 Image 56
63: 60 Load 62(sampB) 59: 58(ivec2) ImageQuerySize 57
64: 34(int) ImageQuerySize 63 64: 61 Load 63(sampB)
65: 57(ivec2) CompositeConstruct 64 64 65: 60 Image 64
66: 57(ivec2) IAdd 58 65 66: 34(int) ImageQuerySize 65
68: 67(fvec2) ConvertSToF 66 67: 58(ivec2) CompositeConstruct 66 66
69: 6(float) CompositeExtract 68 0 68: 58(ivec2) IAdd 59 67
71: 6(float) FDiv 69 70 70: 69(fvec2) ConvertSToF 68
73: 40(ptr) AccessChain 28(o) 72 71: 6(float) CompositeExtract 70 0
Store 73 71 73: 6(float) FDiv 71 72
74: 6(float) FunctionCall 8(foo() 75: 40(ptr) AccessChain 28(o) 74
75: 40(ptr) AccessChain 28(o) 50 Store 75 73
Store 75 74 76: 6(float) FunctionCall 8(foo()
77: 40(ptr) AccessChain 28(o) 50
Store 77 76
Return Return
FunctionEnd FunctionEnd
8(foo(): 6(float) Function None 7 8(foo(): 6(float) Function None 7
9: Label 9: Label
76: 6(float) Load 11(i1) 78: 6(float) Load 11(i1)
77: 6(float) Load 24(i2) 79: 6(float) Load 24(i2)
78: 6(float) FAdd 76 77 80: 6(float) FAdd 78 79
ReturnValue 78 ReturnValue 80
FunctionEnd FunctionEnd

View file

@ -10,9 +10,9 @@ Linked geometry stage:
Capability Geometry Capability Geometry
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 18 70 10 29 33 EntryPoint Geometry 4 "main" 10 18 29 33 47 49 51 70
ExecutionMode 4 InputTrianglesAdjacency ExecutionMode 4 InputTrianglesAdjacency
ExecutionMode 4 Invocations 0 ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip ExecutionMode 4 OutputTriangleStrip
ExecutionMode 4 OutputVertices 30 ExecutionMode 4 OutputVertices 30
Source GLSL 150 Source GLSL 150

View file

@ -10,7 +10,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 17 39 48 49 EntryPoint Vertex 4 "main" 13 17 39 48 49
Source GLSL 150 Source GLSL 150
Name 4 "main" Name 4 "main"
Name 11 "gl_PerVertex" Name 11 "gl_PerVertex"

View file

@ -10,7 +10,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 25 11 39 EntryPoint Vertex 4 "main" 11 23 25 33 39
Source ESSL 300 Source ESSL 300
Name 4 "main" Name 4 "main"
Name 8 "i" Name 8 "i"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 29 11 9 26 15 EntryPoint Fragment 4 "main" 9 11 15 26 29
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source ESSL 300 Source ESSL 300
Name 4 "main" Name 4 "main"

View file

@ -3,4 +3,244 @@ spv.300layout.vert
Linked vertex stage: Linked vertex stage:
Missing functionality: binary operation on matrix // Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 165
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 9 11 99 101 109 121 129 163 164
Source ESSL 300
Name 4 "main"
Name 9 "pos"
Name 11 "p"
Name 17 "Transform"
MemberName 17(Transform) 0 "M1"
MemberName 17(Transform) 1 "M2"
MemberName 17(Transform) 2 "N1"
MemberName 17(Transform) 3 "iuin"
Name 19 "tblock"
Name 45 "T3"
MemberName 45(T3) 0 "M3"
MemberName 45(T3) 1 "M4"
MemberName 45(T3) 2 "N2"
MemberName 45(T3) 3 "uv3a"
Name 47 ""
Name 79 "T2"
MemberName 79(T2) 0 "b"
MemberName 79(T2) 1 "t2m"
Name 81 ""
Name 99 "color"
Name 101 "c"
Name 109 "iout"
Name 115 "uiuin"
Name 121 "aiv2"
Name 127 "S"
MemberName 127(S) 0 "c"
MemberName 127(S) 1 "f"
Name 129 "s"
Name 163 "gl_VertexID"
Name 164 "gl_InstanceID"
Decorate 11(p) Location 3
MemberDecorate 17(Transform) 0 RowMajor
MemberDecorate 17(Transform) 0 Offset 0
MemberDecorate 17(Transform) 0 MatrixStride 16
MemberDecorate 17(Transform) 1 ColMajor
MemberDecorate 17(Transform) 1 Offset 64
MemberDecorate 17(Transform) 1 MatrixStride 16
MemberDecorate 17(Transform) 2 RowMajor
MemberDecorate 17(Transform) 2 Offset 128
MemberDecorate 17(Transform) 2 MatrixStride 16
MemberDecorate 17(Transform) 3 Offset 176
Decorate 17(Transform) Block
MemberDecorate 45(T3) 0 ColMajor
MemberDecorate 45(T3) 1 RowMajor
MemberDecorate 45(T3) 2 ColMajor
Decorate 45(T3) GLSLShared
Decorate 45(T3) Block
MemberDecorate 79(T2) 1 RowMajor
Decorate 79(T2) GLSLShared
Decorate 79(T2) Block
Decorate 101(c) Location 7
Decorate 109(iout) Flat
Decorate 121(aiv2) Location 9
Decorate 163(gl_VertexID) BuiltIn VertexId
Decorate 164(gl_InstanceID) BuiltIn InstanceId
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Output 7(fvec4)
9(pos): 8(ptr) Variable Output
10: TypePointer Input 7(fvec4)
11(p): 10(ptr) Variable Input
13: TypeMatrix 7(fvec4) 4
14: TypeVector 6(float) 3
15: TypeMatrix 14(fvec3) 3
16: TypeInt 32 1
17(Transform): TypeStruct 13 13 15 16(int)
18: TypePointer Uniform 17(Transform)
19(tblock): 18(ptr) Variable Uniform
20: 16(int) Constant 0
21: TypePointer Uniform 13
24: 16(int) Constant 1
40: TypeMatrix 14(fvec3) 2
41: TypeInt 32 0
42: TypeVector 41(int) 3
43: 41(int) Constant 4
44: TypeArray 42(ivec3) 43
45(T3): TypeStruct 13 13 40 44
46: TypePointer Uniform 45(T3)
47: 46(ptr) Variable Uniform
78: TypeBool
79(T2): TypeStruct 78(bool) 13
80: TypePointer Uniform 79(T2)
81: 80(ptr) Variable Uniform
98: TypePointer Output 14(fvec3)
99(color): 98(ptr) Variable Output
100: TypePointer Input 14(fvec3)
101(c): 100(ptr) Variable Input
103: 16(int) Constant 2
104: TypePointer Uniform 15
108: TypePointer Output 16(int)
109(iout): 108(ptr) Variable Output
110: 16(int) Constant 3
111: TypePointer Uniform 16(int)
114: TypePointer UniformConstant 41(int)
115(uiuin): 114(ptr) Variable UniformConstant
119: TypeVector 16(int) 2
120: TypePointer Input 119(ivec2)
121(aiv2): 120(ptr) Variable Input
122: 41(int) Constant 1
123: TypePointer Input 16(int)
127(S): TypeStruct 14(fvec3) 6(float)
128: TypePointer Output 127(S)
129(s): 128(ptr) Variable Output
132: 41(int) Constant 0
133: TypePointer Input 6(float)
136: TypePointer Output 6(float)
138: TypePointer Uniform 14(fvec3)
141: 6(float) Constant 1065353216
142: 14(fvec3) ConstantComposite 141 141 141
143: TypeVector 78(bool) 3
149: TypePointer Uniform 42(ivec3)
152: 41(int) Constant 5
153: 42(ivec3) ConstantComposite 152 152 152
163(gl_VertexID): 123(ptr) Variable Input
164(gl_InstanceID): 123(ptr) Variable Input
4(main): 2 Function None 3
5: Label
12: 7(fvec4) Load 11(p)
22: 21(ptr) AccessChain 19(tblock) 20
23: 13 Load 22
25: 21(ptr) AccessChain 19(tblock) 24
26: 13 Load 25
27: 7(fvec4) CompositeExtract 23 0
28: 7(fvec4) CompositeExtract 26 0
29: 7(fvec4) FAdd 27 28
30: 7(fvec4) CompositeExtract 23 1
31: 7(fvec4) CompositeExtract 26 1
32: 7(fvec4) FAdd 30 31
33: 7(fvec4) CompositeExtract 23 2
34: 7(fvec4) CompositeExtract 26 2
35: 7(fvec4) FAdd 33 34
36: 7(fvec4) CompositeExtract 23 3
37: 7(fvec4) CompositeExtract 26 3
38: 7(fvec4) FAdd 36 37
39: 13 CompositeConstruct 29 32 35 38
48: 21(ptr) AccessChain 47 24
49: 13 Load 48
50: 7(fvec4) CompositeExtract 39 0
51: 7(fvec4) CompositeExtract 49 0
52: 7(fvec4) FAdd 50 51
53: 7(fvec4) CompositeExtract 39 1
54: 7(fvec4) CompositeExtract 49 1
55: 7(fvec4) FAdd 53 54
56: 7(fvec4) CompositeExtract 39 2
57: 7(fvec4) CompositeExtract 49 2
58: 7(fvec4) FAdd 56 57
59: 7(fvec4) CompositeExtract 39 3
60: 7(fvec4) CompositeExtract 49 3
61: 7(fvec4) FAdd 59 60
62: 13 CompositeConstruct 52 55 58 61
63: 21(ptr) AccessChain 47 20
64: 13 Load 63
65: 7(fvec4) CompositeExtract 62 0
66: 7(fvec4) CompositeExtract 64 0
67: 7(fvec4) FAdd 65 66
68: 7(fvec4) CompositeExtract 62 1
69: 7(fvec4) CompositeExtract 64 1
70: 7(fvec4) FAdd 68 69
71: 7(fvec4) CompositeExtract 62 2
72: 7(fvec4) CompositeExtract 64 2
73: 7(fvec4) FAdd 71 72
74: 7(fvec4) CompositeExtract 62 3
75: 7(fvec4) CompositeExtract 64 3
76: 7(fvec4) FAdd 74 75
77: 13 CompositeConstruct 67 70 73 76
82: 21(ptr) AccessChain 81 24
83: 13 Load 82
84: 7(fvec4) CompositeExtract 77 0
85: 7(fvec4) CompositeExtract 83 0
86: 7(fvec4) FAdd 84 85
87: 7(fvec4) CompositeExtract 77 1
88: 7(fvec4) CompositeExtract 83 1
89: 7(fvec4) FAdd 87 88
90: 7(fvec4) CompositeExtract 77 2
91: 7(fvec4) CompositeExtract 83 2
92: 7(fvec4) FAdd 90 91
93: 7(fvec4) CompositeExtract 77 3
94: 7(fvec4) CompositeExtract 83 3
95: 7(fvec4) FAdd 93 94
96: 13 CompositeConstruct 86 89 92 95
97: 7(fvec4) VectorTimesMatrix 12 96
Store 9(pos) 97
102: 14(fvec3) Load 101(c)
105: 104(ptr) AccessChain 19(tblock) 103
106: 15 Load 105
107: 14(fvec3) VectorTimesMatrix 102 106
Store 99(color) 107
112: 111(ptr) AccessChain 19(tblock) 110
113: 16(int) Load 112
116: 41(int) Load 115(uiuin)
117: 16(int) Bitcast 116
118: 16(int) IAdd 113 117
124: 123(ptr) AccessChain 121(aiv2) 122
125: 16(int) Load 124
126: 16(int) IAdd 118 125
Store 109(iout) 126
130: 14(fvec3) Load 101(c)
131: 98(ptr) AccessChain 129(s) 20
Store 131 130
134: 133(ptr) AccessChain 11(p) 132
135: 6(float) Load 134
137: 136(ptr) AccessChain 129(s) 24
Store 137 135
139: 138(ptr) AccessChain 47 103 24
140: 14(fvec3) Load 139
144: 143(bvec3) FOrdNotEqual 140 142
145: 78(bool) Any 144
146: 78(bool) LogicalNot 145
SelectionMerge 148 None
BranchConditional 146 147 148
147: Label
150: 149(ptr) AccessChain 47 110 103
151: 42(ivec3) Load 150
154: 143(bvec3) INotEqual 151 153
155: 78(bool) Any 154
Branch 148
148: Label
156: 78(bool) Phi 145 5 155 147
SelectionMerge 158 None
BranchConditional 156 157 158
157: Label
159: 98(ptr) AccessChain 129(s) 20
160: 14(fvec3) Load 159
161: 14(fvec3) CompositeConstruct 141 141 141
162: 14(fvec3) FAdd 160 161
Store 159 162
Branch 158
158: Label
Return
FunctionEnd

View file

@ -10,7 +10,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 53 11 73 9 51 61 81 115 116 EntryPoint Vertex 4 "main" 9 11 51 53 61 73 81 115 116
Source ESSL 300 Source ESSL 300
Name 4 "main" Name 4 "main"
Name 9 "pos" Name 9 "pos"

View file

@ -12,7 +12,7 @@ Linked compute stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" EntryPoint GLCompute 4 "main" 53
ExecutionMode 4 LocalSize 16 32 4 ExecutionMode 4 LocalSize 16 32 4
Source ESSL 310 Source ESSL 310
Name 4 "main" Name 4 "main"

View file

@ -10,9 +10,9 @@ Linked geometry stage:
Capability Geometry Capability Geometry
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 20 13 EntryPoint Geometry 4 "main" 13 20
ExecutionMode 4 Triangles ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 0 ExecutionMode 4 Invocations 1
ExecutionMode 4 OutputTriangleStrip ExecutionMode 4 OutputTriangleStrip
ExecutionMode 4 OutputVertices 3 ExecutionMode 4 OutputVertices 3
Source GLSL 330 Source GLSL 330

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 50 44 11 96 69 119 56 EntryPoint Fragment 4 "main" 11 44 50 56 69 96 117 119
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 400 Source GLSL 400
SourceExtension "GL_ARB_separate_shader_objects" SourceExtension "GL_ARB_separate_shader_objects"
@ -163,7 +163,7 @@ Linked fragment stage:
7: Label 7: Label
16: 13 Load 15(u2drs) 16: 13 Load 15(u2drs)
17: 9(fvec4) Load 11(outp) 17: 9(fvec4) Load 11(outp)
26: 8(float) CompositeExtract 17 3 26: 8(float) CompositeExtract 17 2
27: 8(float) ImageSampleProjDrefExplicitLod 16 17 26 Grad ConstOffset 20 20 25 27: 8(float) ImageSampleProjDrefExplicitLod 16 17 26 Grad ConstOffset 20 20 25
31: 30(ptr) AccessChain 11(outp) 29 31: 30(ptr) AccessChain 11(outp) 29
32: 8(float) Load 31 32: 8(float) Load 31

View file

@ -12,7 +12,7 @@ Linked tessellation control stage:
Capability Tessellation Capability Tessellation
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint TessellationControl 4 "main" 52 79 83 84 87 88 91 92 EntryPoint TessellationControl 4 "main" 23 40 43 46 52 66 73 79 83 84 87 88 91 92
ExecutionMode 4 OutputVertices 4 ExecutionMode 4 OutputVertices 4
Source GLSL 400 Source GLSL 400
SourceExtension "GL_ARB_separate_shader_objects" SourceExtension "GL_ARB_separate_shader_objects"

View file

@ -12,7 +12,7 @@ Linked tessellation evaluation stage:
Capability Tessellation Capability Tessellation
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint TessellationEvaluation 4 "main" 77 68 81 82 86 90 93 94 97 EntryPoint TessellationEvaluation 4 "main" 21 38 41 47 53 61 68 77 81 82 86 90 93 94 97
ExecutionMode 4 Triangles ExecutionMode 4 Triangles
ExecutionMode 4 SpacingFractionalOdd ExecutionMode 4 SpacingFractionalOdd
ExecutionMode 4 VertexOrderCcw ExecutionMode 4 VertexOrderCcw

View file

@ -12,7 +12,7 @@ Linked geometry stage:
Capability Geometry Capability Geometry
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Geometry 4 "main" 14 23 46 EntryPoint Geometry 4 "main" 14 23 28 33 46
ExecutionMode 4 Triangles ExecutionMode 4 Triangles
ExecutionMode 4 Invocations 4 ExecutionMode 4 Invocations 4
ExecutionMode 4 OutputLineStrip ExecutionMode 4 OutputLineStrip

View file

@ -12,7 +12,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 12 23 44 45 34 61 62 EntryPoint Vertex 4 "main" 12 23 34 44 45 61 62
Source GLSL 430 Source GLSL 430
Name 4 "main" Name 4 "main"
Name 10 "gl_PerVertex" Name 10 "gl_PerVertex"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 77 38 43 EntryPoint Fragment 4 "main" 38 43 77
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 430 Source GLSL 430
Name 4 "main" Name 4 "main"

View file

@ -1,31 +1,36 @@
spv.Operations.frag spv.Operations.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage: Linked fragment stage:
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 418 // Id's are bound by 507
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" EntryPoint Fragment 4 "main" 483
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 450
Name 4 "main" Name 4 "main"
Name 9 "v" Name 9 "v"
Name 11 "uv4" Name 11 "uv4"
Name 20 "i" Name 20 "i"
Name 22 "ui" Name 22 "ui"
Name 172 "uf" Name 181 "ub41"
Name 219 "b" Name 188 "f"
Name 253 "ub41" Name 212 "uf"
Name 255 "ub42" Name 285 "u"
Name 318 "f" Name 288 "uui"
Name 397 "gl_FragColor" Name 305 "b"
Name 415 "uiv4" Name 342 "ub42"
Name 417 "ub" Name 483 "FragColor"
Name 501 "uiv4"
Name 503 "ub"
Name 506 "uuv4"
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -37,38 +42,45 @@ Linked fragment stage:
19: TypePointer Function 18(int) 19: TypePointer Function 18(int)
21: TypePointer UniformConstant 18(int) 21: TypePointer UniformConstant 18(int)
22(ui): 21(ptr) Variable UniformConstant 22(ui): 21(ptr) Variable UniformConstant
129: TypeInt 32 0 141: TypeInt 32 0
130: 129(int) Constant 0 142: 141(int) Constant 0
131: TypePointer Function 6(float) 143: TypePointer Function 6(float)
171: TypePointer UniformConstant 6(float) 178: TypeBool
172(uf): 171(ptr) Variable UniformConstant 179: TypeVector 178(bool) 4
217: TypeBool 180: TypePointer UniformConstant 179(bvec4)
218: TypePointer Function 217(bool) 181(ub41): 180(ptr) Variable UniformConstant
222: TypeVector 217(bool) 4 211: TypePointer UniformConstant 6(float)
252: TypePointer UniformConstant 222(bvec4) 212(uf): 211(ptr) Variable UniformConstant
253(ub41): 252(ptr) Variable UniformConstant 284: TypePointer Function 141(int)
255(ub42): 252(ptr) Variable UniformConstant 287: TypePointer UniformConstant 141(int)
309: 18(int) Constant 2 288(uui): 287(ptr) Variable UniformConstant
316: 18(int) Constant 1 304: TypePointer Function 178(bool)
347: TypeVector 6(float) 3 342(ub42): 180(ptr) Variable UniformConstant
366: 6(float) Constant 1073741824 396: 18(int) Constant 2
373: 6(float) Constant 1065353216 403: 18(int) Constant 1
378: 18(int) Constant 66 433: TypeVector 6(float) 3
384: 18(int) Constant 17 452: 6(float) Constant 1073741824
396: TypePointer Output 7(fvec4) 459: 6(float) Constant 1065353216
397(gl_FragColor): 396(ptr) Variable Output 464: 18(int) Constant 66
413: TypeVector 18(int) 4 470: 18(int) Constant 17
414: TypePointer UniformConstant 413(ivec4) 482: TypePointer Output 7(fvec4)
415(uiv4): 414(ptr) Variable UniformConstant 483(FragColor): 482(ptr) Variable Output
416: TypePointer UniformConstant 217(bool) 499: TypeVector 18(int) 4
417(ub): 416(ptr) Variable UniformConstant 500: TypePointer UniformConstant 499(ivec4)
501(uiv4): 500(ptr) Variable UniformConstant
502: TypePointer UniformConstant 178(bool)
503(ub): 502(ptr) Variable UniformConstant
504: TypeVector 141(int) 4
505: TypePointer UniformConstant 504(ivec4)
506(uuv4): 505(ptr) Variable UniformConstant
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(v): 8(ptr) Variable Function 9(v): 8(ptr) Variable Function
20(i): 19(ptr) Variable Function 20(i): 19(ptr) Variable Function
219(b): 218(ptr) Variable Function 188(f): 143(ptr) Variable Function
318(f): 131(ptr) Variable Function 285(u): 284(ptr) Variable Function
398: 8(ptr) Variable Function 305(b): 304(ptr) Variable Function
484: 8(ptr) Variable Function
12: 7(fvec4) Load 11(uv4) 12: 7(fvec4) Load 11(uv4)
13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12 13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
Store 9(v) 13 Store 9(v) 13
@ -193,362 +205,461 @@ Linked fragment stage:
114: 7(fvec4) FAdd 113 112 114: 7(fvec4) FAdd 113 112
Store 9(v) 114 Store 9(v) 114
115: 7(fvec4) Load 9(v) 115: 7(fvec4) Load 9(v)
116: 7(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 115 116: 7(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 115
117: 7(fvec4) Load 9(v) 117: 7(fvec4) Load 9(v)
118: 7(fvec4) FAdd 117 116 118: 7(fvec4) FAdd 117 116
Store 9(v) 118 Store 9(v) 118
119: 7(fvec4) Load 9(v) 119: 7(fvec4) Load 9(v)
120: 7(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 119 120: 7(fvec4) ExtInst 1(GLSL.std.450) 1(Round) 119
121: 7(fvec4) Load 9(v) 121: 7(fvec4) Load 9(v)
122: 7(fvec4) FAdd 121 120 122: 7(fvec4) FAdd 121 120
Store 9(v) 122 Store 9(v) 122
123: 7(fvec4) Load 9(v) 123: 7(fvec4) Load 9(v)
124: 7(fvec4) Load 9(v) 124: 7(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 123
125: 7(fvec4) FMod 123 124 125: 7(fvec4) Load 9(v)
126: 7(fvec4) Load 9(v) 126: 7(fvec4) FAdd 125 124
127: 7(fvec4) FAdd 126 125 Store 9(v) 126
Store 9(v) 127 127: 7(fvec4) Load 9(v)
128: 7(fvec4) Load 9(v) 128: 7(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 127
132: 131(ptr) AccessChain 9(v) 130 129: 7(fvec4) Load 9(v)
133: 6(float) Load 132 130: 7(fvec4) FAdd 129 128
134: 7(fvec4) CompositeConstruct 133 133 133 133 Store 9(v) 130
135: 7(fvec4) FMod 128 134 131: 7(fvec4) Load 9(v)
132: 7(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 131
133: 7(fvec4) Load 9(v)
134: 7(fvec4) FAdd 133 132
Store 9(v) 134
135: 7(fvec4) Load 9(v)
136: 7(fvec4) Load 9(v) 136: 7(fvec4) Load 9(v)
137: 7(fvec4) FAdd 136 135 137: 7(fvec4) FMod 135 136
Store 9(v) 137
138: 7(fvec4) Load 9(v) 138: 7(fvec4) Load 9(v)
139: 7(fvec4) Load 11(uv4) 139: 7(fvec4) FAdd 138 137
140: 7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 138 139 Store 9(v) 139
141: 7(fvec4) Load 9(v) 140: 7(fvec4) Load 9(v)
142: 7(fvec4) FAdd 141 140 144: 143(ptr) AccessChain 9(v) 142
Store 9(v) 142 145: 6(float) Load 144
143: 7(fvec4) Load 9(v) 146: 7(fvec4) CompositeConstruct 145 145 145 145
144: 7(fvec4) Load 11(uv4) 147: 7(fvec4) FMod 140 146
145: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 143 144
146: 7(fvec4) Load 9(v)
147: 7(fvec4) FAdd 146 145
Store 9(v) 147
148: 7(fvec4) Load 9(v) 148: 7(fvec4) Load 9(v)
149: 7(fvec4) Load 11(uv4) 149: 7(fvec4) FAdd 148 147
150: 7(fvec4) Load 11(uv4) Store 9(v) 149
151: 7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 148 149 150 150: 7(fvec4) Load 9(v)
151: 7(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 150 9(v)
152: 7(fvec4) Load 9(v) 152: 7(fvec4) Load 9(v)
153: 7(fvec4) FAdd 152 151 153: 7(fvec4) FAdd 152 151
Store 9(v) 153 Store 9(v) 153
154: 7(fvec4) Load 9(v) 154: 7(fvec4) Load 9(v)
155: 7(fvec4) Load 9(v) 155: 7(fvec4) Load 11(uv4)
156: 7(fvec4) Load 9(v) 156: 7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 154 155
157: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 154 155 156 157: 7(fvec4) Load 9(v)
158: 7(fvec4) Load 9(v) 158: 7(fvec4) FAdd 157 156
159: 7(fvec4) FAdd 158 157 Store 9(v) 158
Store 9(v) 159 159: 7(fvec4) Load 9(v)
160: 7(fvec4) Load 9(v) 160: 7(fvec4) Load 11(uv4)
161: 7(fvec4) Load 9(v) 161: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 159 160
162: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 160 161 162: 7(fvec4) Load 9(v)
163: 7(fvec4) Load 9(v) 163: 7(fvec4) FAdd 162 161
164: 7(fvec4) FAdd 163 162 Store 9(v) 163
Store 9(v) 164 164: 7(fvec4) Load 9(v)
165: 7(fvec4) Load 9(v) 165: 7(fvec4) Load 11(uv4)
166: 7(fvec4) Load 9(v) 166: 7(fvec4) Load 11(uv4)
167: 7(fvec4) Load 9(v) 167: 7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 164 165 166
168: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 165 166 167 168: 7(fvec4) Load 9(v)
169: 7(fvec4) Load 9(v) 169: 7(fvec4) FAdd 168 167
170: 7(fvec4) FAdd 169 168 Store 9(v) 169
Store 9(v) 170 170: 7(fvec4) Load 9(v)
173: 6(float) Load 172(uf) 171: 7(fvec4) Load 9(v)
172: 7(fvec4) Load 9(v)
173: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 170 171 172
174: 7(fvec4) Load 9(v) 174: 7(fvec4) Load 9(v)
175: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 173 174 175: 7(fvec4) FAdd 174 173
Store 9(v) 175
176: 7(fvec4) Load 9(v) 176: 7(fvec4) Load 9(v)
177: 7(fvec4) FAdd 176 175 177: 7(fvec4) Load 9(v)
Store 9(v) 177 182: 179(bvec4) Load 181(ub41)
178: 6(float) Load 172(uf) 183: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 176 177 182
179: 6(float) Load 172(uf)
180: 7(fvec4) Load 9(v)
181: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 178 179 180
182: 7(fvec4) Load 9(v)
183: 7(fvec4) FAdd 182 181
Store 9(v) 183
184: 7(fvec4) Load 9(v) 184: 7(fvec4) Load 9(v)
185: 7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 184 185: 7(fvec4) FAdd 184 183
Store 9(v) 185
186: 7(fvec4) Load 9(v) 186: 7(fvec4) Load 9(v)
187: 7(fvec4) FAdd 186 185 187: 7(fvec4) Load 9(v)
Store 9(v) 187 189: 6(float) Load 188(f)
188: 7(fvec4) Load 9(v) 190: 7(fvec4) CompositeConstruct 189 189 189 189
189: 7(fvec4) Load 9(v) 191: 7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 186 187 190
190: 7(fvec4) Load 9(v)
191: 7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 188 189 190
192: 7(fvec4) Load 9(v) 192: 7(fvec4) Load 9(v)
193: 7(fvec4) FAdd 192 191 193: 7(fvec4) FAdd 192 191
Store 9(v) 193 Store 9(v) 193
194: 7(fvec4) Load 9(v) 194: 7(fvec4) Load 9(v)
195: 7(fvec4) Load 9(v) 195: 7(fvec4) Load 11(uv4)
196: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 194 195 196: 7(fvec4) Load 9(v)
197: 7(fvec4) Load 9(v) 197: 7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 194 195 196
198: 7(fvec4) FAdd 197 196 198: 7(fvec4) Load 9(v)
Store 9(v) 198 199: 7(fvec4) FAdd 198 197
199: 7(fvec4) Load 9(v) Store 9(v) 199
200: 7(fvec4) Load 9(v) 200: 7(fvec4) Load 9(v)
201: 6(float) Load 172(uf) 201: 7(fvec4) Load 9(v)
202: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 199 200 201 202: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 200 201
203: 7(fvec4) Load 9(v) 203: 7(fvec4) Load 9(v)
204: 7(fvec4) FAdd 203 202 204: 7(fvec4) FAdd 203 202
Store 9(v) 204 Store 9(v) 204
205: 7(fvec4) Load 9(v) 205: 7(fvec4) Load 9(v)
206: 7(fvec4) DPdx 205 206: 7(fvec4) Load 9(v)
207: 7(fvec4) Load 9(v) 207: 7(fvec4) Load 9(v)
208: 7(fvec4) FAdd 207 206 208: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 205 206 207
Store 9(v) 208
209: 7(fvec4) Load 9(v) 209: 7(fvec4) Load 9(v)
210: 7(fvec4) DPdy 209 210: 7(fvec4) FAdd 209 208
211: 7(fvec4) Load 9(v) Store 9(v) 210
212: 7(fvec4) FAdd 211 210 213: 6(float) Load 212(uf)
Store 9(v) 212 214: 7(fvec4) Load 9(v)
213: 7(fvec4) Load 9(v) 215: 7(fvec4) CompositeConstruct 213 213 213 213
214: 7(fvec4) Fwidth 213 216: 7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 215 214
215: 7(fvec4) Load 9(v) 217: 7(fvec4) Load 9(v)
216: 7(fvec4) FAdd 215 214 218: 7(fvec4) FAdd 217 216
Store 9(v) 216 Store 9(v) 218
220: 7(fvec4) Load 9(v) 219: 6(float) Load 212(uf)
221: 7(fvec4) Load 11(uv4) 220: 6(float) Load 212(uf)
223: 222(bvec4) FOrdLessThan 220 221 221: 7(fvec4) Load 9(v)
224: 217(bool) Any 223 222: 7(fvec4) CompositeConstruct 219 219 219 219
Store 219(b) 224 223: 7(fvec4) CompositeConstruct 220 220 220 220
225: 217(bool) Load 219(b) 224: 7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 222 223 221
SelectionMerge 227 None 225: 7(fvec4) Load 9(v)
BranchConditional 225 226 227 226: 7(fvec4) FAdd 225 224
226: Label Store 9(v) 226
228: 7(fvec4) Load 9(v) 227: 7(fvec4) Load 9(v)
229: 7(fvec4) Load 11(uv4) 228: 7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 227
230: 222(bvec4) FOrdLessThanEqual 228 229 229: 7(fvec4) Load 9(v)
231: 217(bool) Any 230 230: 7(fvec4) FAdd 229 228
Branch 227 Store 9(v) 230
227: Label 231: 7(fvec4) Load 9(v)
232: 217(bool) Phi 225 5 231 226 232: 7(fvec4) Load 9(v)
Store 219(b) 232 233: 7(fvec4) Load 9(v)
233: 217(bool) Load 219(b) 234: 7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 231 232 233
SelectionMerge 235 None 235: 7(fvec4) Load 9(v)
BranchConditional 233 234 235 236: 7(fvec4) FAdd 235 234
234: Label Store 9(v) 236
236: 7(fvec4) Load 9(v) 237: 7(fvec4) Load 9(v)
237: 7(fvec4) Load 11(uv4) 238: 7(fvec4) Load 9(v)
238: 222(bvec4) FOrdGreaterThan 236 237 239: 7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 237 238
239: 217(bool) Any 238 240: 7(fvec4) Load 9(v)
Branch 235 241: 7(fvec4) FAdd 240 239
235: Label Store 9(v) 241
240: 217(bool) Phi 233 227 239 234 242: 7(fvec4) Load 9(v)
Store 219(b) 240 243: 7(fvec4) Load 9(v)
241: 217(bool) Load 219(b) 244: 6(float) Load 212(uf)
SelectionMerge 243 None 245: 7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 242 243 244
BranchConditional 241 242 243 246: 7(fvec4) Load 9(v)
242: Label 247: 7(fvec4) FAdd 246 245
244: 7(fvec4) Load 9(v) Store 9(v) 247
245: 7(fvec4) Load 11(uv4) 248: 7(fvec4) Load 9(v)
246: 222(bvec4) FOrdGreaterThanEqual 244 245 249: 7(fvec4) DPdx 248
247: 217(bool) Any 246 250: 7(fvec4) Load 9(v)
Branch 243 251: 7(fvec4) FAdd 250 249
243: Label Store 9(v) 251
248: 217(bool) Phi 241 235 247 242 252: 7(fvec4) Load 9(v)
Store 219(b) 248 253: 7(fvec4) DPdy 252
249: 217(bool) Load 219(b) 254: 7(fvec4) Load 9(v)
SelectionMerge 251 None 255: 7(fvec4) FAdd 254 253
BranchConditional 249 250 251 Store 9(v) 255
250: Label 256: 7(fvec4) Load 9(v)
254: 222(bvec4) Load 253(ub41) 257: 7(fvec4) Fwidth 256
256: 222(bvec4) Load 255(ub42) 258: 7(fvec4) Load 9(v)
257: 222(bvec4) IEqual 254 256 259: 7(fvec4) FAdd 258 257
258: 217(bool) Any 257 Store 9(v) 259
Branch 251 260: 18(int) Load 22(ui)
251: Label 261: 18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 260
259: 217(bool) Phi 249 243 258 250 262: 18(int) Load 20(i)
Store 219(b) 259 263: 18(int) IAdd 262 261
260: 217(bool) Load 219(b) Store 20(i) 263
SelectionMerge 262 None 264: 18(int) Load 20(i)
BranchConditional 260 261 262 265: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 264
261: Label 266: 18(int) Load 20(i)
263: 222(bvec4) Load 253(ub41) 267: 18(int) IAdd 266 265
264: 222(bvec4) Load 255(ub42) Store 20(i) 267
265: 222(bvec4) INotEqual 263 264 268: 18(int) Load 20(i)
266: 217(bool) Any 265 269: 18(int) Load 22(ui)
Branch 262 270: 18(int) ExtInst 1(GLSL.std.450) 39(SMin) 268 269
262: Label 271: 18(int) Load 20(i)
267: 217(bool) Phi 260 251 266 261 272: 18(int) IAdd 271 270
Store 219(b) 267 Store 20(i) 272
268: 217(bool) Load 219(b) 273: 18(int) Load 20(i)
269: 222(bvec4) Load 253(ub41) 274: 18(int) Load 22(ui)
270: 217(bool) Any 269 275: 18(int) ExtInst 1(GLSL.std.450) 42(SMax) 273 274
271: 217(bool) LogicalAnd 268 270 276: 18(int) Load 20(i)
Store 219(b) 271 277: 18(int) IAdd 276 275
272: 217(bool) Load 219(b) Store 20(i) 277
273: 222(bvec4) Load 253(ub41) 278: 18(int) Load 20(i)
274: 217(bool) All 273 279: 18(int) Load 22(ui)
275: 217(bool) LogicalAnd 272 274 280: 18(int) Load 22(ui)
Store 219(b) 275 281: 18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 278 279 280
276: 217(bool) Load 219(b) 282: 18(int) Load 20(i)
SelectionMerge 278 None 283: 18(int) IAdd 282 281
BranchConditional 276 277 278 Store 20(i) 283
277: Label 286: 141(int) Load 285(u)
279: 222(bvec4) Load 253(ub41) 289: 141(int) Load 288(uui)
280: 222(bvec4) LogicalNot 279 290: 141(int) ExtInst 1(GLSL.std.450) 38(UMin) 286 289
281: 217(bool) Any 280 291: 141(int) Load 285(u)
Branch 278 292: 141(int) IAdd 291 290
278: Label Store 285(u) 292
282: 217(bool) Phi 276 262 281 277 293: 141(int) Load 285(u)
Store 219(b) 282 294: 141(int) Load 288(uui)
283: 18(int) Load 20(i) 295: 141(int) ExtInst 1(GLSL.std.450) 41(UMax) 293 294
284: 18(int) Load 22(ui) 296: 141(int) Load 285(u)
285: 18(int) IAdd 283 284 297: 141(int) IAdd 296 295
286: 18(int) Load 20(i) Store 285(u) 297
287: 18(int) IMul 285 286 298: 141(int) Load 285(u)
288: 18(int) Load 22(ui) 299: 141(int) Load 288(uui)
289: 18(int) ISub 287 288 300: 141(int) Load 288(uui)
290: 18(int) Load 20(i) 301: 141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 298 299 300
291: 18(int) SDiv 289 290 302: 141(int) Load 285(u)
Store 20(i) 291 303: 141(int) IAdd 302 301
292: 18(int) Load 20(i) Store 285(u) 303
293: 18(int) Load 22(ui) 306: 6(float) Load 212(uf)
294: 18(int) SMod 292 293 307: 178(bool) IsNan 306
Store 20(i) 294 Store 305(b) 307
295: 18(int) Load 20(i) 308: 6(float) Load 188(f)
296: 18(int) Load 22(ui) 309: 178(bool) IsInf 308
297: 217(bool) IEqual 295 296 Store 305(b) 309
298: 217(bool) LogicalNot 297 310: 7(fvec4) Load 9(v)
SelectionMerge 300 None 311: 7(fvec4) Load 11(uv4)
BranchConditional 298 299 300 312: 179(bvec4) FOrdLessThan 310 311
299: Label 313: 178(bool) Any 312
301: 18(int) Load 20(i) Store 305(b) 313
302: 18(int) Load 22(ui) 314: 178(bool) Load 305(b)
303: 217(bool) INotEqual 301 302 SelectionMerge 316 None
304: 18(int) Load 20(i) BranchConditional 314 315 316
305: 18(int) Load 22(ui) 315: Label
306: 217(bool) IEqual 304 305 317: 7(fvec4) Load 9(v)
307: 217(bool) LogicalAnd 303 306 318: 7(fvec4) Load 11(uv4)
308: 18(int) Load 20(i) 319: 179(bvec4) FOrdLessThanEqual 317 318
310: 217(bool) INotEqual 308 309 320: 178(bool) Any 319
311: 217(bool) LogicalNotEqual 307 310 Branch 316
Branch 300 316: Label
300: Label 321: 178(bool) Phi 314 5 320 315
312: 217(bool) Phi 297 278 311 299 Store 305(b) 321
SelectionMerge 314 None 322: 178(bool) Load 305(b)
BranchConditional 312 313 314 SelectionMerge 324 None
313: Label BranchConditional 322 323 324
315: 18(int) Load 20(i) 323: Label
317: 18(int) IAdd 315 316 325: 7(fvec4) Load 9(v)
Store 20(i) 317 326: 7(fvec4) Load 11(uv4)
Branch 314 327: 179(bvec4) FOrdGreaterThan 325 326
314: Label 328: 178(bool) Any 327
319: 6(float) Load 172(uf) Branch 324
320: 6(float) Load 172(uf) 324: Label
321: 6(float) FAdd 319 320 329: 178(bool) Phi 322 316 328 323
322: 6(float) Load 172(uf) Store 305(b) 329
323: 6(float) FMul 321 322 330: 178(bool) Load 305(b)
324: 6(float) Load 172(uf) SelectionMerge 332 None
325: 6(float) FSub 323 324 BranchConditional 330 331 332
326: 6(float) Load 172(uf) 331: Label
327: 6(float) FDiv 325 326 333: 7(fvec4) Load 9(v)
Store 318(f) 327 334: 7(fvec4) Load 11(uv4)
328: 7(fvec4) Load 9(v) 335: 179(bvec4) FOrdGreaterThanEqual 333 334
329: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 328 336: 178(bool) Any 335
330: 6(float) Load 318(f) Branch 332
331: 6(float) FAdd 330 329 332: Label
Store 318(f) 331 337: 178(bool) Phi 330 324 336 331
332: 7(fvec4) Load 9(v) Store 305(b) 337
333: 7(fvec4) Load 9(v) 338: 178(bool) Load 305(b)
334: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 332 333 SelectionMerge 340 None
335: 6(float) Load 318(f) BranchConditional 338 339 340
336: 6(float) FAdd 335 334 339: Label
Store 318(f) 336 341: 179(bvec4) Load 181(ub41)
337: 7(fvec4) Load 9(v) 343: 179(bvec4) Load 342(ub42)
338: 7(fvec4) Load 9(v) 344: 179(bvec4) IEqual 341 343
339: 6(float) Dot 337 338 345: 178(bool) Any 344
340: 6(float) Load 318(f) Branch 340
341: 6(float) FAdd 340 339 340: Label
Store 318(f) 341 346: 178(bool) Phi 338 332 345 339
342: 6(float) Load 318(f) Store 305(b) 346
343: 6(float) Load 172(uf) 347: 178(bool) Load 305(b)
344: 6(float) FMul 342 343 SelectionMerge 349 None
345: 6(float) Load 318(f) BranchConditional 347 348 349
346: 6(float) FAdd 345 344 348: Label
Store 318(f) 346 350: 179(bvec4) Load 181(ub41)
348: 7(fvec4) Load 9(v) 351: 179(bvec4) Load 342(ub42)
349: 347(fvec3) VectorShuffle 348 348 0 1 2 352: 179(bvec4) INotEqual 350 351
350: 7(fvec4) Load 9(v) 353: 178(bool) Any 352
351: 347(fvec3) VectorShuffle 350 350 0 1 2 Branch 349
352: 347(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 349 351 349: Label
353: 6(float) CompositeExtract 352 0 354: 178(bool) Phi 347 340 353 348
354: 6(float) Load 318(f) Store 305(b) 354
355: 6(float) FAdd 354 353 355: 178(bool) Load 305(b)
Store 318(f) 355 356: 179(bvec4) Load 181(ub41)
356: 6(float) Load 318(f) 357: 178(bool) Any 356
357: 6(float) Load 172(uf) 358: 178(bool) LogicalAnd 355 357
358: 217(bool) FOrdEqual 356 357 Store 305(b) 358
359: 217(bool) LogicalNot 358 359: 178(bool) Load 305(b)
SelectionMerge 361 None 360: 179(bvec4) Load 181(ub41)
BranchConditional 359 360 361 361: 178(bool) All 360
360: Label 362: 178(bool) LogicalAnd 359 361
362: 6(float) Load 318(f) Store 305(b) 362
363: 6(float) Load 172(uf) 363: 178(bool) Load 305(b)
364: 217(bool) FOrdNotEqual 362 363 SelectionMerge 365 None
365: 6(float) Load 318(f) BranchConditional 363 364 365
367: 217(bool) FOrdNotEqual 365 366 364: Label
368: 217(bool) LogicalAnd 364 367 366: 179(bvec4) Load 181(ub41)
Branch 361 367: 179(bvec4) LogicalNot 366
361: Label 368: 178(bool) Any 367
369: 217(bool) Phi 358 314 368 360 Branch 365
SelectionMerge 371 None 365: Label
BranchConditional 369 370 371 369: 178(bool) Phi 363 349 368 364
370: Label Store 305(b) 369
372: 6(float) Load 318(f) 370: 18(int) Load 20(i)
374: 6(float) FAdd 372 373 371: 18(int) Load 22(ui)
Store 318(f) 374 372: 18(int) IAdd 370 371
Branch 371 373: 18(int) Load 20(i)
371: Label 374: 18(int) IMul 372 373
375: 18(int) Load 22(ui) 375: 18(int) Load 22(ui)
376: 18(int) Load 20(i) 376: 18(int) ISub 374 375
377: 18(int) BitwiseAnd 376 375 377: 18(int) Load 20(i)
Store 20(i) 377 378: 18(int) SDiv 376 377
Store 20(i) 378
379: 18(int) Load 20(i) 379: 18(int) Load 20(i)
380: 18(int) BitwiseOr 379 378 380: 18(int) Load 22(ui)
Store 20(i) 380 381: 18(int) SMod 379 380
381: 18(int) Load 22(ui) Store 20(i) 381
382: 18(int) Load 20(i) 382: 18(int) Load 20(i)
383: 18(int) BitwiseXor 382 381 383: 18(int) Load 22(ui)
Store 20(i) 383 384: 178(bool) IEqual 382 383
385: 18(int) Load 20(i) 385: 178(bool) LogicalNot 384
386: 18(int) SMod 385 384 SelectionMerge 387 None
Store 20(i) 386 BranchConditional 385 386 387
387: 18(int) Load 20(i) 386: Label
388: 18(int) ShiftRightArithmetic 387 309 388: 18(int) Load 20(i)
Store 20(i) 388 389: 18(int) Load 22(ui)
389: 18(int) Load 22(ui) 390: 178(bool) INotEqual 388 389
390: 18(int) Load 20(i) 391: 18(int) Load 20(i)
391: 18(int) ShiftLeftLogical 390 389 392: 18(int) Load 22(ui)
Store 20(i) 391 393: 178(bool) IEqual 391 392
392: 18(int) Load 20(i) 394: 178(bool) LogicalAnd 390 393
393: 18(int) Not 392 395: 18(int) Load 20(i)
Store 20(i) 393 397: 178(bool) INotEqual 395 396
394: 217(bool) Load 219(b) 398: 178(bool) LogicalNotEqual 394 397
395: 217(bool) LogicalNot 394 Branch 387
Store 219(b) 395 387: Label
399: 217(bool) Load 219(b) 399: 178(bool) Phi 384 365 398 386
SelectionMerge 401 None SelectionMerge 401 None
BranchConditional 399 400 410 BranchConditional 399 400 401
400: Label 400: Label
402: 18(int) Load 20(i) 402: 18(int) Load 20(i)
403: 6(float) ConvertSToF 402 404: 18(int) IAdd 402 403
404: 7(fvec4) CompositeConstruct 403 403 403 403 Store 20(i) 404
405: 6(float) Load 318(f)
406: 7(fvec4) CompositeConstruct 405 405 405 405
407: 7(fvec4) FAdd 404 406
408: 7(fvec4) Load 9(v)
409: 7(fvec4) FAdd 407 408
Store 398 409
Branch 401
410: Label
411: 7(fvec4) Load 9(v)
Store 398 411
Branch 401 Branch 401
401: Label 401: Label
412: 7(fvec4) Load 398 405: 6(float) Load 212(uf)
Store 397(gl_FragColor) 412 406: 6(float) Load 212(uf)
407: 6(float) FAdd 405 406
408: 6(float) Load 212(uf)
409: 6(float) FMul 407 408
410: 6(float) Load 212(uf)
411: 6(float) FSub 409 410
412: 6(float) Load 212(uf)
413: 6(float) FDiv 411 412
Store 188(f) 413
414: 7(fvec4) Load 9(v)
415: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 414
416: 6(float) Load 188(f)
417: 6(float) FAdd 416 415
Store 188(f) 417
418: 7(fvec4) Load 9(v)
419: 7(fvec4) Load 9(v)
420: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 418 419
421: 6(float) Load 188(f)
422: 6(float) FAdd 421 420
Store 188(f) 422
423: 7(fvec4) Load 9(v)
424: 7(fvec4) Load 9(v)
425: 6(float) Dot 423 424
426: 6(float) Load 188(f)
427: 6(float) FAdd 426 425
Store 188(f) 427
428: 6(float) Load 188(f)
429: 6(float) Load 212(uf)
430: 6(float) FMul 428 429
431: 6(float) Load 188(f)
432: 6(float) FAdd 431 430
Store 188(f) 432
434: 7(fvec4) Load 9(v)
435: 433(fvec3) VectorShuffle 434 434 0 1 2
436: 7(fvec4) Load 9(v)
437: 433(fvec3) VectorShuffle 436 436 0 1 2
438: 433(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 435 437
439: 6(float) CompositeExtract 438 0
440: 6(float) Load 188(f)
441: 6(float) FAdd 440 439
Store 188(f) 441
442: 6(float) Load 188(f)
443: 6(float) Load 212(uf)
444: 178(bool) FOrdEqual 442 443
445: 178(bool) LogicalNot 444
SelectionMerge 447 None
BranchConditional 445 446 447
446: Label
448: 6(float) Load 188(f)
449: 6(float) Load 212(uf)
450: 178(bool) FOrdNotEqual 448 449
451: 6(float) Load 188(f)
453: 178(bool) FOrdNotEqual 451 452
454: 178(bool) LogicalAnd 450 453
Branch 447
447: Label
455: 178(bool) Phi 444 401 454 446
SelectionMerge 457 None
BranchConditional 455 456 457
456: Label
458: 6(float) Load 188(f)
460: 6(float) FAdd 458 459
Store 188(f) 460
Branch 457
457: Label
461: 18(int) Load 22(ui)
462: 18(int) Load 20(i)
463: 18(int) BitwiseAnd 462 461
Store 20(i) 463
465: 18(int) Load 20(i)
466: 18(int) BitwiseOr 465 464
Store 20(i) 466
467: 18(int) Load 22(ui)
468: 18(int) Load 20(i)
469: 18(int) BitwiseXor 468 467
Store 20(i) 469
471: 18(int) Load 20(i)
472: 18(int) SMod 471 470
Store 20(i) 472
473: 18(int) Load 20(i)
474: 18(int) ShiftRightArithmetic 473 396
Store 20(i) 474
475: 18(int) Load 22(ui)
476: 18(int) Load 20(i)
477: 18(int) ShiftLeftLogical 476 475
Store 20(i) 477
478: 18(int) Load 20(i)
479: 18(int) Not 478
Store 20(i) 479
480: 178(bool) Load 305(b)
481: 178(bool) LogicalNot 480
Store 305(b) 481
485: 178(bool) Load 305(b)
SelectionMerge 487 None
BranchConditional 485 486 496
486: Label
488: 18(int) Load 20(i)
489: 6(float) ConvertSToF 488
490: 7(fvec4) CompositeConstruct 489 489 489 489
491: 6(float) Load 188(f)
492: 7(fvec4) CompositeConstruct 491 491 491 491
493: 7(fvec4) FAdd 490 492
494: 7(fvec4) Load 9(v)
495: 7(fvec4) FAdd 493 494
Store 484 495
Branch 487
496: Label
497: 7(fvec4) Load 9(v)
Store 484 497
Branch 487
487: Label
498: 7(fvec4) Load 484
Store 483(FragColor) 498
Return Return
FunctionEnd FunctionEnd

View file

@ -1,9 +1,473 @@
spv.aggOps.frag spv.aggOps.frag
WARNING: 0:4: varying deprecated in version 130; may be removed in future release Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:6: varying deprecated in version 130; may be removed in future release
Linked fragment stage: Linked fragment stage:
Missing functionality: Composite comparison of non-vectors // Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 380
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 16 41 90 376
ExecutionMode 4 OriginLowerLeft
Source GLSL 450
Name 4 "main"
Name 8 "s1"
MemberName 8(s1) 0 "i"
MemberName 8(s1) 1 "f"
Name 13 "a"
Name 16 "u"
Name 37 "b"
Name 41 "w"
Name 55 "s2"
MemberName 55(s2) 0 "i"
MemberName 55(s2) 1 "f"
MemberName 55(s2) 2 "s1_1"
Name 57 "foo2a"
Name 59 "foo2b"
Name 82 "v"
Name 86 "samp2D"
Name 90 "coord"
Name 341 "s1"
MemberName 341(s1) 0 "i"
MemberName 341(s1) 1 "f"
Name 342 "s2"
MemberName 342(s2) 0 "i"
MemberName 342(s2) 1 "f"
MemberName 342(s2) 2 "s1_1"
Name 343 "bn"
MemberName 343(bn) 0 "foo2a"
Name 345 "bi"
Name 347 "s1"
MemberName 347(s1) 0 "i"
MemberName 347(s1) 1 "f"
Name 348 "s2"
MemberName 348(s2) 0 "i"
MemberName 348(s2) 1 "f"
MemberName 348(s2) 2 "s1_1"
Name 376 "color"
Name 379 "foo1"
MemberDecorate 341(s1) 0 Offset 0
MemberDecorate 341(s1) 1 Offset 4
MemberDecorate 342(s2) 0 Offset 0
MemberDecorate 342(s2) 1 Offset 4
MemberDecorate 342(s2) 2 Offset 16
MemberDecorate 343(bn) 0 Offset 0
Decorate 343(bn) Block
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeFloat 32
8(s1): TypeStruct 6(int) 7(float)
9: TypeInt 32 0
10: 9(int) Constant 3
11: TypeArray 8(s1) 10
12: TypePointer Function 11
14: TypeVector 7(float) 4
15: TypePointer Input 14(fvec4)
16(u): 15(ptr) Variable Input
17: 9(int) Constant 0
18: TypePointer Input 7(float)
22: 9(int) Constant 1
26: 9(int) Constant 2
33: 6(int) Constant 14
34: 7(float) Constant 1096810496
35: 8(s1) ConstantComposite 33 34
38: 6(int) Constant 17
39: 7(float) Constant 1099431936
40: 8(s1) ConstantComposite 38 39
41(w): 15(ptr) Variable Input
55(s2): TypeStruct 6(int) 7(float) 8(s1)
56: TypePointer UniformConstant 55(s2)
57(foo2a): 56(ptr) Variable UniformConstant
59(foo2b): 56(ptr) Variable UniformConstant
61: TypeBool
81: TypePointer Function 14(fvec4)
83: TypeImage 7(float) 2D sampled format:Unknown
84: TypeSampledImage 83
85: TypePointer UniformConstant 84
86(samp2D): 85(ptr) Variable UniformConstant
88: TypeVector 7(float) 2
89: TypePointer Input 88(fvec2)
90(coord): 89(ptr) Variable Input
95: 7(float) Constant 1073741824
101: TypeVector 61(bool) 4
106: 7(float) Constant 1077936128
115: 7(float) Constant 1082130432
121: TypeVector 61(bool) 2
126: 7(float) Constant 1084227584
232: 7(float) Constant 1086324736
338: 7(float) Constant 1088421888
341(s1): TypeStruct 6(int) 7(float)
342(s2): TypeStruct 6(int) 7(float) 341(s1)
343(bn): TypeStruct 342(s2)
344: TypePointer Uniform 343(bn)
345(bi): 344(ptr) Variable Uniform
346: 6(int) Constant 0
347(s1): TypeStruct 6(int) 7(float)
348(s2): TypeStruct 6(int) 7(float) 347(s1)
349: TypePointer Uniform 342(s2)
372: 7(float) Constant 1090519040
375: TypePointer Output 14(fvec4)
376(color): 375(ptr) Variable Output
378: TypePointer UniformConstant 8(s1)
379(foo1): 378(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
13(a): 12(ptr) Variable Function
37(b): 12(ptr) Variable Function
82(v): 81(ptr) Variable Function
19: 18(ptr) AccessChain 16(u) 17
20: 7(float) Load 19
21: 6(int) ConvertFToS 20
23: 18(ptr) AccessChain 16(u) 22
24: 7(float) Load 23
25: 8(s1) CompositeConstruct 21 24
27: 18(ptr) AccessChain 16(u) 26
28: 7(float) Load 27
29: 6(int) ConvertFToS 28
30: 18(ptr) AccessChain 16(u) 10
31: 7(float) Load 30
32: 8(s1) CompositeConstruct 29 31
36: 11 CompositeConstruct 25 32 35
Store 13(a) 36
42: 18(ptr) AccessChain 41(w) 17
43: 7(float) Load 42
44: 6(int) ConvertFToS 43
45: 18(ptr) AccessChain 41(w) 22
46: 7(float) Load 45
47: 8(s1) CompositeConstruct 44 46
48: 18(ptr) AccessChain 41(w) 26
49: 7(float) Load 48
50: 6(int) ConvertFToS 49
51: 18(ptr) AccessChain 41(w) 10
52: 7(float) Load 51
53: 8(s1) CompositeConstruct 50 52
54: 11 CompositeConstruct 40 47 53
Store 37(b) 54
58: 55(s2) Load 57(foo2a)
60: 55(s2) Load 59(foo2b)
62: 6(int) CompositeExtract 58 0
63: 6(int) CompositeExtract 60 0
64: 61(bool) IEqual 62 63
65: 7(float) CompositeExtract 58 1
66: 7(float) CompositeExtract 60 1
67: 61(bool) FOrdEqual 65 66
68: 61(bool) LogicalAnd 64 67
69: 8(s1) CompositeExtract 58 2
70: 8(s1) CompositeExtract 60 2
71: 6(int) CompositeExtract 69 0
72: 6(int) CompositeExtract 70 0
73: 61(bool) IEqual 71 72
74: 7(float) CompositeExtract 69 1
75: 7(float) CompositeExtract 70 1
76: 61(bool) FOrdEqual 74 75
77: 61(bool) LogicalAnd 73 76
78: 61(bool) LogicalAnd 68 77
SelectionMerge 80 None
BranchConditional 78 79 93
79: Label
87: 84 Load 86(samp2D)
91: 88(fvec2) Load 90(coord)
92: 14(fvec4) ImageSampleImplicitLod 87 91
Store 82(v) 92
Branch 80
93: Label
94: 84 Load 86(samp2D)
96: 88(fvec2) Load 90(coord)
97: 88(fvec2) VectorTimesScalar 96 95
98: 14(fvec4) ImageSampleImplicitLod 94 97
Store 82(v) 98
Branch 80
80: Label
99: 14(fvec4) Load 16(u)
100: 14(fvec4) Load 82(v)
102: 101(bvec4) FOrdEqual 99 100
103: 61(bool) All 102
SelectionMerge 105 None
BranchConditional 103 104 105
104: Label
107: 14(fvec4) Load 82(v)
108: 14(fvec4) VectorTimesScalar 107 106
Store 82(v) 108
Branch 105
105: Label
109: 14(fvec4) Load 16(u)
110: 14(fvec4) Load 82(v)
111: 101(bvec4) FOrdNotEqual 109 110
112: 61(bool) Any 111
SelectionMerge 114 None
BranchConditional 112 113 114
113: Label
116: 14(fvec4) Load 82(v)
117: 14(fvec4) VectorTimesScalar 116 115
Store 82(v) 117
Branch 114
114: Label
118: 88(fvec2) Load 90(coord)
119: 14(fvec4) Load 82(v)
120: 88(fvec2) VectorShuffle 119 119 1 3
122: 121(bvec2) FOrdEqual 118 120
123: 61(bool) All 122
SelectionMerge 125 None
BranchConditional 123 124 125
124: Label
127: 14(fvec4) Load 82(v)
128: 14(fvec4) VectorTimesScalar 127 126
Store 82(v) 128
Branch 125
125: Label
129: 11 Load 13(a)
130: 11 Load 37(b)
131: 8(s1) CompositeExtract 129 0
132: 8(s1) CompositeExtract 130 0
133: 6(int) CompositeExtract 131 0
134: 6(int) CompositeExtract 132 0
135: 61(bool) IEqual 133 134
136: 7(float) CompositeExtract 131 1
137: 7(float) CompositeExtract 132 1
138: 61(bool) FOrdEqual 136 137
139: 61(bool) LogicalAnd 135 138
140: 8(s1) CompositeExtract 129 1
141: 8(s1) CompositeExtract 130 1
142: 6(int) CompositeExtract 140 0
143: 6(int) CompositeExtract 141 0
144: 61(bool) IEqual 142 143
145: 7(float) CompositeExtract 140 1
146: 7(float) CompositeExtract 141 1
147: 61(bool) FOrdEqual 145 146
148: 61(bool) LogicalAnd 144 147
149: 61(bool) LogicalAnd 139 148
150: 8(s1) CompositeExtract 129 2
151: 8(s1) CompositeExtract 130 2
152: 6(int) CompositeExtract 150 0
153: 6(int) CompositeExtract 151 0
154: 61(bool) IEqual 152 153
155: 7(float) CompositeExtract 150 1
156: 7(float) CompositeExtract 151 1
157: 61(bool) FOrdEqual 155 156
158: 61(bool) LogicalAnd 154 157
159: 61(bool) LogicalAnd 149 158
160: 8(s1) CompositeExtract 129 3
161: 8(s1) CompositeExtract 130 3
162: 6(int) CompositeExtract 160 0
163: 6(int) CompositeExtract 161 0
164: 61(bool) IEqual 162 163
165: 7(float) CompositeExtract 160 1
166: 7(float) CompositeExtract 161 1
167: 61(bool) FOrdEqual 165 166
168: 61(bool) LogicalAnd 164 167
169: 61(bool) LogicalAnd 159 168
170: 8(s1) CompositeExtract 129 4
171: 8(s1) CompositeExtract 130 4
172: 6(int) CompositeExtract 170 0
173: 6(int) CompositeExtract 171 0
174: 61(bool) IEqual 172 173
175: 7(float) CompositeExtract 170 1
176: 7(float) CompositeExtract 171 1
177: 61(bool) FOrdEqual 175 176
178: 61(bool) LogicalAnd 174 177
179: 61(bool) LogicalAnd 169 178
180: 8(s1) CompositeExtract 129 5
181: 8(s1) CompositeExtract 130 5
182: 6(int) CompositeExtract 180 0
183: 6(int) CompositeExtract 181 0
184: 61(bool) IEqual 182 183
185: 7(float) CompositeExtract 180 1
186: 7(float) CompositeExtract 181 1
187: 61(bool) FOrdEqual 185 186
188: 61(bool) LogicalAnd 184 187
189: 61(bool) LogicalAnd 179 188
190: 8(s1) CompositeExtract 129 6
191: 8(s1) CompositeExtract 130 6
192: 6(int) CompositeExtract 190 0
193: 6(int) CompositeExtract 191 0
194: 61(bool) IEqual 192 193
195: 7(float) CompositeExtract 190 1
196: 7(float) CompositeExtract 191 1
197: 61(bool) FOrdEqual 195 196
198: 61(bool) LogicalAnd 194 197
199: 61(bool) LogicalAnd 189 198
200: 8(s1) CompositeExtract 129 7
201: 8(s1) CompositeExtract 130 7
202: 6(int) CompositeExtract 200 0
203: 6(int) CompositeExtract 201 0
204: 61(bool) IEqual 202 203
205: 7(float) CompositeExtract 200 1
206: 7(float) CompositeExtract 201 1
207: 61(bool) FOrdEqual 205 206
208: 61(bool) LogicalAnd 204 207
209: 61(bool) LogicalAnd 199 208
210: 8(s1) CompositeExtract 129 8
211: 8(s1) CompositeExtract 130 8
212: 6(int) CompositeExtract 210 0
213: 6(int) CompositeExtract 211 0
214: 61(bool) IEqual 212 213
215: 7(float) CompositeExtract 210 1
216: 7(float) CompositeExtract 211 1
217: 61(bool) FOrdEqual 215 216
218: 61(bool) LogicalAnd 214 217
219: 61(bool) LogicalAnd 209 218
220: 8(s1) CompositeExtract 129 9
221: 8(s1) CompositeExtract 130 9
222: 6(int) CompositeExtract 220 0
223: 6(int) CompositeExtract 221 0
224: 61(bool) IEqual 222 223
225: 7(float) CompositeExtract 220 1
226: 7(float) CompositeExtract 221 1
227: 61(bool) FOrdEqual 225 226
228: 61(bool) LogicalAnd 224 227
229: 61(bool) LogicalAnd 219 228
SelectionMerge 231 None
BranchConditional 229 230 231
230: Label
233: 14(fvec4) Load 82(v)
234: 14(fvec4) VectorTimesScalar 233 232
Store 82(v) 234
Branch 231
231: Label
235: 11 Load 13(a)
236: 11 Load 37(b)
237: 8(s1) CompositeExtract 235 0
238: 8(s1) CompositeExtract 236 0
239: 6(int) CompositeExtract 237 0
240: 6(int) CompositeExtract 238 0
241: 61(bool) INotEqual 239 240
242: 7(float) CompositeExtract 237 1
243: 7(float) CompositeExtract 238 1
244: 61(bool) FOrdNotEqual 242 243
245: 61(bool) LogicalOr 241 244
246: 8(s1) CompositeExtract 235 1
247: 8(s1) CompositeExtract 236 1
248: 6(int) CompositeExtract 246 0
249: 6(int) CompositeExtract 247 0
250: 61(bool) INotEqual 248 249
251: 7(float) CompositeExtract 246 1
252: 7(float) CompositeExtract 247 1
253: 61(bool) FOrdNotEqual 251 252
254: 61(bool) LogicalOr 250 253
255: 61(bool) LogicalOr 245 254
256: 8(s1) CompositeExtract 235 2
257: 8(s1) CompositeExtract 236 2
258: 6(int) CompositeExtract 256 0
259: 6(int) CompositeExtract 257 0
260: 61(bool) INotEqual 258 259
261: 7(float) CompositeExtract 256 1
262: 7(float) CompositeExtract 257 1
263: 61(bool) FOrdNotEqual 261 262
264: 61(bool) LogicalOr 260 263
265: 61(bool) LogicalOr 255 264
266: 8(s1) CompositeExtract 235 3
267: 8(s1) CompositeExtract 236 3
268: 6(int) CompositeExtract 266 0
269: 6(int) CompositeExtract 267 0
270: 61(bool) INotEqual 268 269
271: 7(float) CompositeExtract 266 1
272: 7(float) CompositeExtract 267 1
273: 61(bool) FOrdNotEqual 271 272
274: 61(bool) LogicalOr 270 273
275: 61(bool) LogicalOr 265 274
276: 8(s1) CompositeExtract 235 4
277: 8(s1) CompositeExtract 236 4
278: 6(int) CompositeExtract 276 0
279: 6(int) CompositeExtract 277 0
280: 61(bool) INotEqual 278 279
281: 7(float) CompositeExtract 276 1
282: 7(float) CompositeExtract 277 1
283: 61(bool) FOrdNotEqual 281 282
284: 61(bool) LogicalOr 280 283
285: 61(bool) LogicalOr 275 284
286: 8(s1) CompositeExtract 235 5
287: 8(s1) CompositeExtract 236 5
288: 6(int) CompositeExtract 286 0
289: 6(int) CompositeExtract 287 0
290: 61(bool) INotEqual 288 289
291: 7(float) CompositeExtract 286 1
292: 7(float) CompositeExtract 287 1
293: 61(bool) FOrdNotEqual 291 292
294: 61(bool) LogicalOr 290 293
295: 61(bool) LogicalOr 285 294
296: 8(s1) CompositeExtract 235 6
297: 8(s1) CompositeExtract 236 6
298: 6(int) CompositeExtract 296 0
299: 6(int) CompositeExtract 297 0
300: 61(bool) INotEqual 298 299
301: 7(float) CompositeExtract 296 1
302: 7(float) CompositeExtract 297 1
303: 61(bool) FOrdNotEqual 301 302
304: 61(bool) LogicalOr 300 303
305: 61(bool) LogicalOr 295 304
306: 8(s1) CompositeExtract 235 7
307: 8(s1) CompositeExtract 236 7
308: 6(int) CompositeExtract 306 0
309: 6(int) CompositeExtract 307 0
310: 61(bool) INotEqual 308 309
311: 7(float) CompositeExtract 306 1
312: 7(float) CompositeExtract 307 1
313: 61(bool) FOrdNotEqual 311 312
314: 61(bool) LogicalOr 310 313
315: 61(bool) LogicalOr 305 314
316: 8(s1) CompositeExtract 235 8
317: 8(s1) CompositeExtract 236 8
318: 6(int) CompositeExtract 316 0
319: 6(int) CompositeExtract 317 0
320: 61(bool) INotEqual 318 319
321: 7(float) CompositeExtract 316 1
322: 7(float) CompositeExtract 317 1
323: 61(bool) FOrdNotEqual 321 322
324: 61(bool) LogicalOr 320 323
325: 61(bool) LogicalOr 315 324
326: 8(s1) CompositeExtract 235 9
327: 8(s1) CompositeExtract 236 9
328: 6(int) CompositeExtract 326 0
329: 6(int) CompositeExtract 327 0
330: 61(bool) INotEqual 328 329
331: 7(float) CompositeExtract 326 1
332: 7(float) CompositeExtract 327 1
333: 61(bool) FOrdNotEqual 331 332
334: 61(bool) LogicalOr 330 333
335: 61(bool) LogicalOr 325 334
SelectionMerge 337 None
BranchConditional 335 336 337
336: Label
339: 14(fvec4) Load 82(v)
340: 14(fvec4) VectorTimesScalar 339 338
Store 82(v) 340
Branch 337
337: Label
350: 349(ptr) AccessChain 345(bi) 346
351: 342(s2) Load 350
352: 55(s2) Load 57(foo2a)
353: 6(int) CompositeExtract 351 0
354: 6(int) CompositeExtract 352 0
355: 61(bool) INotEqual 353 354
356: 7(float) CompositeExtract 351 1
357: 7(float) CompositeExtract 352 1
358: 61(bool) FOrdNotEqual 356 357
359: 61(bool) LogicalOr 355 358
360: 341(s1) CompositeExtract 351 2
361: 8(s1) CompositeExtract 352 2
362: 6(int) CompositeExtract 360 0
363: 6(int) CompositeExtract 361 0
364: 61(bool) INotEqual 362 363
365: 7(float) CompositeExtract 360 1
366: 7(float) CompositeExtract 361 1
367: 61(bool) FOrdNotEqual 365 366
368: 61(bool) LogicalOr 364 367
369: 61(bool) LogicalOr 359 368
SelectionMerge 371 None
BranchConditional 369 370 371
370: Label
373: 14(fvec4) Load 82(v)
374: 14(fvec4) VectorTimesScalar 373 372
Store 82(v) 374
Branch 371
371: Label
377: 14(fvec4) Load 82(v)
Store 376(color) 377
Return
FunctionEnd

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 21 EntryPoint Fragment 4 "main" 21 59
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 110 Source GLSL 110
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 21 EntryPoint Fragment 4 "main" 21 38
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 110 Source GLSL 110
Name 4 "main" Name 4 "main"

View file

@ -0,0 +1,232 @@
spv.bitCast.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 172
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 154
ExecutionMode 4 OriginLowerLeft
Source GLSL 450
Name 4 "main"
Name 9 "idata"
Name 14 "f1"
Name 26 "f2"
Name 37 "f3"
Name 48 "f4"
Name 55 "udata"
Name 85 "fdata"
Name 89 "i1"
Name 98 "i2"
Name 107 "i3"
Name 116 "i4"
Name 122 "u1"
Name 130 "u2"
Name 139 "u3"
Name 148 "u4"
Name 154 "fragColor"
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeVector 6(int) 4
8: TypePointer Function 7(ivec4)
10: 6(int) Constant 0
11: 7(ivec4) ConstantComposite 10 10 10 10
12: TypeFloat 32
13: TypePointer UniformConstant 12(float)
14(f1): 13(ptr) Variable UniformConstant
17: TypeInt 32 0
18: 17(int) Constant 0
19: TypePointer Function 6(int)
24: TypeVector 12(float) 2
25: TypePointer UniformConstant 24(fvec2)
26(f2): 25(ptr) Variable UniformConstant
28: TypeVector 6(int) 2
35: TypeVector 12(float) 3
36: TypePointer UniformConstant 35(fvec3)
37(f3): 36(ptr) Variable UniformConstant
39: TypeVector 6(int) 3
46: TypeVector 12(float) 4
47: TypePointer UniformConstant 46(fvec4)
48(f4): 47(ptr) Variable UniformConstant
53: TypeVector 17(int) 4
54: TypePointer Function 53(ivec4)
56: 53(ivec4) ConstantComposite 18 18 18 18
59: TypePointer Function 17(int)
65: TypeVector 17(int) 2
73: TypeVector 17(int) 3
84: TypePointer Function 46(fvec4)
86: 12(float) Constant 0
87: 46(fvec4) ConstantComposite 86 86 86 86
88: TypePointer UniformConstant 6(int)
89(i1): 88(ptr) Variable UniformConstant
92: TypePointer Function 12(float)
97: TypePointer UniformConstant 28(ivec2)
98(i2): 97(ptr) Variable UniformConstant
106: TypePointer UniformConstant 39(ivec3)
107(i3): 106(ptr) Variable UniformConstant
115: TypePointer UniformConstant 7(ivec4)
116(i4): 115(ptr) Variable UniformConstant
121: TypePointer UniformConstant 17(int)
122(u1): 121(ptr) Variable UniformConstant
129: TypePointer UniformConstant 65(ivec2)
130(u2): 129(ptr) Variable UniformConstant
138: TypePointer UniformConstant 73(ivec3)
139(u3): 138(ptr) Variable UniformConstant
147: TypePointer UniformConstant 53(ivec4)
148(u4): 147(ptr) Variable UniformConstant
153: TypePointer Output 46(fvec4)
154(fragColor): 153(ptr) Variable Output
159: TypeBool
160: TypeVector 159(bool) 4
168: 12(float) Constant 1045220557
169: 46(fvec4) ConstantComposite 168 168 168 168
4(main): 2 Function None 3
5: Label
9(idata): 8(ptr) Variable Function
55(udata): 54(ptr) Variable Function
85(fdata): 84(ptr) Variable Function
155: 84(ptr) Variable Function
Store 9(idata) 11
15: 12(float) Load 14(f1)
16: 6(int) Bitcast 15
20: 19(ptr) AccessChain 9(idata) 18
21: 6(int) Load 20
22: 6(int) IAdd 21 16
23: 19(ptr) AccessChain 9(idata) 18
Store 23 22
27: 24(fvec2) Load 26(f2)
29: 28(ivec2) Bitcast 27
30: 7(ivec4) Load 9(idata)
31: 28(ivec2) VectorShuffle 30 30 0 1
32: 28(ivec2) IAdd 31 29
33: 7(ivec4) Load 9(idata)
34: 7(ivec4) VectorShuffle 33 32 4 5 2 3
Store 9(idata) 34
38: 35(fvec3) Load 37(f3)
40: 39(ivec3) Bitcast 38
41: 7(ivec4) Load 9(idata)
42: 39(ivec3) VectorShuffle 41 41 0 1 2
43: 39(ivec3) IAdd 42 40
44: 7(ivec4) Load 9(idata)
45: 7(ivec4) VectorShuffle 44 43 4 5 6 3
Store 9(idata) 45
49: 46(fvec4) Load 48(f4)
50: 7(ivec4) Bitcast 49
51: 7(ivec4) Load 9(idata)
52: 7(ivec4) IAdd 51 50
Store 9(idata) 52
Store 55(udata) 56
57: 12(float) Load 14(f1)
58: 17(int) Bitcast 57
60: 59(ptr) AccessChain 55(udata) 18
61: 17(int) Load 60
62: 17(int) IAdd 61 58
63: 59(ptr) AccessChain 55(udata) 18
Store 63 62
64: 24(fvec2) Load 26(f2)
66: 65(ivec2) Bitcast 64
67: 53(ivec4) Load 55(udata)
68: 65(ivec2) VectorShuffle 67 67 0 1
69: 65(ivec2) IAdd 68 66
70: 53(ivec4) Load 55(udata)
71: 53(ivec4) VectorShuffle 70 69 4 5 2 3
Store 55(udata) 71
72: 35(fvec3) Load 37(f3)
74: 73(ivec3) Bitcast 72
75: 53(ivec4) Load 55(udata)
76: 73(ivec3) VectorShuffle 75 75 0 1 2
77: 73(ivec3) IAdd 76 74
78: 53(ivec4) Load 55(udata)
79: 53(ivec4) VectorShuffle 78 77 4 5 6 3
Store 55(udata) 79
80: 46(fvec4) Load 48(f4)
81: 53(ivec4) Bitcast 80
82: 53(ivec4) Load 55(udata)
83: 53(ivec4) IAdd 82 81
Store 55(udata) 83
Store 85(fdata) 87
90: 6(int) Load 89(i1)
91: 12(float) Bitcast 90
93: 92(ptr) AccessChain 85(fdata) 18
94: 12(float) Load 93
95: 12(float) FAdd 94 91
96: 92(ptr) AccessChain 85(fdata) 18
Store 96 95
99: 28(ivec2) Load 98(i2)
100: 24(fvec2) Bitcast 99
101: 46(fvec4) Load 85(fdata)
102: 24(fvec2) VectorShuffle 101 101 0 1
103: 24(fvec2) FAdd 102 100
104: 46(fvec4) Load 85(fdata)
105: 46(fvec4) VectorShuffle 104 103 4 5 2 3
Store 85(fdata) 105
108: 39(ivec3) Load 107(i3)
109: 35(fvec3) Bitcast 108
110: 46(fvec4) Load 85(fdata)
111: 35(fvec3) VectorShuffle 110 110 0 1 2
112: 35(fvec3) FAdd 111 109
113: 46(fvec4) Load 85(fdata)
114: 46(fvec4) VectorShuffle 113 112 4 5 6 3
Store 85(fdata) 114
117: 7(ivec4) Load 116(i4)
118: 46(fvec4) Bitcast 117
119: 46(fvec4) Load 85(fdata)
120: 46(fvec4) FAdd 119 118
Store 85(fdata) 120
123: 17(int) Load 122(u1)
124: 12(float) Bitcast 123
125: 92(ptr) AccessChain 85(fdata) 18
126: 12(float) Load 125
127: 12(float) FAdd 126 124
128: 92(ptr) AccessChain 85(fdata) 18
Store 128 127
131: 65(ivec2) Load 130(u2)
132: 24(fvec2) Bitcast 131
133: 46(fvec4) Load 85(fdata)
134: 24(fvec2) VectorShuffle 133 133 0 1
135: 24(fvec2) FAdd 134 132
136: 46(fvec4) Load 85(fdata)
137: 46(fvec4) VectorShuffle 136 135 4 5 2 3
Store 85(fdata) 137
140: 73(ivec3) Load 139(u3)
141: 35(fvec3) Bitcast 140
142: 46(fvec4) Load 85(fdata)
143: 35(fvec3) VectorShuffle 142 142 0 1 2
144: 35(fvec3) FAdd 143 141
145: 46(fvec4) Load 85(fdata)
146: 46(fvec4) VectorShuffle 145 144 4 5 6 3
Store 85(fdata) 146
149: 53(ivec4) Load 148(u4)
150: 46(fvec4) Bitcast 149
151: 46(fvec4) Load 85(fdata)
152: 46(fvec4) FAdd 151 150
Store 85(fdata) 152
156: 7(ivec4) Load 9(idata)
157: 53(ivec4) Bitcast 156
158: 53(ivec4) Load 55(udata)
161: 160(bvec4) IEqual 157 158
162: 159(bool) All 161
SelectionMerge 164 None
BranchConditional 162 163 166
163: Label
165: 46(fvec4) Load 85(fdata)
Store 155 165
Branch 164
166: Label
167: 46(fvec4) Load 85(fdata)
170: 46(fvec4) FAdd 167 169
Store 155 170
Branch 164
164: Label
171: 46(fvec4) Load 155
Store 154(fragColor) 171
Return
FunctionEnd

View file

@ -0,0 +1,98 @@
spv.bool.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 49
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 23 47 48
Source GLSL 450
Name 4 "main"
Name 10 "foo(b1;"
Name 9 "b"
Name 21 "gl_PerVertex"
MemberName 21(gl_PerVertex) 0 "gl_Position"
MemberName 21(gl_PerVertex) 1 "gl_PointSize"
MemberName 21(gl_PerVertex) 2 "gl_ClipDistance"
MemberName 21(gl_PerVertex) 3 "gl_CullDistance"
Name 23 ""
Name 28 "ubname"
MemberName 28(ubname) 0 "b"
Name 30 "ubinst"
Name 31 "param"
Name 47 "gl_VertexID"
Name 48 "gl_InstanceID"
MemberDecorate 21(gl_PerVertex) 0 BuiltIn Position
MemberDecorate 21(gl_PerVertex) 1 BuiltIn PointSize
MemberDecorate 21(gl_PerVertex) 2 BuiltIn ClipDistance
MemberDecorate 21(gl_PerVertex) 3 BuiltIn CullDistance
Decorate 21(gl_PerVertex) Block
Decorate 28(ubname) GLSLShared
Decorate 28(ubname) Block
Decorate 47(gl_VertexID) BuiltIn VertexId
Decorate 48(gl_InstanceID) BuiltIn InstanceId
2: TypeVoid
3: TypeFunction 2
6: TypeBool
7: TypePointer Function 6(bool)
8: TypeFunction 6(bool) 7(ptr)
13: 6(bool) ConstantFalse
16: TypeFloat 32
17: TypeVector 16(float) 4
18: TypeInt 32 0
19: 18(int) Constant 1
20: TypeArray 16(float) 19
21(gl_PerVertex): TypeStruct 17(fvec4) 16(float) 20 20
22: TypePointer Output 21(gl_PerVertex)
23: 22(ptr) Variable Output
24: TypeInt 32 1
25: 24(int) Constant 0
26: TypePointer Function 17(fvec4)
28(ubname): TypeStruct 6(bool)
29: TypePointer Uniform 28(ubname)
30(ubinst): 29(ptr) Variable Uniform
32: TypePointer Uniform 6(bool)
38: 16(float) Constant 0
39: 17(fvec4) ConstantComposite 38 38 38 38
41: 16(float) Constant 1065353216
42: 17(fvec4) ConstantComposite 41 41 41 41
44: TypePointer Output 17(fvec4)
46: TypePointer Input 24(int)
47(gl_VertexID): 46(ptr) Variable Input
48(gl_InstanceID): 46(ptr) Variable Input
4(main): 2 Function None 3
5: Label
27: 26(ptr) Variable Function
31(param): 7(ptr) Variable Function
33: 32(ptr) AccessChain 30(ubinst) 25
34: 6(bool) Load 33
Store 31(param) 34
35: 6(bool) FunctionCall 10(foo(b1;) 31(param)
SelectionMerge 37 None
BranchConditional 35 36 40
36: Label
Store 27 39
Branch 37
40: Label
Store 27 42
Branch 37
37: Label
43: 17(fvec4) Load 27
45: 44(ptr) AccessChain 23 25
Store 45 43
Return
FunctionEnd
10(foo(b1;): 6(bool) Function None 8
9(b): 7(ptr) FunctionParameter
11: Label
12: 6(bool) Load 9(b)
14: 6(bool) INotEqual 12 13
ReturnValue 14
FunctionEnd

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 17 EntryPoint Fragment 4 "main" 17 34
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 400 Source GLSL 400
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 39 446 448 157 53 450 452 454 EntryPoint Fragment 4 "main" 39 53 157 322 446 448 450 452 454
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 16 EntryPoint Fragment 4 "main" 12 16
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 18 EntryPoint Fragment 4 "main" 12 18
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -13,7 +13,7 @@ Linked vertex stage:
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 24 38 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"

View file

@ -3,4 +3,206 @@ spv.deepRvalue.frag
Linked fragment stage: Linked fragment stage:
Missing functionality: binary operation on matrix // Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 155
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 149
ExecutionMode 4 OriginLowerLeft
Source GLSL 330
Name 4 "main"
Name 9 "v1"
Name 15 "v2"
Name 21 "v3"
Name 27 "v4"
Name 35 "m"
Name 63 "mm"
Name 80 "f"
Name 87 "g"
Name 106 "h"
Name 107 "i"
Name 111 "samp2D"
Name 134 "str"
MemberName 134(str) 0 "a"
MemberName 134(str) 1 "b"
MemberName 134(str) 2 "c"
Name 136 "t"
Name 149 "gl_FragColor"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Private 7(fvec4)
9(v1): 8(ptr) Variable Private
10: 6(float) Constant 1073741824
11: 6(float) Constant 1077936128
12: 6(float) Constant 1084227584
13: 6(float) Constant 1088421888
14: 7(fvec4) ConstantComposite 10 11 12 13
15(v2): 8(ptr) Variable Private
16: 6(float) Constant 1093664768
17: 6(float) Constant 1095761920
18: 6(float) Constant 1099431936
19: 6(float) Constant 1100480512
20: 7(fvec4) ConstantComposite 16 17 18 19
21(v3): 8(ptr) Variable Private
22: 6(float) Constant 1102577664
23: 6(float) Constant 1105723392
24: 6(float) Constant 1106771968
25: 6(float) Constant 1108606976
26: 7(fvec4) ConstantComposite 22 23 24 25
27(v4): 8(ptr) Variable Private
28: 6(float) Constant 1109655552
29: 6(float) Constant 1110179840
30: 6(float) Constant 1111228416
31: 6(float) Constant 1112801280
32: 7(fvec4) ConstantComposite 28 29 30 31
33: TypeMatrix 7(fvec4) 4
34: TypePointer Function 33
40: 6(float) Constant 1065353216
41: 6(float) Constant 0
79: TypePointer Function 6(float)
81: TypeInt 32 1
82: 81(int) Constant 1
83: TypeInt 32 0
84: 83(int) Constant 3
103: 81(int) Constant 2
104: 83(int) Constant 1
108: TypeImage 6(float) 2D sampled format:Unknown
109: TypeSampledImage 108
110: TypePointer UniformConstant 109
111(samp2D): 110(ptr) Variable UniformConstant
113: TypeVector 6(float) 2
114: 6(float) Constant 1056964608
115: 113(fvec2) ConstantComposite 114 114
118: TypePointer Function 7(fvec4)
121: 6(float) Constant 1036831949
122: TypeBool
133: TypeArray 113(fvec2) 84
134(str): TypeStruct 81(int) 133 122(bool)
135: TypePointer Function 134(str)
137: 113(fvec2) ConstantComposite 10 11
138: 6(float) Constant 1082130432
139: 113(fvec2) ConstantComposite 138 12
140: 6(float) Constant 1086324736
141: 113(fvec2) ConstantComposite 140 13
142: 133 ConstantComposite 137 139 141
143: 122(bool) ConstantTrue
144: 134(str) ConstantComposite 82 142 143
148: TypePointer Output 7(fvec4)
149(gl_FragColor): 148(ptr) Variable Output
4(main): 2 Function None 3
5: Label
35(m): 34(ptr) Variable Function
63(mm): 34(ptr) Variable Function
80(f): 79(ptr) Variable Function
87(g): 79(ptr) Variable Function
106(h): 79(ptr) Variable Function
107(i): 79(ptr) Variable Function
119: 118(ptr) Variable Function
136(t): 135(ptr) Variable Function
Store 9(v1) 14
Store 15(v2) 20
Store 21(v3) 26
Store 27(v4) 32
36: 7(fvec4) Load 9(v1)
37: 7(fvec4) Load 15(v2)
38: 7(fvec4) Load 21(v3)
39: 7(fvec4) Load 27(v4)
42: 6(float) CompositeExtract 36 0
43: 6(float) CompositeExtract 36 1
44: 6(float) CompositeExtract 36 2
45: 6(float) CompositeExtract 36 3
46: 6(float) CompositeExtract 37 0
47: 6(float) CompositeExtract 37 1
48: 6(float) CompositeExtract 37 2
49: 6(float) CompositeExtract 37 3
50: 6(float) CompositeExtract 38 0
51: 6(float) CompositeExtract 38 1
52: 6(float) CompositeExtract 38 2
53: 6(float) CompositeExtract 38 3
54: 6(float) CompositeExtract 39 0
55: 6(float) CompositeExtract 39 1
56: 6(float) CompositeExtract 39 2
57: 6(float) CompositeExtract 39 3
58: 7(fvec4) CompositeConstruct 42 43 44 45
59: 7(fvec4) CompositeConstruct 46 47 48 49
60: 7(fvec4) CompositeConstruct 50 51 52 53
61: 7(fvec4) CompositeConstruct 54 55 56 57
62: 33 CompositeConstruct 58 59 60 61
Store 35(m) 62
64: 33 Load 35(m)
65: 33 Load 35(m)
66: 7(fvec4) CompositeExtract 64 0
67: 7(fvec4) CompositeExtract 65 0
68: 7(fvec4) FMul 66 67
69: 7(fvec4) CompositeExtract 64 1
70: 7(fvec4) CompositeExtract 65 1
71: 7(fvec4) FMul 69 70
72: 7(fvec4) CompositeExtract 64 2
73: 7(fvec4) CompositeExtract 65 2
74: 7(fvec4) FMul 72 73
75: 7(fvec4) CompositeExtract 64 3
76: 7(fvec4) CompositeExtract 65 3
77: 7(fvec4) FMul 75 76
78: 33 CompositeConstruct 68 71 74 77
Store 63(mm) 78
85: 79(ptr) AccessChain 63(mm) 82 84
86: 6(float) Load 85
Store 80(f) 86
88: 33 Load 35(m)
89: 33 Load 35(m)
90: 7(fvec4) CompositeExtract 88 0
91: 7(fvec4) CompositeExtract 89 0
92: 7(fvec4) FMul 90 91
93: 7(fvec4) CompositeExtract 88 1
94: 7(fvec4) CompositeExtract 89 1
95: 7(fvec4) FMul 93 94
96: 7(fvec4) CompositeExtract 88 2
97: 7(fvec4) CompositeExtract 89 2
98: 7(fvec4) FMul 96 97
99: 7(fvec4) CompositeExtract 88 3
100: 7(fvec4) CompositeExtract 89 3
101: 7(fvec4) FMul 99 100
102: 33 CompositeConstruct 92 95 98 101
105: 6(float) CompositeExtract 102 2 1
Store 87(g) 105
Store 106(h) 12
112: 109 Load 111(samp2D)
116: 7(fvec4) ImageSampleImplicitLod 112 115
117: 6(float) CompositeExtract 116 1
Store 107(i) 117
120: 6(float) Load 107(i)
123: 122(bool) FOrdGreaterThan 120 121
SelectionMerge 125 None
BranchConditional 123 124 127
124: Label
126: 7(fvec4) Load 9(v1)
Store 119 126
Branch 125
127: Label
128: 7(fvec4) Load 15(v2)
Store 119 128
Branch 125
125: Label
129: 79(ptr) AccessChain 119 84
130: 6(float) Load 129
131: 6(float) Load 107(i)
132: 6(float) FAdd 131 130
Store 107(i) 132
Store 136(t) 144
145: 6(float) CompositeExtract 144 1 2 1
146: 6(float) Load 107(i)
147: 6(float) FAdd 146 145
Store 107(i) 147
150: 6(float) Load 80(f)
151: 6(float) Load 87(g)
152: 6(float) Load 106(h)
153: 6(float) Load 107(i)
154: 7(fvec4) CompositeConstruct 150 151 152 153
Store 149(gl_FragColor) 154
Return
FunctionEnd

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 14 10 8 8 EntryPoint Fragment 4 "main" 8 10 14
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
ExecutionMode 4 DepthGreater ExecutionMode 4 DepthGreater
ExecutionMode 4 DepthReplacing ExecutionMode 4 DepthReplacing

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 21 EntryPoint Fragment 4 "main" 21 59
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 110 Source GLSL 110
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
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 EntryPoint Fragment 4 "main" 11 33
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 110 Source GLSL 110
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked compute stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main" EntryPoint GLCompute 4 "main" 26 33
ExecutionMode 4 LocalSize 1 1 1 ExecutionMode 4 LocalSize 1 1 1
Source GLSL 430 Source GLSL 430
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 18 11 EntryPoint Fragment 4 "main" 11 18 107
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 110 Source GLSL 110
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 18 11 EntryPoint Fragment 4 "main" 11 18 37
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 120 Source GLSL 120
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
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 101 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"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 20 EntryPoint Fragment 4 "main" 20 30
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source ESSL 100 Source ESSL 100
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 57 EntryPoint Fragment 4 "main" 57 68
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" EntryPoint Fragment 4 "main" 149
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 400 Source GLSL 400
Name 4 "main" Name 4 "main"

View file

@ -333,7 +333,7 @@ Linked fragment stage:
214: 96 Load 98(i2DMS) 214: 96 Load 98(i2DMS)
215: 29(ivec2) Load 142(ic2D) 215: 29(ivec2) Load 142(ic2D)
217: 125(fvec4) Load 127(v) 217: 125(fvec4) Load 127(v)
ImageWrite 214 215 216 ImageWrite 214 215 217 Sample 216
218: 106 Load 108(i2DMSArray) 218: 106 Load 108(i2DMSArray)
219: 7(ivec3) Load 152(ic3D) 219: 7(ivec3) Load 152(ic3D)
221: 125(fvec4) ImageRead 218 219 Sample 220 221: 125(fvec4) ImageRead 218 219 Sample 220
@ -343,7 +343,7 @@ Linked fragment stage:
224: 106 Load 108(i2DMSArray) 224: 106 Load 108(i2DMSArray)
225: 7(ivec3) Load 152(ic3D) 225: 7(ivec3) Load 152(ic3D)
227: 125(fvec4) Load 127(v) 227: 125(fvec4) Load 127(v)
ImageWrite 224 225 226 ImageWrite 224 225 227 Sample 226
Store 229(ui) 19 Store 229(ui) 19
233: 6(int) Load 132(ic1D) 233: 6(int) Load 132(ic1D)
236: 235(ptr) ImageTexelPointer 232(ii1D) 233 0 236: 235(ptr) ImageTexelPointer 232(ii1D) 233 0

View file

@ -12,7 +12,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 47 26 173 67 121 142 100 247 156 146 182 83 15 9 21 268 269 EntryPoint Vertex 4 "main" 9 15 21 26 47 67 83 100 121 142 146 156 173 182 247 268 269
Source ESSL 310 Source ESSL 310
Name 4 "main" Name 4 "main"
Name 9 "iout" Name 9 "iout"

View file

@ -0,0 +1,141 @@
spv.interpOps.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 101
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 13 24 33 41 99
ExecutionMode 4 OriginLowerLeft
Source GLSL 450
Name 4 "main"
Name 9 "f4"
Name 13 "if1"
Name 24 "if2"
Name 33 "if3"
Name 41 "if4"
Name 47 "samp"
Name 73 "offset"
Name 99 "fragColor"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
10: 6(float) Constant 0
11: 7(fvec4) ConstantComposite 10 10 10 10
12: TypePointer Input 6(float)
13(if1): 12(ptr) Variable Input
15: TypeInt 32 0
16: 15(int) Constant 0
17: TypePointer Function 6(float)
22: TypeVector 6(float) 2
23: TypePointer Input 22(fvec2)
24(if2): 23(ptr) Variable Input
31: TypeVector 6(float) 3
32: TypePointer Input 31(fvec3)
33(if3): 32(ptr) Variable Input
40: TypePointer Input 7(fvec4)
41(if4): 40(ptr) Variable Input
45: TypeInt 32 1
46: TypePointer UniformConstant 45(int)
47(samp): 46(ptr) Variable UniformConstant
72: TypePointer UniformConstant 22(fvec2)
73(offset): 72(ptr) Variable UniformConstant
98: TypePointer Output 7(fvec4)
99(fragColor): 98(ptr) Variable Output
4(main): 2 Function None 3
5: Label
9(f4): 8(ptr) Variable Function
Store 9(f4) 11
14: 6(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 13(if1)
18: 17(ptr) AccessChain 9(f4) 16
19: 6(float) Load 18
20: 6(float) FAdd 19 14
21: 17(ptr) AccessChain 9(f4) 16
Store 21 20
25: 22(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 24(if2)
26: 7(fvec4) Load 9(f4)
27: 22(fvec2) VectorShuffle 26 26 0 1
28: 22(fvec2) FAdd 27 25
29: 7(fvec4) Load 9(f4)
30: 7(fvec4) VectorShuffle 29 28 4 5 2 3
Store 9(f4) 30
34: 31(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 33(if3)
35: 7(fvec4) Load 9(f4)
36: 31(fvec3) VectorShuffle 35 35 0 1 2
37: 31(fvec3) FAdd 36 34
38: 7(fvec4) Load 9(f4)
39: 7(fvec4) VectorShuffle 38 37 4 5 6 3
Store 9(f4) 39
42: 7(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 41(if4)
43: 7(fvec4) Load 9(f4)
44: 7(fvec4) FAdd 43 42
Store 9(f4) 44
48: 45(int) Load 47(samp)
49: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 13(if1) 48
50: 17(ptr) AccessChain 9(f4) 16
51: 6(float) Load 50
52: 6(float) FAdd 51 49
53: 17(ptr) AccessChain 9(f4) 16
Store 53 52
54: 45(int) Load 47(samp)
55: 22(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 24(if2) 54
56: 7(fvec4) Load 9(f4)
57: 22(fvec2) VectorShuffle 56 56 0 1
58: 22(fvec2) FAdd 57 55
59: 7(fvec4) Load 9(f4)
60: 7(fvec4) VectorShuffle 59 58 4 5 2 3
Store 9(f4) 60
61: 45(int) Load 47(samp)
62: 31(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 33(if3) 61
63: 7(fvec4) Load 9(f4)
64: 31(fvec3) VectorShuffle 63 63 0 1 2
65: 31(fvec3) FAdd 64 62
66: 7(fvec4) Load 9(f4)
67: 7(fvec4) VectorShuffle 66 65 4 5 6 3
Store 9(f4) 67
68: 45(int) Load 47(samp)
69: 7(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 41(if4) 68
70: 7(fvec4) Load 9(f4)
71: 7(fvec4) FAdd 70 69
Store 9(f4) 71
74: 22(fvec2) Load 73(offset)
75: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 13(if1) 74
76: 17(ptr) AccessChain 9(f4) 16
77: 6(float) Load 76
78: 6(float) FAdd 77 75
79: 17(ptr) AccessChain 9(f4) 16
Store 79 78
80: 22(fvec2) Load 73(offset)
81: 22(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 24(if2) 80
82: 7(fvec4) Load 9(f4)
83: 22(fvec2) VectorShuffle 82 82 0 1
84: 22(fvec2) FAdd 83 81
85: 7(fvec4) Load 9(f4)
86: 7(fvec4) VectorShuffle 85 84 4 5 2 3
Store 9(f4) 86
87: 22(fvec2) Load 73(offset)
88: 31(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 33(if3) 87
89: 7(fvec4) Load 9(f4)
90: 31(fvec3) VectorShuffle 89 89 0 1 2
91: 31(fvec3) FAdd 90 88
92: 7(fvec4) Load 9(f4)
93: 7(fvec4) VectorShuffle 92 91 4 5 6 3
Store 9(f4) 93
94: 22(fvec2) Load 73(offset)
95: 7(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 41(if4) 94
96: 7(fvec4) Load 9(f4)
97: 7(fvec4) FAdd 96 95
Store 9(f4) 97
100: 7(fvec4) Load 9(f4)
Store 99(fragColor) 100
Return
FunctionEnd

View file

@ -0,0 +1,249 @@
spv.layoutNested.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 70
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 63 66 68 69
Source GLSL 450
Name 4 "main"
Name 14 "S"
MemberName 14(S) 0 "a"
MemberName 14(S) 1 "b"
MemberName 14(S) 2 "c"
Name 19 "Block140"
MemberName 19(Block140) 0 "u"
MemberName 19(Block140) 1 "s"
MemberName 19(Block140) 2 "v"
Name 21 "inst140"
Name 23 "S"
MemberName 23(S) 0 "a"
MemberName 23(S) 1 "b"
MemberName 23(S) 2 "c"
Name 26 "Block430"
MemberName 26(Block430) 0 "u"
MemberName 26(Block430) 1 "s"
MemberName 26(Block430) 2 "v"
Name 28 "inst430"
Name 29 "S"
MemberName 29(S) 0 "a"
MemberName 29(S) 1 "b"
MemberName 29(S) 2 "c"
Name 31 "s"
Name 32 "T"
MemberName 32(T) 0 "m"
MemberName 32(T) 1 "a"
Name 34 "t"
Name 35 "T"
MemberName 35(T) 0 "m"
MemberName 35(T) 1 "a"
Name 36 "Nestor"
MemberName 36(Nestor) 0 "nestorT"
Name 37 "Bt1"
MemberName 37(Bt1) 0 "nt"
Name 39 "Btn1"
Name 40 "T"
MemberName 40(T) 0 "m"
MemberName 40(T) 1 "a"
Name 41 "Nestor"
MemberName 41(Nestor) 0 "nestorT"
Name 42 "Bt2"
MemberName 42(Bt2) 0 "nt"
Name 44 "Btn2"
Name 45 "Bt3"
MemberName 45(Bt3) 0 "ntcol"
MemberName 45(Bt3) 1 "ntrow"
Name 47 "Btn3"
Name 48 "T"
MemberName 48(T) 0 "m"
MemberName 48(T) 1 "a"
Name 49 "Nestor"
MemberName 49(Nestor) 0 "nestorT"
Name 50 "bBt1"
MemberName 50(bBt1) 0 "nt"
Name 52 "bBtn1"
Name 53 "T"
MemberName 53(T) 0 "m"
MemberName 53(T) 1 "a"
Name 54 "Nestor"
MemberName 54(Nestor) 0 "nestorT"
Name 55 "bBt2"
MemberName 55(bBt2) 0 "nt"
Name 57 "bBtn2"
Name 58 "bBt3"
MemberName 58(bBt3) 0 "ntcol"
MemberName 58(bBt3) 1 "ntrow"
Name 60 "bBtn3"
Name 61 "S"
MemberName 61(S) 0 "a"
MemberName 61(S) 1 "b"
MemberName 61(S) 2 "c"
Name 63 "sout"
Name 64 "S"
MemberName 64(S) 0 "a"
MemberName 64(S) 1 "b"
MemberName 64(S) 2 "c"
Name 66 "soutinv"
Name 68 "gl_VertexID"
Name 69 "gl_InstanceID"
Decorate 13 ArrayStride 32
MemberDecorate 14(S) 0 Offset 0
MemberDecorate 14(S) 1 ColMajor
MemberDecorate 14(S) 1 Offset 16
MemberDecorate 14(S) 1 MatrixStride 16
MemberDecorate 14(S) 2 Offset 144
Decorate 16 ArrayStride 160
Decorate 18 ArrayStride 480
MemberDecorate 19(Block140) 0 Offset 0
MemberDecorate 19(Block140) 1 Offset 16
MemberDecorate 19(Block140) 2 Offset 976
Decorate 19(Block140) Block
Decorate 21(inst140) DescriptorSet 0
Decorate 21(inst140) Binding 0
Decorate 22 ArrayStride 16
MemberDecorate 23(S) 0 Offset 0
MemberDecorate 23(S) 1 ColMajor
MemberDecorate 23(S) 1 Offset 16
MemberDecorate 23(S) 1 MatrixStride 8
MemberDecorate 23(S) 2 Offset 80
Decorate 24 ArrayStride 96
Decorate 25 ArrayStride 288
MemberDecorate 26(Block430) 0 Offset 0
MemberDecorate 26(Block430) 1 Offset 16
MemberDecorate 26(Block430) 2 Offset 592
Decorate 26(Block430) BufferBlock
Decorate 28(inst430) DescriptorSet 0
Decorate 28(inst430) Binding 1
MemberDecorate 35(T) 0 RowMajor
MemberDecorate 35(T) 0 Offset 0
MemberDecorate 35(T) 0 MatrixStride 16
MemberDecorate 35(T) 1 Offset 32
MemberDecorate 36(Nestor) 0 Offset 0
MemberDecorate 37(Bt1) 0 Offset 0
Decorate 37(Bt1) Block
Decorate 39(Btn1) DescriptorSet 1
Decorate 39(Btn1) Binding 0
MemberDecorate 40(T) 0 ColMajor
MemberDecorate 40(T) 0 Offset 0
MemberDecorate 40(T) 0 MatrixStride 16
MemberDecorate 40(T) 1 Offset 32
MemberDecorate 41(Nestor) 0 Offset 0
MemberDecorate 42(Bt2) 0 Offset 0
Decorate 42(Bt2) Block
Decorate 44(Btn2) DescriptorSet 1
Decorate 44(Btn2) Binding 0
MemberDecorate 45(Bt3) 0 Offset 0
MemberDecorate 45(Bt3) 1 Offset 48
Decorate 45(Bt3) Block
Decorate 47(Btn3) DescriptorSet 1
Decorate 47(Btn3) Binding 0
MemberDecorate 48(T) 0 RowMajor
MemberDecorate 48(T) 0 Offset 0
MemberDecorate 48(T) 0 MatrixStride 8
MemberDecorate 48(T) 1 Offset 16
MemberDecorate 49(Nestor) 0 Offset 0
MemberDecorate 50(bBt1) 0 Offset 0
Decorate 50(bBt1) BufferBlock
Decorate 52(bBtn1) DescriptorSet 1
Decorate 52(bBtn1) Binding 0
MemberDecorate 53(T) 0 ColMajor
MemberDecorate 53(T) 0 Offset 0
MemberDecorate 53(T) 0 MatrixStride 8
MemberDecorate 53(T) 1 Offset 16
MemberDecorate 54(Nestor) 0 Offset 0
MemberDecorate 55(bBt2) 0 Offset 0
Decorate 55(bBt2) BufferBlock
Decorate 57(bBtn2) DescriptorSet 1
Decorate 57(bBtn2) Binding 0
MemberDecorate 58(bBt3) 0 Offset 0
MemberDecorate 58(bBt3) 1 Offset 24
Decorate 58(bBt3) BufferBlock
Decorate 60(bBtn3) DescriptorSet 1
Decorate 60(bBtn3) Binding 0
MemberDecorate 61(S) 0 Flat
MemberDecorate 61(S) 1 Flat
MemberDecorate 61(S) 2 Flat
MemberDecorate 64(S) 0 Invariant
MemberDecorate 64(S) 1 Invariant
MemberDecorate 64(S) 2 Invariant
Decorate 66(soutinv) Invariant
Decorate 68(gl_VertexID) BuiltIn VertexId
Decorate 69(gl_InstanceID) BuiltIn InstanceId
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeInt 32 0
8: TypeVector 7(int) 3
9: TypeFloat 32
10: TypeVector 9(float) 2
11: TypeMatrix 10(fvec2) 2
12: 7(int) Constant 4
13: TypeArray 11 12
14(S): TypeStruct 8(ivec3) 13 7(int)
15: 7(int) Constant 3
16: TypeArray 14(S) 15
17: 7(int) Constant 2
18: TypeArray 16 17
19(Block140): TypeStruct 6(int) 18 10(fvec2)
20: TypePointer Uniform 19(Block140)
21(inst140): 20(ptr) Variable Uniform
22: TypeArray 11 12
23(S): TypeStruct 8(ivec3) 22 7(int)
24: TypeArray 23(S) 15
25: TypeArray 24 17
26(Block430): TypeStruct 6(int) 25 10(fvec2)
27: TypePointer Uniform 26(Block430)
28(inst430): 27(ptr) Variable Uniform
29(S): TypeStruct 8(ivec3) 13 7(int)
30: TypePointer Private 29(S)
31(s): 30(ptr) Variable Private
32(T): TypeStruct 11 6(int)
33: TypePointer Private 32(T)
34(t): 33(ptr) Variable Private
35(T): TypeStruct 11 6(int)
36(Nestor): TypeStruct 35(T)
37(Bt1): TypeStruct 36(Nestor)
38: TypePointer Uniform 37(Bt1)
39(Btn1): 38(ptr) Variable Uniform
40(T): TypeStruct 11 6(int)
41(Nestor): TypeStruct 40(T)
42(Bt2): TypeStruct 41(Nestor)
43: TypePointer Uniform 42(Bt2)
44(Btn2): 43(ptr) Variable Uniform
45(Bt3): TypeStruct 41(Nestor) 36(Nestor)
46: TypePointer Uniform 45(Bt3)
47(Btn3): 46(ptr) Variable Uniform
48(T): TypeStruct 11 6(int)
49(Nestor): TypeStruct 48(T)
50(bBt1): TypeStruct 49(Nestor)
51: TypePointer Uniform 50(bBt1)
52(bBtn1): 51(ptr) Variable Uniform
53(T): TypeStruct 11 6(int)
54(Nestor): TypeStruct 53(T)
55(bBt2): TypeStruct 54(Nestor)
56: TypePointer Uniform 55(bBt2)
57(bBtn2): 56(ptr) Variable Uniform
58(bBt3): TypeStruct 49(Nestor) 54(Nestor)
59: TypePointer Uniform 58(bBt3)
60(bBtn3): 59(ptr) Variable Uniform
61(S): TypeStruct 8(ivec3) 13 7(int)
62: TypePointer Output 61(S)
63(sout): 62(ptr) Variable Output
64(S): TypeStruct 8(ivec3) 13 7(int)
65: TypePointer Output 64(S)
66(soutinv): 65(ptr) Variable Output
67: TypePointer Input 6(int)
68(gl_VertexID): 67(ptr) Variable Input
69(gl_InstanceID): 67(ptr) Variable Input
4(main): 2 Function None 3
5: Label
Return
FunctionEnd

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 14 EntryPoint Fragment 4 "main" 14 26
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 120 Source GLSL 120
Name 4 "main" Name 4 "main"

View file

@ -13,7 +13,7 @@ Linked fragment stage:
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 97 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"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
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 EntryPoint Fragment 4 "main" 11 597
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
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 EntryPoint Fragment 4 "main" 11 140
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 73 92 EntryPoint Vertex 4 "main" 69 73 92
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"
Name 14 "xf(mf33;vf3;" Name 14 "xf(mf33;vf3;"

View file

@ -1,10 +1,286 @@
spv.matrix.frag spv.matrix.frag
WARNING: 0:6: varying deprecated in version 130; may be removed in future release
WARNING: 0:17: varying deprecated in version 130; may be removed in future release
WARNING: 0:22: varying deprecated in version 130; may be removed in future release
Linked fragment stage: Linked fragment stage:
Missing functionality: Composite comparison of non-vectors // Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 240
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 12 14 28 140 148 166
ExecutionMode 4 OriginLowerLeft
Source GLSL 130
Name 4 "main"
Name 10 "sum34"
Name 12 "m1"
Name 14 "m2"
Name 28 "f"
Name 138 "sum3"
Name 140 "v4"
Name 145 "sum4"
Name 148 "v3"
Name 153 "m43"
Name 158 "m4"
Name 166 "color"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeMatrix 7(fvec4) 3
9: TypePointer Function 8
11: TypePointer Input 8
12(m1): 11(ptr) Variable Input
14(m2): 11(ptr) Variable Input
27: TypePointer Input 6(float)
28(f): 27(ptr) Variable Input
81: 6(float) Constant 1065353216
136: TypeVector 6(float) 3
137: TypePointer Function 136(fvec3)
139: TypePointer Input 7(fvec4)
140(v4): 139(ptr) Variable Input
144: TypePointer Function 7(fvec4)
147: TypePointer Input 136(fvec3)
148(v3): 147(ptr) Variable Input
151: TypeMatrix 136(fvec3) 4
152: TypePointer Function 151
156: TypeMatrix 7(fvec4) 4
157: TypePointer Function 156
165: TypePointer Output 7(fvec4)
166(color): 165(ptr) Variable Output
187: 6(float) Constant 0
4(main): 2 Function None 3
5: Label
10(sum34): 9(ptr) Variable Function
138(sum3): 137(ptr) Variable Function
145(sum4): 144(ptr) Variable Function
153(m43): 152(ptr) Variable Function
158(m4): 157(ptr) Variable Function
13: 8 Load 12(m1)
15: 8 Load 14(m2)
16: 7(fvec4) CompositeExtract 13 0
17: 7(fvec4) CompositeExtract 15 0
18: 7(fvec4) FSub 16 17
19: 7(fvec4) CompositeExtract 13 1
20: 7(fvec4) CompositeExtract 15 1
21: 7(fvec4) FSub 19 20
22: 7(fvec4) CompositeExtract 13 2
23: 7(fvec4) CompositeExtract 15 2
24: 7(fvec4) FSub 22 23
25: 8 CompositeConstruct 18 21 24
Store 10(sum34) 25
26: 8 Load 12(m1)
29: 6(float) Load 28(f)
30: 8 MatrixTimesScalar 26 29
31: 8 Load 10(sum34)
32: 7(fvec4) CompositeExtract 31 0
33: 7(fvec4) CompositeExtract 30 0
34: 7(fvec4) FAdd 32 33
35: 7(fvec4) CompositeExtract 31 1
36: 7(fvec4) CompositeExtract 30 1
37: 7(fvec4) FAdd 35 36
38: 7(fvec4) CompositeExtract 31 2
39: 7(fvec4) CompositeExtract 30 2
40: 7(fvec4) FAdd 38 39
41: 8 CompositeConstruct 34 37 40
Store 10(sum34) 41
42: 6(float) Load 28(f)
43: 8 Load 12(m1)
44: 8 MatrixTimesScalar 43 42
45: 8 Load 10(sum34)
46: 7(fvec4) CompositeExtract 45 0
47: 7(fvec4) CompositeExtract 44 0
48: 7(fvec4) FAdd 46 47
49: 7(fvec4) CompositeExtract 45 1
50: 7(fvec4) CompositeExtract 44 1
51: 7(fvec4) FAdd 49 50
52: 7(fvec4) CompositeExtract 45 2
53: 7(fvec4) CompositeExtract 44 2
54: 7(fvec4) FAdd 52 53
55: 8 CompositeConstruct 48 51 54
Store 10(sum34) 55
56: 8 Load 12(m1)
57: 8 Load 14(m2)
58: 7(fvec4) CompositeExtract 56 0
59: 7(fvec4) CompositeExtract 57 0
60: 7(fvec4) FMul 58 59
61: 7(fvec4) CompositeExtract 56 1
62: 7(fvec4) CompositeExtract 57 1
63: 7(fvec4) FMul 61 62
64: 7(fvec4) CompositeExtract 56 2
65: 7(fvec4) CompositeExtract 57 2
66: 7(fvec4) FMul 64 65
67: 8 CompositeConstruct 60 63 66
68: 8 Load 10(sum34)
69: 7(fvec4) CompositeExtract 68 0
70: 7(fvec4) CompositeExtract 67 0
71: 7(fvec4) FDiv 69 70
72: 7(fvec4) CompositeExtract 68 1
73: 7(fvec4) CompositeExtract 67 1
74: 7(fvec4) FDiv 72 73
75: 7(fvec4) CompositeExtract 68 2
76: 7(fvec4) CompositeExtract 67 2
77: 7(fvec4) FDiv 75 76
78: 8 CompositeConstruct 71 74 77
Store 10(sum34) 78
79: 8 Load 12(m1)
80: 6(float) Load 28(f)
82: 6(float) FDiv 81 80
83: 8 MatrixTimesScalar 79 82
84: 8 Load 10(sum34)
85: 7(fvec4) CompositeExtract 84 0
86: 7(fvec4) CompositeExtract 83 0
87: 7(fvec4) FAdd 85 86
88: 7(fvec4) CompositeExtract 84 1
89: 7(fvec4) CompositeExtract 83 1
90: 7(fvec4) FAdd 88 89
91: 7(fvec4) CompositeExtract 84 2
92: 7(fvec4) CompositeExtract 83 2
93: 7(fvec4) FAdd 91 92
94: 8 CompositeConstruct 87 90 93
Store 10(sum34) 94
95: 6(float) Load 28(f)
96: 8 Load 12(m1)
97: 7(fvec4) CompositeConstruct 95 95 95 95
98: 7(fvec4) CompositeExtract 96 0
99: 7(fvec4) FDiv 97 98
100: 7(fvec4) CompositeExtract 96 1
101: 7(fvec4) FDiv 97 100
102: 7(fvec4) CompositeExtract 96 2
103: 7(fvec4) FDiv 97 102
104: 8 CompositeConstruct 99 101 103
105: 8 Load 10(sum34)
106: 7(fvec4) CompositeExtract 105 0
107: 7(fvec4) CompositeExtract 104 0
108: 7(fvec4) FAdd 106 107
109: 7(fvec4) CompositeExtract 105 1
110: 7(fvec4) CompositeExtract 104 1
111: 7(fvec4) FAdd 109 110
112: 7(fvec4) CompositeExtract 105 2
113: 7(fvec4) CompositeExtract 104 2
114: 7(fvec4) FAdd 112 113
115: 8 CompositeConstruct 108 111 114
Store 10(sum34) 115
116: 6(float) Load 28(f)
117: 8 Load 10(sum34)
118: 7(fvec4) CompositeConstruct 116 116 116 116
119: 7(fvec4) CompositeExtract 117 0
120: 7(fvec4) FAdd 119 118
121: 7(fvec4) CompositeExtract 117 1
122: 7(fvec4) FAdd 121 118
123: 7(fvec4) CompositeExtract 117 2
124: 7(fvec4) FAdd 123 118
125: 8 CompositeConstruct 120 122 124
Store 10(sum34) 125
126: 6(float) Load 28(f)
127: 8 Load 10(sum34)
128: 7(fvec4) CompositeConstruct 126 126 126 126
129: 7(fvec4) CompositeExtract 127 0
130: 7(fvec4) FSub 129 128
131: 7(fvec4) CompositeExtract 127 1
132: 7(fvec4) FSub 131 128
133: 7(fvec4) CompositeExtract 127 2
134: 7(fvec4) FSub 133 128
135: 8 CompositeConstruct 130 132 134
Store 10(sum34) 135
141: 7(fvec4) Load 140(v4)
142: 8 Load 14(m2)
143: 136(fvec3) VectorTimesMatrix 141 142
Store 138(sum3) 143
146: 8 Load 14(m2)
149: 136(fvec3) Load 148(v3)
150: 7(fvec4) MatrixTimesVector 146 149
Store 145(sum4) 150
154: 8 Load 10(sum34)
155: 151 Transpose 154
Store 153(m43) 155
159: 8 Load 12(m1)
160: 151 Load 153(m43)
161: 156 MatrixTimesMatrix 159 160
Store 158(m4) 161
162: 7(fvec4) Load 140(v4)
163: 156 Load 158(m4)
164: 7(fvec4) VectorTimesMatrix 162 163
Store 145(sum4) 164
167: 7(fvec4) Load 145(sum4)
Store 166(color) 167
168: 8 Load 10(sum34)
169: 7(fvec4) CompositeConstruct 81 81 81 81
170: 7(fvec4) CompositeExtract 168 0
171: 7(fvec4) FAdd 170 169
172: 7(fvec4) CompositeExtract 168 1
173: 7(fvec4) FAdd 172 169
174: 7(fvec4) CompositeExtract 168 2
175: 7(fvec4) FAdd 174 169
176: 8 CompositeConstruct 171 173 175
Store 10(sum34) 176
177: 8 Load 10(sum34)
178: 7(fvec4) CompositeConstruct 81 81 81 81
179: 7(fvec4) CompositeExtract 177 0
180: 7(fvec4) FSub 179 178
181: 7(fvec4) CompositeExtract 177 1
182: 7(fvec4) FSub 181 178
183: 7(fvec4) CompositeExtract 177 2
184: 7(fvec4) FSub 183 178
185: 8 CompositeConstruct 180 182 184
Store 10(sum34) 185
186: 6(float) Load 28(f)
188: 7(fvec4) CompositeConstruct 186 187 187 187
189: 7(fvec4) CompositeConstruct 187 186 187 187
190: 7(fvec4) CompositeConstruct 187 187 186 187
191: 8 CompositeConstruct 188 189 190
192: 8 Load 10(sum34)
193: 7(fvec4) CompositeExtract 192 0
194: 7(fvec4) CompositeExtract 191 0
195: 7(fvec4) FAdd 193 194
196: 7(fvec4) CompositeExtract 192 1
197: 7(fvec4) CompositeExtract 191 1
198: 7(fvec4) FAdd 196 197
199: 7(fvec4) CompositeExtract 192 2
200: 7(fvec4) CompositeExtract 191 2
201: 7(fvec4) FAdd 199 200
202: 8 CompositeConstruct 195 198 201
Store 10(sum34) 202
203: 136(fvec3) Load 148(v3)
204: 6(float) Load 28(f)
205: 136(fvec3) Load 148(v3)
206: 6(float) Load 28(f)
207: 136(fvec3) Load 148(v3)
208: 6(float) Load 28(f)
209: 6(float) CompositeExtract 203 0
210: 6(float) CompositeExtract 203 1
211: 6(float) CompositeExtract 203 2
212: 6(float) CompositeExtract 205 0
213: 6(float) CompositeExtract 205 1
214: 6(float) CompositeExtract 205 2
215: 6(float) CompositeExtract 207 0
216: 6(float) CompositeExtract 207 1
217: 6(float) CompositeExtract 207 2
218: 7(fvec4) CompositeConstruct 209 210 211 204
219: 7(fvec4) CompositeConstruct 212 213 214 206
220: 7(fvec4) CompositeConstruct 215 216 217 208
221: 8 CompositeConstruct 218 219 220
222: 8 Load 10(sum34)
223: 7(fvec4) CompositeExtract 222 0
224: 7(fvec4) CompositeExtract 221 0
225: 7(fvec4) FAdd 223 224
226: 7(fvec4) CompositeExtract 222 1
227: 7(fvec4) CompositeExtract 221 1
228: 7(fvec4) FAdd 226 227
229: 7(fvec4) CompositeExtract 222 2
230: 7(fvec4) CompositeExtract 221 2
231: 7(fvec4) FAdd 229 230
232: 8 CompositeConstruct 225 228 231
Store 10(sum34) 232
233: 136(fvec3) Load 138(sum3)
234: 151 Load 153(m43)
235: 7(fvec4) VectorTimesMatrix 233 234
236: 7(fvec4) Load 145(sum4)
237: 7(fvec4) FAdd 235 236
238: 7(fvec4) Load 166(color)
239: 7(fvec4) FAdd 238 237
Store 166(color) 239
Return
FunctionEnd

View file

@ -1,10 +1,265 @@
spv.matrix2.frag spv.matrix2.frag
WARNING: 0:4: varying deprecated in version 130; may be removed in future release
WARNING: 0:13: varying deprecated in version 130; may be removed in future release
WARNING: 0:15: varying deprecated in version 130; may be removed in future release
Linked fragment stage: Linked fragment stage:
Missing functionality: binary operation on matrix // Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 213
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 12 16 37 38 65 87 139 150 173 210 211 212
ExecutionMode 4 OriginLowerLeft
Source GLSL 150
Name 4 "main"
Name 10 "m34"
Name 12 "v"
Name 16 "u"
Name 37 "FragColor"
Name 38 "Color"
Name 63 "m44"
Name 65 "un34"
Name 87 "um43"
Name 139 "um4"
Name 148 "inv"
Name 150 "um2"
Name 171 "inv3"
Name 173 "um3"
Name 182 "inv4"
Name 210 "colorTransform"
Name 211 "m"
Name 212 "n"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeMatrix 7(fvec4) 3
9: TypePointer Function 8
11: TypePointer Input 7(fvec4)
12(v): 11(ptr) Variable Input
14: TypeVector 6(float) 3
15: TypePointer Input 14(fvec3)
16(u): 15(ptr) Variable Input
19: 6(float) Constant 1082759578
20: 6(float) Constant 0
21: 7(fvec4) ConstantComposite 19 20 20 20
22: 7(fvec4) ConstantComposite 20 19 20 20
23: 7(fvec4) ConstantComposite 20 20 19 20
24: 8 ConstantComposite 21 22 23
36: TypePointer Output 7(fvec4)
37(FragColor): 36(ptr) Variable Output
38(Color): 15(ptr) Variable Input
40: 6(float) Constant 1065353216
54: TypeInt 32 0
55: 54(int) Constant 0
56: TypePointer Input 6(float)
61: TypeMatrix 7(fvec4) 4
62: TypePointer Function 61
64: TypePointer Input 8
65(un34): 64(ptr) Variable Input
85: TypeMatrix 14(fvec3) 4
86: TypePointer Input 85
87(um43): 86(ptr) Variable Input
138: TypePointer Input 61
139(um4): 138(ptr) Variable Input
145: TypeVector 6(float) 2
146: TypeMatrix 145(fvec2) 2
147: TypePointer Function 146
149: TypePointer Input 146
150(um2): 149(ptr) Variable Input
153: TypeInt 32 1
154: 153(int) Constant 0
155: TypePointer Function 6(float)
158: 153(int) Constant 1
161: 54(int) Constant 1
169: TypeMatrix 14(fvec3) 3
170: TypePointer Function 169
172: TypePointer Input 169
173(um3): 172(ptr) Variable Input
176: 153(int) Constant 2
202: 54(int) Constant 3
203: TypePointer Output 6(float)
210(colorTransform): 172(ptr) Variable Input
211(m): 138(ptr) Variable Input
212(n): 138(ptr) Variable Input
4(main): 2 Function None 3
5: Label
10(m34): 9(ptr) Variable Function
63(m44): 62(ptr) Variable Function
148(inv): 147(ptr) Variable Function
171(inv3): 170(ptr) Variable Function
182(inv4): 62(ptr) Variable Function
13: 7(fvec4) Load 12(v)
17: 14(fvec3) Load 16(u)
18: 8 OuterProduct 13 17
Store 10(m34) 18
25: 8 Load 10(m34)
26: 7(fvec4) CompositeExtract 25 0
27: 7(fvec4) CompositeExtract 24 0
28: 7(fvec4) FAdd 26 27
29: 7(fvec4) CompositeExtract 25 1
30: 7(fvec4) CompositeExtract 24 1
31: 7(fvec4) FAdd 29 30
32: 7(fvec4) CompositeExtract 25 2
33: 7(fvec4) CompositeExtract 24 2
34: 7(fvec4) FAdd 32 33
35: 8 CompositeConstruct 28 31 34
Store 10(m34) 35
39: 14(fvec3) Load 38(Color)
41: 6(float) CompositeExtract 39 0
42: 6(float) CompositeExtract 39 1
43: 6(float) CompositeExtract 39 2
44: 7(fvec4) CompositeConstruct 41 42 43 40
Store 37(FragColor) 44
45: 7(fvec4) Load 37(FragColor)
46: 8 Load 10(m34)
47: 14(fvec3) VectorTimesMatrix 45 46
48: 6(float) CompositeExtract 47 0
49: 6(float) CompositeExtract 47 1
50: 6(float) CompositeExtract 47 2
51: 7(fvec4) CompositeConstruct 48 49 50 40
52: 7(fvec4) Load 37(FragColor)
53: 7(fvec4) FMul 52 51
Store 37(FragColor) 53
57: 56(ptr) AccessChain 12(v) 55
58: 6(float) Load 57
59: 8 Load 10(m34)
60: 8 MatrixTimesScalar 59 58
Store 10(m34) 60
66: 8 Load 65(un34)
67: 6(float) CompositeExtract 66 0 0
68: 6(float) CompositeExtract 66 0 1
69: 6(float) CompositeExtract 66 0 2
70: 6(float) CompositeExtract 66 0 3
71: 6(float) CompositeExtract 66 1 0
72: 6(float) CompositeExtract 66 1 1
73: 6(float) CompositeExtract 66 1 2
74: 6(float) CompositeExtract 66 1 3
75: 6(float) CompositeExtract 66 2 0
76: 6(float) CompositeExtract 66 2 1
77: 6(float) CompositeExtract 66 2 2
78: 6(float) CompositeExtract 66 2 3
79: 7(fvec4) CompositeConstruct 67 68 69 70
80: 7(fvec4) CompositeConstruct 71 72 73 74
81: 7(fvec4) CompositeConstruct 75 76 77 78
82: 7(fvec4) CompositeConstruct 20 20 20 40
83: 61 CompositeConstruct 79 80 81 82
Store 63(m44) 83
84: 8 Load 10(m34)
88: 85 Load 87(um43)
89: 61 MatrixTimesMatrix 84 88
90: 61 Load 63(m44)
91: 7(fvec4) CompositeExtract 90 0
92: 7(fvec4) CompositeExtract 89 0
93: 7(fvec4) FAdd 91 92
94: 7(fvec4) CompositeExtract 90 1
95: 7(fvec4) CompositeExtract 89 1
96: 7(fvec4) FAdd 94 95
97: 7(fvec4) CompositeExtract 90 2
98: 7(fvec4) CompositeExtract 89 2
99: 7(fvec4) FAdd 97 98
100: 7(fvec4) CompositeExtract 90 3
101: 7(fvec4) CompositeExtract 89 3
102: 7(fvec4) FAdd 100 101
103: 61 CompositeConstruct 93 96 99 102
Store 63(m44) 103
104: 61 Load 63(m44)
105: 61 FNegate 104
106: 7(fvec4) Load 12(v)
107: 7(fvec4) MatrixTimesVector 105 106
108: 7(fvec4) Load 37(FragColor)
109: 7(fvec4) FAdd 108 107
Store 37(FragColor) 109
110: 61 Load 63(m44)
111: 61 Load 63(m44)
112: 7(fvec4) CompositeExtract 110 0
113: 7(fvec4) CompositeExtract 111 0
114: 7(fvec4) FMul 112 113
115: 7(fvec4) CompositeExtract 110 1
116: 7(fvec4) CompositeExtract 111 1
117: 7(fvec4) FMul 115 116
118: 7(fvec4) CompositeExtract 110 2
119: 7(fvec4) CompositeExtract 111 2
120: 7(fvec4) FMul 118 119
121: 7(fvec4) CompositeExtract 110 3
122: 7(fvec4) CompositeExtract 111 3
123: 7(fvec4) FMul 121 122
124: 61 CompositeConstruct 114 117 120 123
125: 7(fvec4) Load 37(FragColor)
126: 7(fvec4) VectorTimesMatrix 125 124
Store 37(FragColor) 126
127: 85 Load 87(um43)
128: 8 Transpose 127
Store 10(m34) 128
129: 7(fvec4) Load 37(FragColor)
130: 8 Load 10(m34)
131: 14(fvec3) VectorTimesMatrix 129 130
132: 6(float) CompositeExtract 131 0
133: 6(float) CompositeExtract 131 1
134: 6(float) CompositeExtract 131 2
135: 7(fvec4) CompositeConstruct 132 133 134 40
136: 7(fvec4) Load 37(FragColor)
137: 7(fvec4) FMul 136 135
Store 37(FragColor) 137
140: 61 Load 139(um4)
141: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 140
142: 7(fvec4) CompositeConstruct 141 141 141 141
143: 7(fvec4) Load 37(FragColor)
144: 7(fvec4) FMul 143 142
Store 37(FragColor) 144
151: 146 Load 150(um2)
152: 146 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 151
Store 148(inv) 152
156: 155(ptr) AccessChain 148(inv) 154 55
157: 6(float) Load 156
159: 155(ptr) AccessChain 148(inv) 158 55
160: 6(float) Load 159
162: 155(ptr) AccessChain 148(inv) 154 161
163: 6(float) Load 162
164: 155(ptr) AccessChain 148(inv) 158 161
165: 6(float) Load 164
166: 7(fvec4) CompositeConstruct 157 160 163 165
167: 7(fvec4) Load 37(FragColor)
168: 7(fvec4) FMul 167 166
Store 37(FragColor) 168
174: 169 Load 173(um3)
175: 169 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 174
Store 171(inv3) 175
177: 155(ptr) AccessChain 171(inv3) 176 161
178: 6(float) Load 177
179: 7(fvec4) CompositeConstruct 178 178 178 178
180: 7(fvec4) Load 37(FragColor)
181: 7(fvec4) FMul 180 179
Store 37(FragColor) 181
183: 61 Load 139(um4)
184: 61 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 183
Store 182(inv4) 184
185: 61 Load 182(inv4)
186: 7(fvec4) Load 37(FragColor)
187: 7(fvec4) VectorTimesMatrix 186 185
Store 37(FragColor) 187
188: 7(fvec4) Load 37(FragColor)
189: 8 Load 65(un34)
190: 8 Load 65(un34)
191: 7(fvec4) CompositeExtract 189 0
192: 7(fvec4) CompositeExtract 190 0
193: 7(fvec4) FMul 191 192
194: 7(fvec4) CompositeExtract 189 1
195: 7(fvec4) CompositeExtract 190 1
196: 7(fvec4) FMul 194 195
197: 7(fvec4) CompositeExtract 189 2
198: 7(fvec4) CompositeExtract 190 2
199: 7(fvec4) FMul 197 198
200: 8 CompositeConstruct 193 196 199
201: 14(fvec3) VectorTimesMatrix 188 200
204: 203(ptr) AccessChain 37(FragColor) 202
205: 6(float) Load 204
206: 6(float) CompositeExtract 201 0
207: 6(float) CompositeExtract 201 1
208: 6(float) CompositeExtract 201 2
209: 7(fvec4) CompositeConstruct 206 207 208 205
Store 37(FragColor) 209
Return
FunctionEnd

View file

@ -7,12 +7,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 277 // Id's are bound by 278
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 29 17 55 26 84 91 81 276 246 EntryPoint Fragment 4 "main" 17 26 29 55 81 84 91 247 277
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 430 Source GLSL 430
Name 4 "main" Name 4 "main"
@ -39,17 +39,17 @@ Linked fragment stage:
Name 227 "is2DArray" Name 227 "is2DArray"
Name 237 "iv2" Name 237 "iv2"
Name 241 "sCubeShadow" Name 241 "sCubeShadow"
Name 246 "FragData" Name 247 "FragData"
Name 258 "is2Dms" Name 259 "is2Dms"
Name 262 "us2D" Name 263 "us2D"
Name 266 "us3D" Name 267 "us3D"
Name 270 "usCube" Name 271 "usCube"
Name 274 "us2DArray" Name 275 "us2DArray"
Name 276 "ic4D" Name 277 "ic4D"
Decorate 81(ic3D) Flat Decorate 81(ic3D) Flat
Decorate 84(ic1D) Flat Decorate 84(ic1D) Flat
Decorate 91(ic2D) Flat Decorate 91(ic2D) Flat
Decorate 276(ic4D) Flat Decorate 277(ic4D) Flat
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -140,31 +140,31 @@ Linked fragment stage:
240: TypePointer UniformConstant 239 240: TypePointer UniformConstant 239
241(sCubeShadow): 240(ptr) Variable UniformConstant 241(sCubeShadow): 240(ptr) Variable UniformConstant
243: 67(int) Constant 2 243: 67(int) Constant 2
245: TypePointer Output 7(fvec4) 246: TypePointer Output 7(fvec4)
246(FragData): 245(ptr) Variable Output 247(FragData): 246(ptr) Variable Output
250: 6(float) Constant 0 251: 6(float) Constant 0
255: TypeImage 67(int) 2D multi-sampled sampled format:Unknown 256: TypeImage 67(int) 2D multi-sampled sampled format:Unknown
256: TypeSampledImage 255 257: TypeSampledImage 256
257: TypePointer UniformConstant 256 258: TypePointer UniformConstant 257
258(is2Dms): 257(ptr) Variable UniformConstant 259(is2Dms): 258(ptr) Variable UniformConstant
259: TypeImage 32(int) 2D sampled format:Unknown 260: TypeImage 32(int) 2D sampled format:Unknown
260: TypeSampledImage 259 261: TypeSampledImage 260
261: TypePointer UniformConstant 260 262: TypePointer UniformConstant 261
262(us2D): 261(ptr) Variable UniformConstant 263(us2D): 262(ptr) Variable UniformConstant
263: TypeImage 32(int) 3D sampled format:Unknown 264: TypeImage 32(int) 3D sampled format:Unknown
264: TypeSampledImage 263 265: TypeSampledImage 264
265: TypePointer UniformConstant 264 266: TypePointer UniformConstant 265
266(us3D): 265(ptr) Variable UniformConstant 267(us3D): 266(ptr) Variable UniformConstant
267: TypeImage 32(int) Cube sampled format:Unknown 268: TypeImage 32(int) Cube sampled format:Unknown
268: TypeSampledImage 267 269: TypeSampledImage 268
269: TypePointer UniformConstant 268 270: TypePointer UniformConstant 269
270(usCube): 269(ptr) Variable UniformConstant 271(usCube): 270(ptr) Variable UniformConstant
271: TypeImage 32(int) 2D array sampled format:Unknown 272: TypeImage 32(int) 2D array sampled format:Unknown
272: TypeSampledImage 271 273: TypeSampledImage 272
273: TypePointer UniformConstant 272 274: TypePointer UniformConstant 273
274(us2DArray): 273(ptr) Variable UniformConstant 275(us2DArray): 274(ptr) Variable UniformConstant
275: TypePointer Input 162(ivec4) 276: TypePointer Input 162(ivec4)
276(ic4D): 275(ptr) Variable Input 277(ic4D): 276(ptr) Variable Input
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(v): 8(ptr) Variable Function 9(v): 8(ptr) Variable Function
@ -345,15 +345,16 @@ Linked fragment stage:
235: 7(fvec4) FAdd 234 233 235: 7(fvec4) FAdd 234 233
Store 9(v) 235 Store 9(v) 235
242: 239 Load 241(sCubeShadow) 242: 239 Load 241(sCubeShadow)
244: 68(ivec2) ImageQuerySizeLod 242 243 244: 238 Image 242
Store 237(iv2) 244 245: 68(ivec2) ImageQuerySizeLod 244 243
247: 7(fvec4) Load 9(v) Store 237(iv2) 245
248: 68(ivec2) Load 237(iv2) 248: 7(fvec4) Load 9(v)
249: 15(fvec2) ConvertSToF 248 249: 68(ivec2) Load 237(iv2)
251: 6(float) CompositeExtract 249 0 250: 15(fvec2) ConvertSToF 249
252: 6(float) CompositeExtract 249 1 252: 6(float) CompositeExtract 250 0
253: 7(fvec4) CompositeConstruct 251 252 250 250 253: 6(float) CompositeExtract 250 1
254: 7(fvec4) FAdd 247 253 254: 7(fvec4) CompositeConstruct 252 253 251 251
Store 246(FragData) 254 255: 7(fvec4) FAdd 248 254
Store 247(FragData) 255
Return Return
FunctionEnd FunctionEnd

View file

@ -10,7 +10,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 12 55 EntryPoint Vertex 4 "main" 12 28 55
Source GLSL 120 Source GLSL 120
Name 4 "main" Name 4 "main"
Name 9 "a" Name 9 "a"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 57 59 23 71 EntryPoint Fragment 4 "main" 23 57 59 71
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source ESSL 300 Source ESSL 300
Name 4 "main" Name 4 "main"
@ -168,7 +168,7 @@ Linked fragment stage:
18(bv2): 16(ptr) FunctionParameter 18(bv2): 16(ptr) FunctionParameter
20: Label 20: Label
27: 15(bvec2) Load 18(bv2) 27: 15(bvec2) Load 18(bv2)
31: 15(bvec2) IEqual 27 30 31: 15(bvec2) LogicalEqual 27 30
32: 14(bool) All 31 32: 14(bool) All 31
ReturnValue 32 ReturnValue 32
FunctionEnd FunctionEnd

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" EntryPoint Fragment 4 "main" 90
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 140 Source GLSL 140
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 11 9 13 15 17 19 23 24 EntryPoint Vertex 4 "main" 9 11 13 15 17 19 23 24
Source GLSL 430 Source GLSL 430
Name 4 "main" Name 4 "main"
Name 9 "outVc" Name 9 "outVc"

View file

@ -7,7 +7,7 @@ Linked fragment stage:
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 80001 // Generated by (magic number): 80001
// Id's are bound by 211 // Id's are bound by 237
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
@ -19,28 +19,28 @@ Linked fragment stage:
Name 9 "lod" Name 9 "lod"
Name 13 "samp1D" Name 13 "samp1D"
Name 16 "pf" Name 16 "pf"
Name 23 "isamp2D" Name 24 "isamp2D"
Name 25 "pf2" Name 26 "pf2"
Name 34 "usamp3D" Name 36 "usamp3D"
Name 38 "pf3" Name 40 "pf3"
Name 46 "sampCube" Name 49 "sampCube"
Name 55 "isamp1DA" Name 59 "isamp1DA"
Name 64 "usamp2DA" Name 69 "usamp2DA"
Name 73 "isampCubeA" Name 79 "isampCubeA"
Name 82 "samp1Ds" Name 89 "samp1Ds"
Name 91 "samp2Ds" Name 99 "samp2Ds"
Name 100 "sampCubes" Name 109 "sampCubes"
Name 109 "samp1DAs" Name 119 "samp1DAs"
Name 118 "samp2DAs" Name 129 "samp2DAs"
Name 127 "sampCubeAs" Name 139 "sampCubeAs"
Name 134 "levels" Name 147 "levels"
Name 140 "usamp2D" Name 154 "usamp2D"
Name 148 "isamp3D" Name 163 "isamp3D"
Name 156 "isampCube" Name 172 "isampCube"
Name 168 "samp2DA" Name 186 "samp2DA"
Name 176 "usampCubeA" Name 195 "usampCubeA"
Name 206 "sampBuf" Name 232 "sampBuf"
Name 210 "sampRect" Name 236 "sampRect"
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -51,230 +51,256 @@ Linked fragment stage:
12: TypePointer UniformConstant 11 12: TypePointer UniformConstant 11
13(samp1D): 12(ptr) Variable UniformConstant 13(samp1D): 12(ptr) Variable UniformConstant
15: TypePointer Function 6(float) 15: TypePointer Function 6(float)
19: TypeInt 32 1 20: TypeInt 32 1
20: TypeImage 19(int) 2D sampled format:Unknown 21: TypeImage 20(int) 2D sampled format:Unknown
21: TypeSampledImage 20 22: TypeSampledImage 21
22: TypePointer UniformConstant 21 23: TypePointer UniformConstant 22
23(isamp2D): 22(ptr) Variable UniformConstant 24(isamp2D): 23(ptr) Variable UniformConstant
30: TypeInt 32 0 32: TypeInt 32 0
31: TypeImage 30(int) 3D sampled format:Unknown 33: TypeImage 32(int) 3D sampled format:Unknown
32: TypeSampledImage 31 34: TypeSampledImage 33
33: TypePointer UniformConstant 32 35: TypePointer UniformConstant 34
34(usamp3D): 33(ptr) Variable UniformConstant 36(usamp3D): 35(ptr) Variable UniformConstant
36: TypeVector 6(float) 3 38: TypeVector 6(float) 3
37: TypePointer Function 36(fvec3) 39: TypePointer Function 38(fvec3)
43: TypeImage 6(float) Cube sampled format:Unknown 46: TypeImage 6(float) Cube sampled format:Unknown
44: TypeSampledImage 43 47: TypeSampledImage 46
45: TypePointer UniformConstant 44 48: TypePointer UniformConstant 47
46(sampCube): 45(ptr) Variable UniformConstant 49(sampCube): 48(ptr) Variable UniformConstant
52: TypeImage 19(int) 1D array sampled format:Unknown 56: TypeImage 20(int) 1D array sampled format:Unknown
53: TypeSampledImage 52 57: TypeSampledImage 56
54: TypePointer UniformConstant 53 58: TypePointer UniformConstant 57
55(isamp1DA): 54(ptr) Variable UniformConstant 59(isamp1DA): 58(ptr) Variable UniformConstant
61: TypeImage 30(int) 2D array sampled format:Unknown 66: TypeImage 32(int) 2D array sampled format:Unknown
62: TypeSampledImage 61 67: TypeSampledImage 66
63: TypePointer UniformConstant 62 68: TypePointer UniformConstant 67
64(usamp2DA): 63(ptr) Variable UniformConstant 69(usamp2DA): 68(ptr) Variable UniformConstant
70: TypeImage 19(int) Cube array sampled format:Unknown 76: TypeImage 20(int) Cube array sampled format:Unknown
71: TypeSampledImage 70 77: TypeSampledImage 76
72: TypePointer UniformConstant 71 78: TypePointer UniformConstant 77
73(isampCubeA): 72(ptr) Variable UniformConstant 79(isampCubeA): 78(ptr) Variable UniformConstant
79: TypeImage 6(float) 1D depth sampled format:Unknown 86: TypeImage 6(float) 1D depth sampled format:Unknown
80: TypeSampledImage 79 87: TypeSampledImage 86
81: TypePointer UniformConstant 80 88: TypePointer UniformConstant 87
82(samp1Ds): 81(ptr) Variable UniformConstant 89(samp1Ds): 88(ptr) Variable UniformConstant
88: TypeImage 6(float) 2D depth sampled format:Unknown 96: TypeImage 6(float) 2D depth sampled format:Unknown
89: TypeSampledImage 88 97: TypeSampledImage 96
90: TypePointer UniformConstant 89 98: TypePointer UniformConstant 97
91(samp2Ds): 90(ptr) Variable UniformConstant 99(samp2Ds): 98(ptr) Variable UniformConstant
97: TypeImage 6(float) Cube depth sampled format:Unknown 106: TypeImage 6(float) Cube depth sampled format:Unknown
98: TypeSampledImage 97
99: TypePointer UniformConstant 98
100(sampCubes): 99(ptr) Variable UniformConstant
106: TypeImage 6(float) 1D depth array sampled format:Unknown
107: TypeSampledImage 106 107: TypeSampledImage 106
108: TypePointer UniformConstant 107 108: TypePointer UniformConstant 107
109(samp1DAs): 108(ptr) Variable UniformConstant 109(sampCubes): 108(ptr) Variable UniformConstant
115: TypeImage 6(float) 2D depth array sampled format:Unknown 116: TypeImage 6(float) 1D depth array sampled format:Unknown
116: TypeSampledImage 115 117: TypeSampledImage 116
117: TypePointer UniformConstant 116 118: TypePointer UniformConstant 117
118(samp2DAs): 117(ptr) Variable UniformConstant 119(samp1DAs): 118(ptr) Variable UniformConstant
124: TypeImage 6(float) Cube depth array sampled format:Unknown 126: TypeImage 6(float) 2D depth array sampled format:Unknown
125: TypeSampledImage 124 127: TypeSampledImage 126
126: TypePointer UniformConstant 125 128: TypePointer UniformConstant 127
127(sampCubeAs): 126(ptr) Variable UniformConstant 129(samp2DAs): 128(ptr) Variable UniformConstant
133: TypePointer Function 19(int) 136: TypeImage 6(float) Cube depth array sampled format:Unknown
137: TypeImage 30(int) 2D sampled format:Unknown 137: TypeSampledImage 136
138: TypeSampledImage 137 138: TypePointer UniformConstant 137
139: TypePointer UniformConstant 138 139(sampCubeAs): 138(ptr) Variable UniformConstant
140(usamp2D): 139(ptr) Variable UniformConstant 146: TypePointer Function 20(int)
145: TypeImage 19(int) 3D sampled format:Unknown 151: TypeImage 32(int) 2D sampled format:Unknown
146: TypeSampledImage 145 152: TypeSampledImage 151
147: TypePointer UniformConstant 146 153: TypePointer UniformConstant 152
148(isamp3D): 147(ptr) Variable UniformConstant 154(usamp2D): 153(ptr) Variable UniformConstant
153: TypeImage 19(int) Cube sampled format:Unknown 160: TypeImage 20(int) 3D sampled format:Unknown
154: TypeSampledImage 153 161: TypeSampledImage 160
155: TypePointer UniformConstant 154 162: TypePointer UniformConstant 161
156(isampCube): 155(ptr) Variable UniformConstant 163(isamp3D): 162(ptr) Variable UniformConstant
165: TypeImage 6(float) 2D array sampled format:Unknown 169: TypeImage 20(int) Cube sampled format:Unknown
166: TypeSampledImage 165 170: TypeSampledImage 169
167: TypePointer UniformConstant 166 171: TypePointer UniformConstant 170
168(samp2DA): 167(ptr) Variable UniformConstant 172(isampCube): 171(ptr) Variable UniformConstant
173: TypeImage 30(int) Cube array sampled format:Unknown 183: TypeImage 6(float) 2D array sampled format:Unknown
174: TypeSampledImage 173 184: TypeSampledImage 183
175: TypePointer UniformConstant 174 185: TypePointer UniformConstant 184
176(usampCubeA): 175(ptr) Variable UniformConstant 186(samp2DA): 185(ptr) Variable UniformConstant
203: TypeImage 6(float) Buffer sampled format:Unknown 192: TypeImage 32(int) Cube array sampled format:Unknown
204: TypeSampledImage 203 193: TypeSampledImage 192
205: TypePointer UniformConstant 204 194: TypePointer UniformConstant 193
206(sampBuf): 205(ptr) Variable UniformConstant 195(usampCubeA): 194(ptr) Variable UniformConstant
207: TypeImage 6(float) Rect sampled format:Unknown 229: TypeImage 6(float) Buffer sampled format:Unknown
208: TypeSampledImage 207 230: TypeSampledImage 229
209: TypePointer UniformConstant 208 231: TypePointer UniformConstant 230
210(sampRect): 209(ptr) Variable UniformConstant 232(sampBuf): 231(ptr) Variable UniformConstant
233: TypeImage 6(float) Rect sampled format:Unknown
234: TypeSampledImage 233
235: TypePointer UniformConstant 234
236(sampRect): 235(ptr) Variable UniformConstant
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
9(lod): 8(ptr) Variable Function 9(lod): 8(ptr) Variable Function
16(pf): 15(ptr) Variable Function 16(pf): 15(ptr) Variable Function
25(pf2): 8(ptr) Variable Function 26(pf2): 8(ptr) Variable Function
38(pf3): 37(ptr) Variable Function 40(pf3): 39(ptr) Variable Function
134(levels): 133(ptr) Variable Function 147(levels): 146(ptr) Variable Function
14: 11 Load 13(samp1D) 14: 11 Load 13(samp1D)
17: 6(float) Load 16(pf) 17: 6(float) Load 16(pf)
18: 7(fvec2) ImageQueryLod 14 17 18: 10 Image 14
Store 9(lod) 18 19: 7(fvec2) ImageQueryLod 18 17
24: 21 Load 23(isamp2D) Store 9(lod) 19
26: 7(fvec2) Load 25(pf2) 25: 22 Load 24(isamp2D)
27: 7(fvec2) ImageQueryLod 24 26 27: 7(fvec2) Load 26(pf2)
28: 7(fvec2) Load 9(lod) 28: 21 Image 25
29: 7(fvec2) FAdd 28 27 29: 7(fvec2) ImageQueryLod 28 27
Store 9(lod) 29 30: 7(fvec2) Load 9(lod)
35: 32 Load 34(usamp3D) 31: 7(fvec2) FAdd 30 29
39: 36(fvec3) Load 38(pf3) Store 9(lod) 31
40: 7(fvec2) ImageQueryLod 35 39 37: 34 Load 36(usamp3D)
41: 7(fvec2) Load 9(lod) 41: 38(fvec3) Load 40(pf3)
42: 7(fvec2) FAdd 41 40 42: 33 Image 37
Store 9(lod) 42 43: 7(fvec2) ImageQueryLod 42 41
47: 44 Load 46(sampCube) 44: 7(fvec2) Load 9(lod)
48: 36(fvec3) Load 38(pf3) 45: 7(fvec2) FAdd 44 43
49: 7(fvec2) ImageQueryLod 47 48 Store 9(lod) 45
50: 7(fvec2) Load 9(lod) 50: 47 Load 49(sampCube)
51: 7(fvec2) FAdd 50 49 51: 38(fvec3) Load 40(pf3)
Store 9(lod) 51 52: 46 Image 50
56: 53 Load 55(isamp1DA) 53: 7(fvec2) ImageQueryLod 52 51
57: 6(float) Load 16(pf) 54: 7(fvec2) Load 9(lod)
58: 7(fvec2) ImageQueryLod 56 57 55: 7(fvec2) FAdd 54 53
59: 7(fvec2) Load 9(lod) Store 9(lod) 55
60: 7(fvec2) FAdd 59 58 60: 57 Load 59(isamp1DA)
Store 9(lod) 60 61: 6(float) Load 16(pf)
65: 62 Load 64(usamp2DA) 62: 56 Image 60
66: 7(fvec2) Load 25(pf2) 63: 7(fvec2) ImageQueryLod 62 61
67: 7(fvec2) ImageQueryLod 65 66 64: 7(fvec2) Load 9(lod)
68: 7(fvec2) Load 9(lod) 65: 7(fvec2) FAdd 64 63
69: 7(fvec2) FAdd 68 67 Store 9(lod) 65
Store 9(lod) 69 70: 67 Load 69(usamp2DA)
74: 71 Load 73(isampCubeA) 71: 7(fvec2) Load 26(pf2)
75: 36(fvec3) Load 38(pf3) 72: 66 Image 70
76: 7(fvec2) ImageQueryLod 74 75 73: 7(fvec2) ImageQueryLod 72 71
77: 7(fvec2) Load 9(lod) 74: 7(fvec2) Load 9(lod)
78: 7(fvec2) FAdd 77 76 75: 7(fvec2) FAdd 74 73
Store 9(lod) 78 Store 9(lod) 75
83: 80 Load 82(samp1Ds) 80: 77 Load 79(isampCubeA)
84: 6(float) Load 16(pf) 81: 38(fvec3) Load 40(pf3)
85: 7(fvec2) ImageQueryLod 83 84 82: 76 Image 80
86: 7(fvec2) Load 9(lod) 83: 7(fvec2) ImageQueryLod 82 81
87: 7(fvec2) FAdd 86 85 84: 7(fvec2) Load 9(lod)
Store 9(lod) 87 85: 7(fvec2) FAdd 84 83
92: 89 Load 91(samp2Ds) Store 9(lod) 85
93: 7(fvec2) Load 25(pf2) 90: 87 Load 89(samp1Ds)
94: 7(fvec2) ImageQueryLod 92 93 91: 6(float) Load 16(pf)
95: 7(fvec2) Load 9(lod) 92: 86 Image 90
96: 7(fvec2) FAdd 95 94 93: 7(fvec2) ImageQueryLod 92 91
Store 9(lod) 96 94: 7(fvec2) Load 9(lod)
101: 98 Load 100(sampCubes) 95: 7(fvec2) FAdd 94 93
102: 36(fvec3) Load 38(pf3) Store 9(lod) 95
103: 7(fvec2) ImageQueryLod 101 102 100: 97 Load 99(samp2Ds)
101: 7(fvec2) Load 26(pf2)
102: 96 Image 100
103: 7(fvec2) ImageQueryLod 102 101
104: 7(fvec2) Load 9(lod) 104: 7(fvec2) Load 9(lod)
105: 7(fvec2) FAdd 104 103 105: 7(fvec2) FAdd 104 103
Store 9(lod) 105 Store 9(lod) 105
110: 107 Load 109(samp1DAs) 110: 107 Load 109(sampCubes)
111: 6(float) Load 16(pf) 111: 38(fvec3) Load 40(pf3)
112: 7(fvec2) ImageQueryLod 110 111 112: 106 Image 110
113: 7(fvec2) Load 9(lod) 113: 7(fvec2) ImageQueryLod 112 111
114: 7(fvec2) FAdd 113 112 114: 7(fvec2) Load 9(lod)
Store 9(lod) 114 115: 7(fvec2) FAdd 114 113
119: 116 Load 118(samp2DAs) Store 9(lod) 115
120: 7(fvec2) Load 25(pf2) 120: 117 Load 119(samp1DAs)
121: 7(fvec2) ImageQueryLod 119 120 121: 6(float) Load 16(pf)
122: 7(fvec2) Load 9(lod) 122: 116 Image 120
123: 7(fvec2) FAdd 122 121 123: 7(fvec2) ImageQueryLod 122 121
Store 9(lod) 123 124: 7(fvec2) Load 9(lod)
128: 125 Load 127(sampCubeAs) 125: 7(fvec2) FAdd 124 123
129: 36(fvec3) Load 38(pf3) Store 9(lod) 125
130: 7(fvec2) ImageQueryLod 128 129 130: 127 Load 129(samp2DAs)
131: 7(fvec2) Load 9(lod) 131: 7(fvec2) Load 26(pf2)
132: 7(fvec2) FAdd 131 130 132: 126 Image 130
Store 9(lod) 132 133: 7(fvec2) ImageQueryLod 132 131
135: 11 Load 13(samp1D) 134: 7(fvec2) Load 9(lod)
136: 19(int) ImageQueryLevels 135 135: 7(fvec2) FAdd 134 133
Store 134(levels) 136 Store 9(lod) 135
141: 138 Load 140(usamp2D) 140: 137 Load 139(sampCubeAs)
142: 19(int) ImageQueryLevels 141 141: 38(fvec3) Load 40(pf3)
143: 19(int) Load 134(levels) 142: 136 Image 140
144: 19(int) IAdd 143 142 143: 7(fvec2) ImageQueryLod 142 141
Store 134(levels) 144 144: 7(fvec2) Load 9(lod)
149: 146 Load 148(isamp3D) 145: 7(fvec2) FAdd 144 143
150: 19(int) ImageQueryLevels 149 Store 9(lod) 145
151: 19(int) Load 134(levels) 148: 11 Load 13(samp1D)
152: 19(int) IAdd 151 150 149: 10 Image 148
Store 134(levels) 152 150: 20(int) ImageQueryLevels 149
157: 154 Load 156(isampCube) Store 147(levels) 150
158: 19(int) ImageQueryLevels 157 155: 152 Load 154(usamp2D)
159: 19(int) Load 134(levels) 156: 151 Image 155
160: 19(int) IAdd 159 158 157: 20(int) ImageQueryLevels 156
Store 134(levels) 160 158: 20(int) Load 147(levels)
161: 53 Load 55(isamp1DA) 159: 20(int) IAdd 158 157
162: 19(int) ImageQueryLevels 161 Store 147(levels) 159
163: 19(int) Load 134(levels) 164: 161 Load 163(isamp3D)
164: 19(int) IAdd 163 162 165: 160 Image 164
Store 134(levels) 164 166: 20(int) ImageQueryLevels 165
169: 166 Load 168(samp2DA) 167: 20(int) Load 147(levels)
170: 19(int) ImageQueryLevels 169 168: 20(int) IAdd 167 166
171: 19(int) Load 134(levels) Store 147(levels) 168
172: 19(int) IAdd 171 170 173: 170 Load 172(isampCube)
Store 134(levels) 172 174: 169 Image 173
177: 174 Load 176(usampCubeA) 175: 20(int) ImageQueryLevels 174
178: 19(int) ImageQueryLevels 177 176: 20(int) Load 147(levels)
179: 19(int) Load 134(levels) 177: 20(int) IAdd 176 175
180: 19(int) IAdd 179 178 Store 147(levels) 177
Store 134(levels) 180 178: 57 Load 59(isamp1DA)
181: 80 Load 82(samp1Ds) 179: 56 Image 178
182: 19(int) ImageQueryLevels 181 180: 20(int) ImageQueryLevels 179
Store 134(levels) 182 181: 20(int) Load 147(levels)
183: 89 Load 91(samp2Ds) 182: 20(int) IAdd 181 180
184: 19(int) ImageQueryLevels 183 Store 147(levels) 182
185: 19(int) Load 134(levels) 187: 184 Load 186(samp2DA)
186: 19(int) IAdd 185 184 188: 183 Image 187
Store 134(levels) 186 189: 20(int) ImageQueryLevels 188
187: 98 Load 100(sampCubes) 190: 20(int) Load 147(levels)
188: 19(int) ImageQueryLevels 187 191: 20(int) IAdd 190 189
189: 19(int) Load 134(levels) Store 147(levels) 191
190: 19(int) IAdd 189 188 196: 193 Load 195(usampCubeA)
Store 134(levels) 190 197: 192 Image 196
191: 107 Load 109(samp1DAs) 198: 20(int) ImageQueryLevels 197
192: 19(int) ImageQueryLevels 191 199: 20(int) Load 147(levels)
193: 19(int) Load 134(levels) 200: 20(int) IAdd 199 198
194: 19(int) IAdd 193 192 Store 147(levels) 200
Store 134(levels) 194 201: 87 Load 89(samp1Ds)
195: 116 Load 118(samp2DAs) 202: 86 Image 201
196: 19(int) ImageQueryLevels 195 203: 20(int) ImageQueryLevels 202
197: 19(int) Load 134(levels) Store 147(levels) 203
198: 19(int) IAdd 197 196 204: 97 Load 99(samp2Ds)
Store 134(levels) 198 205: 96 Image 204
199: 125 Load 127(sampCubeAs) 206: 20(int) ImageQueryLevels 205
200: 19(int) ImageQueryLevels 199 207: 20(int) Load 147(levels)
201: 19(int) Load 134(levels) 208: 20(int) IAdd 207 206
202: 19(int) IAdd 201 200 Store 147(levels) 208
Store 134(levels) 202 209: 107 Load 109(sampCubes)
210: 106 Image 209
211: 20(int) ImageQueryLevels 210
212: 20(int) Load 147(levels)
213: 20(int) IAdd 212 211
Store 147(levels) 213
214: 117 Load 119(samp1DAs)
215: 116 Image 214
216: 20(int) ImageQueryLevels 215
217: 20(int) Load 147(levels)
218: 20(int) IAdd 217 216
Store 147(levels) 218
219: 127 Load 129(samp2DAs)
220: 126 Image 219
221: 20(int) ImageQueryLevels 220
222: 20(int) Load 147(levels)
223: 20(int) IAdd 222 221
Store 147(levels) 223
224: 137 Load 139(sampCubeAs)
225: 136 Image 224
226: 20(int) ImageQueryLevels 225
227: 20(int) Load 147(levels)
228: 20(int) IAdd 227 226
Store 147(levels) 228
Return Return
FunctionEnd FunctionEnd

View file

@ -0,0 +1,66 @@
spv.shiftOps.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 38
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 25
ExecutionMode 4 OriginLowerLeft
Source GLSL 450
Name 4 "main"
Name 9 "icolor"
Name 11 "i3"
Name 15 "u1"
Name 25 "ucolor"
Name 27 "u3"
Name 30 "i1"
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeVector 6(int) 3
8: TypePointer Output 7(ivec3)
9(icolor): 8(ptr) Variable Output
10: TypePointer UniformConstant 7(ivec3)
11(i3): 10(ptr) Variable UniformConstant
13: TypeInt 32 0
14: TypePointer UniformConstant 13(int)
15(u1): 14(ptr) Variable UniformConstant
17: TypeVector 13(int) 3
20: 13(int) Constant 4
24: TypePointer Output 17(ivec3)
25(ucolor): 24(ptr) Variable Output
26: TypePointer UniformConstant 17(ivec3)
27(u3): 26(ptr) Variable UniformConstant
29: TypePointer UniformConstant 6(int)
30(i1): 29(ptr) Variable UniformConstant
34: 6(int) Constant 5
4(main): 2 Function None 3
5: Label
12: 7(ivec3) Load 11(i3)
16: 13(int) Load 15(u1)
18: 17(ivec3) CompositeConstruct 16 16 16
19: 7(ivec3) ShiftLeftLogical 12 18
Store 9(icolor) 19
21: 7(ivec3) Load 9(icolor)
22: 17(ivec3) CompositeConstruct 20 20 20
23: 7(ivec3) ShiftLeftLogical 21 22
Store 9(icolor) 23
28: 17(ivec3) Load 27(u3)
31: 6(int) Load 30(i1)
32: 7(ivec3) CompositeConstruct 31 31 31
33: 17(ivec3) ShiftRightLogical 28 32
Store 25(ucolor) 33
35: 17(ivec3) Load 25(ucolor)
36: 7(ivec3) CompositeConstruct 34 34 34
37: 17(ivec3) ShiftRightLogical 35 36
Store 25(ucolor) 37
Return
FunctionEnd

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 12 EntryPoint Fragment 4 "main" 12 16
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 150 Source GLSL 150
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 15 23 34 19 9 40 41 EntryPoint Vertex 4 "main" 9 15 19 23 34 40 41
Source GLSL 330 Source GLSL 330
Name 4 "main" Name 4 "main"
Name 9 "glPos" Name 9 "glPos"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 44 EntryPoint Fragment 4 "main" 31 44
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 61 EntryPoint Fragment 4 "main" 61 99
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 54 EntryPoint Fragment 4 "main" 45 54
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 30 EntryPoint Fragment 4 "main" 30 69
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 110 Source GLSL 110
Name 4 "main" Name 4 "main"

View file

@ -7,12 +7,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 55 // Id's are bound by 56
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 20 38 EntryPoint Fragment 4 "main" 20 38 44
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 400 Source GLSL 400
Name 4 "main" Name 4 "main"
@ -82,7 +82,8 @@ Linked fragment stage:
51: 6(float) Load 50(blend) 51: 6(float) Load 50(blend)
52: 6(float) Load 8(blendscale) 52: 6(float) Load 8(blendscale)
53: 6(float) FMul 51 52 53: 6(float) FMul 51 52
54: 10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 45 48 53 54: 10(fvec4) CompositeConstruct 53 53 53 53
Store 44(gl_FragColor) 54 55: 10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 45 48 54
Store 44(gl_FragColor) 55
Return Return
FunctionEnd FunctionEnd

View file

@ -12,7 +12,7 @@ Linked vertex stage:
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 11 9 26 EntryPoint Vertex 4 "main" 9 11 15 21 26
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"
Name 9 "uv" Name 9 "uv"

View file

@ -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 290 // Id's are bound by 291
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 289 47 EntryPoint Fragment 4 "main" 47 276 290
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"
@ -39,8 +39,8 @@ Linked fragment stage:
Name 276 "gl_FragColor" Name 276 "gl_FragColor"
Name 279 "u" Name 279 "u"
Name 282 "blend" Name 282 "blend"
Name 288 "scale" Name 289 "scale"
Name 289 "t" Name 290 "t"
2: TypeVoid 2: TypeVoid
3: TypeFunction 2 3: TypeFunction 2
6: TypeFloat 32 6: TypeFloat 32
@ -103,9 +103,9 @@ Linked fragment stage:
279(u): 278(ptr) Variable UniformConstant 279(u): 278(ptr) Variable UniformConstant
281: TypePointer UniformConstant 6(float) 281: TypePointer UniformConstant 6(float)
282(blend): 281(ptr) Variable UniformConstant 282(blend): 281(ptr) Variable UniformConstant
287: TypePointer UniformConstant 45(fvec2) 288: TypePointer UniformConstant 45(fvec2)
288(scale): 287(ptr) Variable UniformConstant 289(scale): 288(ptr) Variable UniformConstant
289(t): 46(ptr) Variable Input 290(t): 46(ptr) Variable Input
4(main): 2 Function None 3 4(main): 2 Function None 3
5: Label 5: Label
8(blendscale): 7(ptr) Variable Function 8(blendscale): 7(ptr) Variable Function
@ -268,7 +268,7 @@ Linked fragment stage:
Store 26(color) 173 Store 26(color) 173
174: 137 Load 139(shadowSampler1D) 174: 137 Load 139(shadowSampler1D)
175: 22(fvec4) Load 24(coords4D) 175: 22(fvec4) Load 24(coords4D)
176: 6(float) CompositeExtract 175 3 176: 6(float) CompositeExtract 175 2
177: 6(float) ImageSampleProjDrefImplicitLod 174 175 176 177: 6(float) ImageSampleProjDrefImplicitLod 174 175 176
178: 22(fvec4) Load 26(color) 178: 22(fvec4) Load 26(color)
179: 22(fvec4) CompositeConstruct 177 177 177 177 179: 22(fvec4) CompositeConstruct 177 177 177 177
@ -277,7 +277,7 @@ Linked fragment stage:
181: 137 Load 139(shadowSampler1D) 181: 137 Load 139(shadowSampler1D)
182: 22(fvec4) Load 24(coords4D) 182: 22(fvec4) Load 24(coords4D)
183: 6(float) Load 10(bias) 183: 6(float) Load 10(bias)
184: 6(float) CompositeExtract 182 3 184: 6(float) CompositeExtract 182 2
185: 6(float) ImageSampleProjDrefImplicitLod 181 182 184 Bias 183 185: 6(float) ImageSampleProjDrefImplicitLod 181 182 184 Bias 183
186: 22(fvec4) Load 26(color) 186: 22(fvec4) Load 26(color)
187: 22(fvec4) CompositeConstruct 185 185 185 185 187: 22(fvec4) CompositeConstruct 185 185 185 185
@ -285,7 +285,7 @@ Linked fragment stage:
Store 26(color) 188 Store 26(color) 188
189: 156 Load 158(shadowSampler2D) 189: 156 Load 158(shadowSampler2D)
190: 22(fvec4) Load 24(coords4D) 190: 22(fvec4) Load 24(coords4D)
191: 6(float) CompositeExtract 190 3 191: 6(float) CompositeExtract 190 2
192: 6(float) ImageSampleProjDrefImplicitLod 189 190 191 192: 6(float) ImageSampleProjDrefImplicitLod 189 190 191
193: 22(fvec4) Load 26(color) 193: 22(fvec4) Load 26(color)
194: 22(fvec4) CompositeConstruct 192 192 192 192 194: 22(fvec4) CompositeConstruct 192 192 192 192
@ -294,7 +294,7 @@ Linked fragment stage:
196: 156 Load 158(shadowSampler2D) 196: 156 Load 158(shadowSampler2D)
197: 22(fvec4) Load 24(coords4D) 197: 22(fvec4) Load 24(coords4D)
198: 6(float) Load 10(bias) 198: 6(float) Load 10(bias)
199: 6(float) CompositeExtract 197 3 199: 6(float) CompositeExtract 197 2
200: 6(float) ImageSampleProjDrefImplicitLod 196 197 199 Bias 198 200: 6(float) ImageSampleProjDrefImplicitLod 196 197 199 Bias 198
201: 22(fvec4) Load 26(color) 201: 22(fvec4) Load 26(color)
202: 22(fvec4) CompositeConstruct 200 200 200 200 202: 22(fvec4) CompositeConstruct 200 200 200 200
@ -370,7 +370,8 @@ Linked fragment stage:
283: 6(float) Load 282(blend) 283: 6(float) Load 282(blend)
284: 6(float) Load 8(blendscale) 284: 6(float) Load 8(blendscale)
285: 6(float) FMul 283 284 285: 6(float) FMul 283 284
286: 22(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 277 280 285 286: 22(fvec4) CompositeConstruct 285 285 285 285
Store 276(gl_FragColor) 286 287: 22(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 277 280 286
Store 276(gl_FragColor) 287
Return Return
FunctionEnd FunctionEnd

View file

@ -10,7 +10,7 @@ Linked vertex stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 39 144 EntryPoint Vertex 4 "main" 39 140 144
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"
Name 8 "lod" Name 8 "lod"
@ -174,7 +174,7 @@ Linked vertex stage:
123: 100 Load 102(shadowSampler1D) 123: 100 Load 102(shadowSampler1D)
124: 18(fvec4) Load 20(coords4D) 124: 18(fvec4) Load 20(coords4D)
125: 6(float) Load 8(lod) 125: 6(float) Load 8(lod)
126: 6(float) CompositeExtract 124 3 126: 6(float) CompositeExtract 124 2
127: 6(float) ImageSampleProjDrefExplicitLod 123 124 126 Lod 125 127: 6(float) ImageSampleProjDrefExplicitLod 123 124 126 Lod 125
128: 18(fvec4) Load 23(color) 128: 18(fvec4) Load 23(color)
129: 18(fvec4) CompositeConstruct 127 127 127 127 129: 18(fvec4) CompositeConstruct 127 127 127 127
@ -183,7 +183,7 @@ Linked vertex stage:
131: 112 Load 114(shadowSampler2D) 131: 112 Load 114(shadowSampler2D)
132: 18(fvec4) Load 20(coords4D) 132: 18(fvec4) Load 20(coords4D)
133: 6(float) Load 8(lod) 133: 6(float) Load 8(lod)
134: 6(float) CompositeExtract 132 3 134: 6(float) CompositeExtract 132 2
135: 6(float) ImageSampleProjDrefExplicitLod 131 132 134 Lod 133 135: 6(float) ImageSampleProjDrefExplicitLod 131 132 134 Lod 133
136: 18(fvec4) Load 23(color) 136: 18(fvec4) Load 23(color)
137: 18(fvec4) CompositeConstruct 135 135 135 135 137: 18(fvec4) CompositeConstruct 135 135 135 135

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 94 104 114 124 134 144 154 164 EntryPoint Fragment 4 "main" 94 104 114 124 134 144 154 164 168
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 15 200 77 68 EntryPoint Fragment 4 "main" 15 68 77 200
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source ESSL 300 Source ESSL 300
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" EntryPoint Fragment 4 "main" 47
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -12,7 +12,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 63 EntryPoint Fragment 4 "main" 54 63
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -15,7 +15,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 34 39 19 19 48 EntryPoint Fragment 4 "main" 19 34 39 45 48
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -15,7 +15,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 45 50 30 30 19 EntryPoint Fragment 4 "main" 19 30 45 50 56
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 130 Source GLSL 130
Name 4 "main" Name 4 "main"

View file

@ -10,7 +10,7 @@ Linked fragment stage:
Capability Shader Capability Shader
1: ExtInstImport "GLSL.std.450" 1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450 MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 41 EntryPoint Fragment 4 "main" 37 41
ExecutionMode 4 OriginLowerLeft ExecutionMode 4 OriginLowerLeft
Source GLSL 120 Source GLSL 120
Name 4 "main" Name 4 "main"

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