Updated glslang.
This commit is contained in:
parent
9f0a889cca
commit
88373294da
3rdparty/glslang
SPIRV
StandAlone
Test
baseResults
300.frag.out310.frag.out310.tese.out320.frag.out320.tese.outhlsl.implicitBool.frag.outhlsl.logical.binary.frag.outhlsl.structbuffer.incdec.frag.hlslfun1.outnvShaderNoperspectiveInterpolation.frag.outspv.int16.frag.outspv.int32.frag.outspv.int64.frag.outspv.rankShift.comp.outspv.vulkan110.int16.frag.out
nvShaderNoperspectiveInterpolation.fragruntestsspv.int64.fragspv.rankShift.compglslang
Include
MachineIndependent
Intermediate.cppParseContextBase.cppParseHelper.hScan.cppShaderLang.cppVersions.cppVersions.hattribute.cppglslang.yglslang_tab.cppglslang_tab.cpp.hiomapper.cpplocalintermediate.h
preprocessor
reflection.cppreflection.hPublic
gtests
hlsl
known_good.json
269
3rdparty/glslang/SPIRV/GlslangToSpv.cpp
vendored
269
3rdparty/glslang/SPIRV/GlslangToSpv.cpp
vendored
@ -126,6 +126,9 @@ public:
|
||||
void dumpSpv(std::vector<unsigned int>& out);
|
||||
|
||||
protected:
|
||||
TGlslangToSpvTraverser(TGlslangToSpvTraverser&);
|
||||
TGlslangToSpvTraverser& operator=(TGlslangToSpvTraverser&);
|
||||
|
||||
spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
|
||||
spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
|
||||
spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration);
|
||||
@ -153,7 +156,8 @@ protected:
|
||||
glslang::TLayoutPacking getExplicitLayout(const glslang::TType& type) const;
|
||||
int getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking, glslang::TLayoutMatrix);
|
||||
int getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking, glslang::TLayoutMatrix);
|
||||
void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset, glslang::TLayoutPacking, glslang::TLayoutMatrix);
|
||||
void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset,
|
||||
int& nextOffset, glslang::TLayoutPacking, glslang::TLayoutMatrix);
|
||||
void declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember);
|
||||
|
||||
bool isShaderEntryPoint(const glslang::TIntermAggregate* node);
|
||||
@ -182,10 +186,6 @@ protected:
|
||||
spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy);
|
||||
spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
|
||||
spv::Id getSymbolId(const glslang::TIntermSymbol* node);
|
||||
void addDecoration(spv::Id id, spv::Decoration dec);
|
||||
void addDecoration(spv::Id id, spv::Decoration dec, unsigned value);
|
||||
void addMemberDecoration(spv::Id id, int member, spv::Decoration dec);
|
||||
void addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value);
|
||||
spv::Id createSpvConstant(const glslang::TIntermTyped&);
|
||||
spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant);
|
||||
bool isTrivialLeaf(const glslang::TIntermTyped* node);
|
||||
@ -222,8 +222,10 @@ protected:
|
||||
std::unordered_set<int> rValueParameters; // set of formal function parameters passed as rValues, rather than a pointer
|
||||
std::unordered_map<std::string, spv::Function*> functionMap;
|
||||
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)
|
||||
// for mapping glslang block indices to spv indices (e.g., due to hidden members):
|
||||
std::unordered_map<const glslang::TTypeList*, std::vector<int> > memberRemapper;
|
||||
std::stack<bool> breakForLoop; // false means break for switch
|
||||
std::unordered_map<std::string, const glslang::TIntermSymbol*> counterOriginator;
|
||||
};
|
||||
|
||||
//
|
||||
@ -1195,6 +1197,36 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
|
||||
else
|
||||
builder.setAccessChainLValue(id);
|
||||
}
|
||||
|
||||
// Process linkage-only nodes for any special additional interface work.
|
||||
if (linkageOnly) {
|
||||
if (glslangIntermediate->getHlslFunctionality1()) {
|
||||
// Map implicit counter buffers to their originating buffers, which should have been
|
||||
// seen by now, given earlier pruning of unused counters, and preservation of order
|
||||
// of declaration.
|
||||
if (symbol->getType().getQualifier().isUniformOrBuffer()) {
|
||||
if (!glslangIntermediate->hasCounterBufferName(symbol->getName())) {
|
||||
// Save possible originating buffers for counter buffers, keyed by
|
||||
// making the potential counter-buffer name.
|
||||
std::string keyName = symbol->getName().c_str();
|
||||
keyName = glslangIntermediate->addCounterBufferName(keyName);
|
||||
counterOriginator[keyName] = symbol;
|
||||
} else {
|
||||
// Handle a counter buffer, by finding the saved originating buffer.
|
||||
std::string keyName = symbol->getName().c_str();
|
||||
auto it = counterOriginator.find(keyName);
|
||||
if (it != counterOriginator.end()) {
|
||||
id = getSymbolId(it->second);
|
||||
if (id != spv::NoResult) {
|
||||
spv::Id counterId = getSymbolId(symbol);
|
||||
if (counterId != spv::NoResult)
|
||||
builder.addDecorationId(id, spv::DecorationHlslCounterBufferGOOGLE, counterId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node)
|
||||
@ -2709,89 +2741,102 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type,
|
||||
InheritQualifiers(memberQualifier, qualifier);
|
||||
|
||||
// using -1 above to indicate a hidden member
|
||||
if (member >= 0) {
|
||||
builder.addMemberName(spvType, member, glslangMember.getFieldName().c_str());
|
||||
addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix));
|
||||
addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember));
|
||||
// Add interpolation and auxiliary storage decorations only to top-level members of Input and Output storage classes
|
||||
if (type.getQualifier().storage == glslang::EvqVaryingIn ||
|
||||
type.getQualifier().storage == glslang::EvqVaryingOut) {
|
||||
if (type.getBasicType() == glslang::EbtBlock ||
|
||||
glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
|
||||
addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
|
||||
addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
|
||||
}
|
||||
if (member < 0)
|
||||
continue;
|
||||
|
||||
builder.addMemberName(spvType, member, glslangMember.getFieldName().c_str());
|
||||
builder.addMemberDecoration(spvType, member,
|
||||
TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix));
|
||||
builder.addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember));
|
||||
// Add interpolation and auxiliary storage decorations only to
|
||||
// top-level members of Input and Output storage classes
|
||||
if (type.getQualifier().storage == glslang::EvqVaryingIn ||
|
||||
type.getQualifier().storage == glslang::EvqVaryingOut) {
|
||||
if (type.getBasicType() == glslang::EbtBlock ||
|
||||
glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
|
||||
builder.addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier));
|
||||
builder.addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier));
|
||||
}
|
||||
addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
|
||||
}
|
||||
builder.addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier));
|
||||
|
||||
if (type.getBasicType() == glslang::EbtBlock &&
|
||||
qualifier.storage == glslang::EvqBuffer) {
|
||||
// Add memory decorations only to top-level members of shader storage block
|
||||
std::vector<spv::Decoration> memory;
|
||||
TranslateMemoryDecoration(memberQualifier, memory);
|
||||
for (unsigned int i = 0; i < memory.size(); ++i)
|
||||
addMemberDecoration(spvType, member, memory[i]);
|
||||
}
|
||||
if (type.getBasicType() == glslang::EbtBlock &&
|
||||
qualifier.storage == glslang::EvqBuffer) {
|
||||
// Add memory decorations only to top-level members of shader storage block
|
||||
std::vector<spv::Decoration> memory;
|
||||
TranslateMemoryDecoration(memberQualifier, memory);
|
||||
for (unsigned int i = 0; i < memory.size(); ++i)
|
||||
builder.addMemberDecoration(spvType, member, memory[i]);
|
||||
}
|
||||
|
||||
// Location assignment was already completed correctly by the front end,
|
||||
// just track whether a member needs to be decorated.
|
||||
// Ignore member locations if the container is an array, as that's
|
||||
// ill-specified and decisions have been made to not allow this.
|
||||
if (! type.isArray() && memberQualifier.hasLocation())
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation);
|
||||
// Location assignment was already completed correctly by the front end,
|
||||
// just track whether a member needs to be decorated.
|
||||
// Ignore member locations if the container is an array, as that's
|
||||
// ill-specified and decisions have been made to not allow this.
|
||||
if (! type.isArray() && memberQualifier.hasLocation())
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation);
|
||||
|
||||
if (qualifier.hasLocation()) // track for upcoming inheritance
|
||||
locationOffset += glslangIntermediate->computeTypeLocationSize(
|
||||
glslangMember, glslangIntermediate->getStage());
|
||||
if (qualifier.hasLocation()) // track for upcoming inheritance
|
||||
locationOffset += glslangIntermediate->computeTypeLocationSize(
|
||||
glslangMember, glslangIntermediate->getStage());
|
||||
|
||||
// component, XFB, others
|
||||
if (glslangMember.getQualifier().hasComponent())
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationComponent, glslangMember.getQualifier().layoutComponent);
|
||||
if (glslangMember.getQualifier().hasXfbOffset())
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationOffset, glslangMember.getQualifier().layoutXfbOffset);
|
||||
else if (explicitLayout != glslang::ElpNone) {
|
||||
// figure out what to do with offset, which is accumulating
|
||||
int nextOffset;
|
||||
updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix);
|
||||
if (offset >= 0)
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset);
|
||||
offset = nextOffset;
|
||||
}
|
||||
// component, XFB, others
|
||||
if (glslangMember.getQualifier().hasComponent())
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationComponent,
|
||||
glslangMember.getQualifier().layoutComponent);
|
||||
if (glslangMember.getQualifier().hasXfbOffset())
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationOffset,
|
||||
glslangMember.getQualifier().layoutXfbOffset);
|
||||
else if (explicitLayout != glslang::ElpNone) {
|
||||
// figure out what to do with offset, which is accumulating
|
||||
int nextOffset;
|
||||
updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix);
|
||||
if (offset >= 0)
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset);
|
||||
offset = nextOffset;
|
||||
}
|
||||
|
||||
if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone)
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix));
|
||||
if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone)
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride,
|
||||
getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix));
|
||||
|
||||
// built-in variable decorations
|
||||
spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true);
|
||||
if (builtIn != spv::BuiltInMax)
|
||||
addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
|
||||
// built-in variable decorations
|
||||
spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true);
|
||||
if (builtIn != spv::BuiltInMax)
|
||||
builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
if (builtIn == spv::BuiltInLayer) {
|
||||
// SPV_NV_viewport_array2 extension
|
||||
if (glslangMember.getQualifier().layoutViewportRelative){
|
||||
addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationViewportRelativeNV);
|
||||
builder.addCapability(spv::CapabilityShaderViewportMaskNV);
|
||||
builder.addExtension(spv::E_SPV_NV_viewport_array2);
|
||||
}
|
||||
if (glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset != -2048){
|
||||
addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset);
|
||||
builder.addCapability(spv::CapabilityShaderStereoViewNV);
|
||||
builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
|
||||
}
|
||||
if (builtIn == spv::BuiltInLayer) {
|
||||
// SPV_NV_viewport_array2 extension
|
||||
if (glslangMember.getQualifier().layoutViewportRelative){
|
||||
builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationViewportRelativeNV);
|
||||
builder.addCapability(spv::CapabilityShaderViewportMaskNV);
|
||||
builder.addExtension(spv::E_SPV_NV_viewport_array2);
|
||||
}
|
||||
if (glslangMember.getQualifier().layoutPassthrough) {
|
||||
addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV);
|
||||
builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV);
|
||||
builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
|
||||
if (glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset != -2048){
|
||||
builder.addMemberDecoration(spvType, member,
|
||||
(spv::Decoration)spv::DecorationSecondaryViewportRelativeNV,
|
||||
glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset);
|
||||
builder.addCapability(spv::CapabilityShaderStereoViewNV);
|
||||
builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
|
||||
}
|
||||
}
|
||||
if (glslangMember.getQualifier().layoutPassthrough) {
|
||||
builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV);
|
||||
builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV);
|
||||
builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
|
||||
}
|
||||
#endif
|
||||
if (glslangIntermediate->getHlslFunctionality1() && memberQualifier.semanticName != nullptr) {
|
||||
builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
|
||||
builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE,
|
||||
memberQualifier.semanticName);
|
||||
}
|
||||
}
|
||||
|
||||
// Decorate the structure
|
||||
addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
|
||||
addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer()));
|
||||
builder.addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix));
|
||||
builder.addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer()));
|
||||
if (type.getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
|
||||
builder.addCapability(spv::CapabilityGeometryStreams);
|
||||
builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream);
|
||||
@ -4037,7 +4082,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
|
||||
builder.promoteScalar(precision, left, right);
|
||||
|
||||
spv::Id result = builder.createBinOp(binOp, typeId, left, right);
|
||||
addDecoration(result, noContraction);
|
||||
builder.addDecoration(result, noContraction);
|
||||
return builder.setPrecision(result, precision);
|
||||
}
|
||||
|
||||
@ -4107,7 +4152,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
|
||||
|
||||
if (binOp != spv::OpNop) {
|
||||
spv::Id result = builder.createBinOp(binOp, typeId, left, right);
|
||||
addDecoration(result, noContraction);
|
||||
builder.addDecoration(result, noContraction);
|
||||
return builder.setPrecision(result, precision);
|
||||
}
|
||||
|
||||
@ -4137,7 +4182,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec
|
||||
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);
|
||||
spv::Id resultType = builder.getTypeId(right);
|
||||
right = builder.createBinOp(spv::OpFDiv, resultType, builder.makeFpConstant(resultType, 1.0), right);
|
||||
op = spv::OpMatrixTimesScalar;
|
||||
} else
|
||||
firstClass = false;
|
||||
@ -4166,7 +4212,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec
|
||||
|
||||
if (firstClass) {
|
||||
spv::Id result = builder.createBinOp(op, typeId, left, right);
|
||||
addDecoration(result, noContraction);
|
||||
builder.addDecoration(result, noContraction);
|
||||
return builder.setPrecision(result, precision);
|
||||
}
|
||||
|
||||
@ -4205,7 +4251,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec
|
||||
spv::Id leftVec = leftMat ? builder.createCompositeExtract( left, vecType, indexes) : smearVec;
|
||||
spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec;
|
||||
spv::Id result = builder.createBinOp(op, vecType, leftVec, rightVec);
|
||||
addDecoration(result, noContraction);
|
||||
builder.addDecoration(result, noContraction);
|
||||
results.push_back(builder.setPrecision(result, precision));
|
||||
}
|
||||
|
||||
@ -4610,7 +4656,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv:
|
||||
id = builder.createUnaryOp(unaryOp, typeId, operand);
|
||||
}
|
||||
|
||||
addDecoration(id, noContraction);
|
||||
builder.addDecoration(id, noContraction);
|
||||
return builder.setPrecision(id, precision);
|
||||
}
|
||||
|
||||
@ -4637,7 +4683,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, spv::Deco
|
||||
indexes.push_back(c);
|
||||
spv::Id srcVec = builder.createCompositeExtract(operand, srcVecType, indexes);
|
||||
spv::Id destVec = builder.createUnaryOp(op, destVecType, srcVec);
|
||||
addDecoration(destVec, noContraction);
|
||||
builder.addDecoration(destVec, noContraction);
|
||||
results.push_back(builder.setPrecision(destVec, precision));
|
||||
}
|
||||
|
||||
@ -6146,11 +6192,11 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
|
||||
symbolValues[symbol->getId()] = id;
|
||||
|
||||
if (symbol->getBasicType() != glslang::EbtBlock) {
|
||||
addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
|
||||
addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
|
||||
addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
|
||||
builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType()));
|
||||
builder.addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier()));
|
||||
builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier()));
|
||||
if (symbol->getType().getQualifier().hasSpecConstantId())
|
||||
addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId);
|
||||
builder.addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId);
|
||||
if (symbol->getQualifier().hasIndex())
|
||||
builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex);
|
||||
if (symbol->getQualifier().hasComponent())
|
||||
@ -6162,7 +6208,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
|
||||
|
||||
if (symbol->getQualifier().hasLocation())
|
||||
builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation);
|
||||
addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier()));
|
||||
builder.addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier()));
|
||||
if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
|
||||
builder.addCapability(spv::CapabilityGeometryStreams);
|
||||
builder.addDecoration(id, spv::DecorationStream, symbol->getQualifier().layoutStream);
|
||||
@ -6195,13 +6241,13 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
|
||||
std::vector<spv::Decoration> memory;
|
||||
TranslateMemoryDecoration(symbol->getType().getQualifier(), memory);
|
||||
for (unsigned int i = 0; i < memory.size(); ++i)
|
||||
addDecoration(id, memory[i]);
|
||||
builder.addDecoration(id, memory[i]);
|
||||
}
|
||||
|
||||
// built-in variable decorations
|
||||
spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false);
|
||||
if (builtIn != spv::BuiltInMax)
|
||||
addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
|
||||
builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
if (builtIn == spv::BuiltInSampleMask) {
|
||||
@ -6211,7 +6257,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
|
||||
decoration = (spv::Decoration)spv::DecorationOverrideCoverageNV;
|
||||
else
|
||||
decoration = (spv::Decoration)spv::DecorationMax;
|
||||
addDecoration(id, decoration);
|
||||
builder.addDecoration(id, decoration);
|
||||
if (decoration != spv::DecorationMax) {
|
||||
builder.addExtension(spv::E_SPV_NV_sample_mask_override_coverage);
|
||||
}
|
||||
@ -6219,55 +6265,34 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
|
||||
else if (builtIn == spv::BuiltInLayer) {
|
||||
// SPV_NV_viewport_array2 extension
|
||||
if (symbol->getQualifier().layoutViewportRelative) {
|
||||
addDecoration(id, (spv::Decoration)spv::DecorationViewportRelativeNV);
|
||||
builder.addDecoration(id, (spv::Decoration)spv::DecorationViewportRelativeNV);
|
||||
builder.addCapability(spv::CapabilityShaderViewportMaskNV);
|
||||
builder.addExtension(spv::E_SPV_NV_viewport_array2);
|
||||
}
|
||||
if (symbol->getQualifier().layoutSecondaryViewportRelativeOffset != -2048) {
|
||||
addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, symbol->getQualifier().layoutSecondaryViewportRelativeOffset);
|
||||
builder.addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV,
|
||||
symbol->getQualifier().layoutSecondaryViewportRelativeOffset);
|
||||
builder.addCapability(spv::CapabilityShaderStereoViewNV);
|
||||
builder.addExtension(spv::E_SPV_NV_stereo_view_rendering);
|
||||
}
|
||||
}
|
||||
|
||||
if (symbol->getQualifier().layoutPassthrough) {
|
||||
addDecoration(id, spv::DecorationPassthroughNV);
|
||||
builder.addDecoration(id, spv::DecorationPassthroughNV);
|
||||
builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV);
|
||||
builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) {
|
||||
builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
|
||||
builder.addDecoration(id, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE,
|
||||
symbol->getType().getQualifier().semanticName);
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
// If 'dec' is valid, add no-operand decoration to an object
|
||||
void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec)
|
||||
{
|
||||
if (dec != spv::DecorationMax)
|
||||
builder.addDecoration(id, dec);
|
||||
}
|
||||
|
||||
// If 'dec' is valid, add a one-operand decoration to an object
|
||||
void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec, unsigned value)
|
||||
{
|
||||
if (dec != spv::DecorationMax)
|
||||
builder.addDecoration(id, dec, value);
|
||||
}
|
||||
|
||||
// If 'dec' is valid, add a no-operand decoration to a struct member
|
||||
void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec)
|
||||
{
|
||||
if (dec != spv::DecorationMax)
|
||||
builder.addMemberDecoration(id, (unsigned)member, dec);
|
||||
}
|
||||
|
||||
// If 'dec' is valid, add a one-operand decoration to a struct member
|
||||
void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value)
|
||||
{
|
||||
if (dec != spv::DecorationMax)
|
||||
builder.addMemberDecoration(id, (unsigned)member, dec, value);
|
||||
}
|
||||
|
||||
// Make a full tree of instructions to build a SPIR-V specialization constant,
|
||||
// or regular constant if possible.
|
||||
//
|
||||
@ -6300,8 +6325,10 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n
|
||||
for (int dim = 0; dim < 3; ++dim) {
|
||||
bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet);
|
||||
dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst));
|
||||
if (specConst)
|
||||
addDecoration(dimConstId.back(), spv::DecorationSpecId, glslangIntermediate->getLocalSizeSpecId(dim));
|
||||
if (specConst) {
|
||||
builder.addDecoration(dimConstId.back(), spv::DecorationSpecId,
|
||||
glslangIntermediate->getLocalSizeSpecId(dim));
|
||||
}
|
||||
}
|
||||
return builder.makeCompositeConstant(builder.makeVectorType(builder.makeUintType(32), 3), dimConstId, true);
|
||||
}
|
||||
|
63
3rdparty/glslang/SPIRV/SpvBuilder.cpp
vendored
63
3rdparty/glslang/SPIRV/SpvBuilder.cpp
vendored
@ -848,6 +848,23 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant)
|
||||
return c->getResultId();
|
||||
}
|
||||
|
||||
Id Builder::makeFpConstant(Id type, double d, bool specConstant)
|
||||
{
|
||||
assert(isFloatType(type));
|
||||
|
||||
switch (getScalarTypeWidth(type)) {
|
||||
case 16:
|
||||
return makeFloat16Constant(d, specConstant);
|
||||
case 32:
|
||||
return makeFloatConstant(d, specConstant);
|
||||
case 64:
|
||||
return makeDoubleConstant(d, specConstant);
|
||||
}
|
||||
|
||||
assert(false);
|
||||
}
|
||||
|
||||
|
||||
Id Builder::findCompositeConstant(Op typeClass, const std::vector<Id>& comps)
|
||||
{
|
||||
Instruction* constant = 0;
|
||||
@ -993,6 +1010,7 @@ void Builder::addDecoration(Id id, Decoration decoration, int num)
|
||||
{
|
||||
if (decoration == spv::DecorationMax)
|
||||
return;
|
||||
|
||||
Instruction* dec = new Instruction(OpDecorate);
|
||||
dec->addIdOperand(id);
|
||||
dec->addImmediateOperand(decoration);
|
||||
@ -1002,8 +1020,37 @@ void Builder::addDecoration(Id id, Decoration decoration, int num)
|
||||
decorations.push_back(std::unique_ptr<Instruction>(dec));
|
||||
}
|
||||
|
||||
void Builder::addDecoration(Id id, Decoration decoration, const char* s)
|
||||
{
|
||||
if (decoration == spv::DecorationMax)
|
||||
return;
|
||||
|
||||
Instruction* dec = new Instruction(OpDecorateStringGOOGLE);
|
||||
dec->addIdOperand(id);
|
||||
dec->addImmediateOperand(decoration);
|
||||
dec->addStringOperand(s);
|
||||
|
||||
decorations.push_back(std::unique_ptr<Instruction>(dec));
|
||||
}
|
||||
|
||||
void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration)
|
||||
{
|
||||
if (decoration == spv::DecorationMax)
|
||||
return;
|
||||
|
||||
Instruction* dec = new Instruction(OpDecorateId);
|
||||
dec->addIdOperand(id);
|
||||
dec->addImmediateOperand(decoration);
|
||||
dec->addIdOperand(idDecoration);
|
||||
|
||||
decorations.push_back(std::unique_ptr<Instruction>(dec));
|
||||
}
|
||||
|
||||
void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num)
|
||||
{
|
||||
if (decoration == spv::DecorationMax)
|
||||
return;
|
||||
|
||||
Instruction* dec = new Instruction(OpMemberDecorate);
|
||||
dec->addIdOperand(id);
|
||||
dec->addImmediateOperand(member);
|
||||
@ -1014,6 +1061,20 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat
|
||||
decorations.push_back(std::unique_ptr<Instruction>(dec));
|
||||
}
|
||||
|
||||
void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const char *s)
|
||||
{
|
||||
if (decoration == spv::DecorationMax)
|
||||
return;
|
||||
|
||||
Instruction* dec = new Instruction(OpMemberDecorateStringGOOGLE);
|
||||
dec->addIdOperand(id);
|
||||
dec->addImmediateOperand(member);
|
||||
dec->addImmediateOperand(decoration);
|
||||
dec->addStringOperand(s);
|
||||
|
||||
decorations.push_back(std::unique_ptr<Instruction>(dec));
|
||||
}
|
||||
|
||||
// Comments in header
|
||||
Function* Builder::makeEntryPoint(const char* entryPoint)
|
||||
{
|
||||
@ -2530,7 +2591,7 @@ void Builder::remapDynamicSwizzle()
|
||||
if (accessChain.component != NoResult && accessChain.swizzle.size() > 1) {
|
||||
// build a vector of the swizzle for the component to map into
|
||||
std::vector<Id> components;
|
||||
for (int c = 0; c < accessChain.swizzle.size(); ++c)
|
||||
for (int c = 0; c < (int)accessChain.swizzle.size(); ++c)
|
||||
components.push_back(makeUintConstant(accessChain.swizzle[c]));
|
||||
Id mapType = makeVectorType(makeUintType(32), (int)accessChain.swizzle.size());
|
||||
Id map = makeCompositeConstant(mapType, components);
|
||||
|
4
3rdparty/glslang/SPIRV/SpvBuilder.h
vendored
4
3rdparty/glslang/SPIRV/SpvBuilder.h
vendored
@ -226,6 +226,7 @@ public:
|
||||
Id makeFloatConstant(float f, bool specConstant = false);
|
||||
Id makeDoubleConstant(double d, bool specConstant = false);
|
||||
Id makeFloat16Constant(float f16, bool specConstant = false);
|
||||
Id makeFpConstant(Id type, double d, bool specConstant = false);
|
||||
|
||||
// Turn the array of constants into a proper spv constant of the requested type.
|
||||
Id makeCompositeConstant(Id type, const std::vector<Id>& comps, bool specConst = false);
|
||||
@ -236,7 +237,10 @@ public:
|
||||
void addName(Id, const char* name);
|
||||
void addMemberName(Id, int member, const char* name);
|
||||
void addDecoration(Id, Decoration, int num = -1);
|
||||
void addDecoration(Id, Decoration, const char*);
|
||||
void addDecorationId(Id id, Decoration, Id idDecoration);
|
||||
void addMemberDecoration(Id, unsigned int member, Decoration, int num = -1);
|
||||
void addMemberDecoration(Id, unsigned int member, Decoration, const char*);
|
||||
|
||||
// At the end of what block do the next create*() instructions go?
|
||||
void setBuildPoint(Block* bp) { buildPoint = bp; }
|
||||
|
23
3rdparty/glslang/SPIRV/doc.cpp
vendored
23
3rdparty/glslang/SPIRV/doc.cpp
vendored
@ -269,6 +269,9 @@ const char* DecorationString(int decoration)
|
||||
case 5252: return "ViewportRelativeNV";
|
||||
case 5256: return "SecondaryViewportRelativeNV";
|
||||
#endif
|
||||
|
||||
case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
|
||||
case DecorationHlslSemanticGOOGLE: return "DecorationHlslSemanticGOOGLE";
|
||||
}
|
||||
}
|
||||
|
||||
@ -1208,6 +1211,7 @@ const char* OpcodeString(int op)
|
||||
case 320: return "OpImageSparseRead";
|
||||
|
||||
case OpModuleProcessed: return "OpModuleProcessed";
|
||||
case OpDecorateId: return "OpDecorateId";
|
||||
|
||||
case 333: return "OpGroupNonUniformElect";
|
||||
case 334: return "OpGroupNonUniformAll";
|
||||
@ -1265,6 +1269,9 @@ const char* OpcodeString(int op)
|
||||
case 5012: return "OpFragmentFetchAMD";
|
||||
#endif
|
||||
|
||||
case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE";
|
||||
case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE";
|
||||
|
||||
case OpcodeCeiling:
|
||||
default:
|
||||
return "Bad";
|
||||
@ -1356,7 +1363,10 @@ void Parameterize()
|
||||
InstructionDesc[OpImageWrite].setResultAndType(false, false);
|
||||
InstructionDesc[OpDecorationGroup].setResultAndType(true, false);
|
||||
InstructionDesc[OpDecorate].setResultAndType(false, false);
|
||||
InstructionDesc[OpDecorateId].setResultAndType(false, false);
|
||||
InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false);
|
||||
InstructionDesc[OpMemberDecorate].setResultAndType(false, false);
|
||||
InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false);
|
||||
InstructionDesc[OpGroupDecorate].setResultAndType(false, false);
|
||||
InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false);
|
||||
InstructionDesc[OpName].setResultAndType(false, false);
|
||||
@ -1921,11 +1931,24 @@ void Parameterize()
|
||||
InstructionDesc[OpDecorate].operands.push(OperandDecoration, "");
|
||||
InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
|
||||
|
||||
InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'");
|
||||
InstructionDesc[OpDecorateId].operands.push(OperandDecoration, "");
|
||||
InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <<Decoration,'Decoration'>>.");
|
||||
|
||||
InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'");
|
||||
InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, "");
|
||||
InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'");
|
||||
|
||||
InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'");
|
||||
InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'");
|
||||
InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, "");
|
||||
InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <<Decoration,'Decoration'>>.");
|
||||
|
||||
InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'");
|
||||
InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'");
|
||||
InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, "");
|
||||
InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'");
|
||||
|
||||
InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'");
|
||||
InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'");
|
||||
|
||||
|
21
3rdparty/glslang/StandAlone/StandAlone.cpp
vendored
21
3rdparty/glslang/StandAlone/StandAlone.cpp
vendored
@ -101,6 +101,7 @@ enum TOptions {
|
||||
EOptionInvertY = (1 << 30),
|
||||
EOptionDumpBareVersion = (1 << 31),
|
||||
};
|
||||
bool targetHlslFunctionality1 = false;
|
||||
|
||||
//
|
||||
// Return codes from main/exit().
|
||||
@ -523,7 +524,7 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
|
||||
setOpenGlSpv();
|
||||
OpenGLClientVersion = glslang::EShTargetOpenGL_450;
|
||||
} else
|
||||
Error("--target-env expected vulkan1.0, opengl, or hlsl-16bit-types");
|
||||
Error("--target-env expected vulkan1.0, vulkan1.1, or opengl");
|
||||
}
|
||||
bumpArg();
|
||||
} else if (lowerword == "variable-name" || // synonyms
|
||||
@ -613,6 +614,12 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
|
||||
Error("no <name> provided for -e");
|
||||
bumpArg();
|
||||
break;
|
||||
case 'f':
|
||||
if (strcmp(&argv[0][2], "hlsl_functionality1") == 0)
|
||||
targetHlslFunctionality1 = true;
|
||||
else
|
||||
Error("-f: expected hlsl_functionality1");
|
||||
break;
|
||||
case 'g':
|
||||
Options |= EOptionDebug;
|
||||
break;
|
||||
@ -874,14 +881,15 @@ void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
|
||||
: glslang::EShSourceGlsl,
|
||||
compUnit.stage, glslang::EShClientVulkan, ClientInputSemanticsVersion);
|
||||
shader->setEnvClient(glslang::EShClientVulkan, VulkanClientVersion);
|
||||
shader->setEnvTarget(glslang::EShTargetSpv, TargetVersion);
|
||||
} else {
|
||||
shader->setEnvInput((Options & EOptionReadHlsl) ? glslang::EShSourceHlsl
|
||||
: glslang::EShSourceGlsl,
|
||||
compUnit.stage, glslang::EShClientOpenGL, ClientInputSemanticsVersion);
|
||||
shader->setEnvClient(glslang::EShClientOpenGL, OpenGLClientVersion);
|
||||
shader->setEnvTarget(glslang::EshTargetSpv, TargetVersion);
|
||||
}
|
||||
shader->setEnvTarget(glslang::EShTargetSpv, TargetVersion);
|
||||
if (targetHlslFunctionality1)
|
||||
shader->setEnvTargetHlslFunctionality1();
|
||||
}
|
||||
|
||||
shaders.push_back(shader);
|
||||
@ -1318,6 +1326,9 @@ void usage()
|
||||
" -d default to desktop (#version 110) when there is no shader #version\n"
|
||||
" (default is ES version 100)\n"
|
||||
" -e <name> specify <name> as the entry-point name\n"
|
||||
" -f{hlsl_functionality1}\n"
|
||||
" 'hlsl_functionality1' enables use of the\n"
|
||||
" SPV_GOOGLE_hlsl_functionality1 extension\n"
|
||||
" -g generate debug information\n"
|
||||
" -h print this usage message\n"
|
||||
" -i intermediate tree (glslang AST) is printed out\n"
|
||||
@ -1390,8 +1401,8 @@ void usage()
|
||||
" set execution environment that emitted code\n"
|
||||
" will execute in (as opposed to the language\n"
|
||||
" semantics selected by --client) defaults:\n"
|
||||
" 'vulkan1.0' under '--client vulkan<ver>'\n"
|
||||
" 'opengl' under '--client opengl<ver>'\n"
|
||||
" 'vulkan1.0' under '--client vulkan<ver>'\n"
|
||||
" 'opengl' under '--client opengl<ver>'\n"
|
||||
" --variable-name <name> Creates a C header file that contains a\n"
|
||||
" uint32_t array named <name>\n"
|
||||
" initialized with the shader binary code.\n"
|
||||
|
@ -1,7 +1,7 @@
|
||||
300.frag
|
||||
ERROR: 0:2: 'float' : type requires declaration of default precision qualifier
|
||||
ERROR: 0:30: 'noperspective' : Reserved word.
|
||||
ERROR: 0:30: 'noperspective' : not supported with this profile: es
|
||||
ERROR: 0:30: 'noperspective' : not supported for this version or the enabled extensions
|
||||
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:39: 'structure' : must be qualified as flat in
|
||||
|
@ -105,7 +105,7 @@ ERROR: 0:346: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragm
|
||||
ERROR: 0:347: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
|
||||
ERROR: 0:348: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
|
||||
ERROR: 0:349: 'noperspective' : Reserved word.
|
||||
ERROR: 0:349: 'noperspective' : not supported with this profile: es
|
||||
ERROR: 0:349: 'noperspective' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:349: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
|
||||
ERROR: 0:355: 'interpolateAtCentroid' : required extension not requested: GL_OES_shader_multisample_interpolation
|
||||
ERROR: 0:356: 'interpolateAtSample' : required extension not requested: GL_OES_shader_multisample_interpolation
|
||||
|
@ -21,7 +21,7 @@ ERROR: 0:48: 'assign' : l-value required (can't modify a const)
|
||||
ERROR: 0:51: 'patch' : cannot use interpolation qualifiers with patch
|
||||
ERROR: 0:52: 'patch' : cannot use interpolation qualifiers with patch
|
||||
ERROR: 0:53: 'noperspective' : Reserved word.
|
||||
ERROR: 0:53: 'noperspective' : not supported with this profile: es
|
||||
ERROR: 0:53: 'noperspective' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:53: 'patch' : cannot use interpolation qualifiers with patch
|
||||
ERROR: 0:54: 'sample' : Reserved word.
|
||||
ERROR: 0:54: '' : can only have one auxiliary qualifier (centroid, patch, and sample)
|
||||
|
@ -23,7 +23,7 @@ ERROR: 0:157: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragm
|
||||
ERROR: 0:158: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
|
||||
ERROR: 0:159: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
|
||||
ERROR: 0:160: 'noperspective' : Reserved word.
|
||||
ERROR: 0:160: 'noperspective' : not supported with this profile: es
|
||||
ERROR: 0:160: 'noperspective' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:160: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output
|
||||
ERROR: 0:165: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output
|
||||
ERROR: 0:180: 'interpolateAtCentroid' : no matching overloaded function found
|
||||
|
@ -21,7 +21,7 @@ ERROR: 0:44: 'assign' : l-value required (can't modify a const)
|
||||
ERROR: 0:47: 'patch' : cannot use interpolation qualifiers with patch
|
||||
ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch
|
||||
ERROR: 0:49: 'noperspective' : Reserved word.
|
||||
ERROR: 0:49: 'noperspective' : not supported with this profile: es
|
||||
ERROR: 0:49: 'noperspective' : not supported for this version or the enabled extensions
|
||||
ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch
|
||||
ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample)
|
||||
ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized
|
||||
|
@ -74,12 +74,11 @@ gl_FragCoord origin is upper left
|
||||
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
|
||||
0:17 Constant:
|
||||
0:17 1 (const uint)
|
||||
0:17 Convert int to bool ( temp bool)
|
||||
0:17 Convert float to int ( temp int)
|
||||
0:17 condf: direct index for structure ( uniform float)
|
||||
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
|
||||
0:17 Constant:
|
||||
0:17 0 (const uint)
|
||||
0:17 Convert float to bool ( temp bool)
|
||||
0:17 condf: direct index for structure ( uniform float)
|
||||
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
|
||||
0:17 Constant:
|
||||
0:17 0 (const uint)
|
||||
0:17 Convert float to bool ( temp bool)
|
||||
0:17 condf1: direct index for structure ( uniform 1-component vector of float)
|
||||
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
|
||||
@ -243,12 +242,11 @@ gl_FragCoord origin is upper left
|
||||
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
|
||||
0:17 Constant:
|
||||
0:17 1 (const uint)
|
||||
0:17 Convert int to bool ( temp bool)
|
||||
0:17 Convert float to int ( temp int)
|
||||
0:17 condf: direct index for structure ( uniform float)
|
||||
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
|
||||
0:17 Constant:
|
||||
0:17 0 (const uint)
|
||||
0:17 Convert float to bool ( temp bool)
|
||||
0:17 condf: direct index for structure ( uniform float)
|
||||
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
|
||||
0:17 Constant:
|
||||
0:17 0 (const uint)
|
||||
0:17 Convert float to bool ( temp bool)
|
||||
0:17 condf1: direct index for structure ( uniform 1-component vector of float)
|
||||
0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1})
|
||||
@ -335,12 +333,12 @@ gl_FragCoord origin is upper left
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 140
|
||||
// Id's are bound by 139
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 138
|
||||
EntryPoint Fragment 4 "main" 137
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source HLSL 500
|
||||
Name 4 "main"
|
||||
@ -352,17 +350,17 @@ gl_FragCoord origin is upper left
|
||||
MemberName 16($Global) 2 "condf1"
|
||||
MemberName 16($Global) 3 "condi1"
|
||||
Name 18 ""
|
||||
Name 88 "f"
|
||||
Name 101 "i"
|
||||
Name 121 "g"
|
||||
Name 138 "@entryPointOutput"
|
||||
Name 87 "f"
|
||||
Name 100 "i"
|
||||
Name 120 "g"
|
||||
Name 137 "@entryPointOutput"
|
||||
MemberDecorate 16($Global) 0 Offset 0
|
||||
MemberDecorate 16($Global) 1 Offset 4
|
||||
MemberDecorate 16($Global) 2 Offset 8
|
||||
MemberDecorate 16($Global) 3 Offset 12
|
||||
Decorate 16($Global) Block
|
||||
Decorate 18 DescriptorSet 0
|
||||
Decorate 138(@entryPointOutput) Location 0
|
||||
Decorate 137(@entryPointOutput) Location 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
@ -388,25 +386,25 @@ gl_FragCoord origin is upper left
|
||||
53: 6(float) Constant 1077936128
|
||||
57: 15(int) Constant 3
|
||||
64: 6(float) Constant 1082130432
|
||||
83: 6(float) Constant 1084227584
|
||||
87: TypePointer Function 6(float)
|
||||
100: TypePointer Function 15(int)
|
||||
125: 6(float) Constant 1088421888
|
||||
126: 6(float) Constant 1090519040
|
||||
137: TypePointer Output 7(fvec4)
|
||||
138(@entryPointOutput): 137(ptr) Variable Output
|
||||
82: 6(float) Constant 1084227584
|
||||
86: TypePointer Function 6(float)
|
||||
99: TypePointer Function 15(int)
|
||||
124: 6(float) Constant 1088421888
|
||||
125: 6(float) Constant 1090519040
|
||||
136: TypePointer Output 7(fvec4)
|
||||
137(@entryPointOutput): 136(ptr) Variable Output
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
139: 7(fvec4) FunctionCall 9(@main()
|
||||
Store 138(@entryPointOutput) 139
|
||||
138: 7(fvec4) FunctionCall 9(@main()
|
||||
Store 137(@entryPointOutput) 138
|
||||
Return
|
||||
FunctionEnd
|
||||
9(@main(): 7(fvec4) Function None 8
|
||||
10: Label
|
||||
12(a): 11(ptr) Variable Function
|
||||
88(f): 87(ptr) Variable Function
|
||||
101(i): 100(ptr) Variable Function
|
||||
121(g): 87(ptr) Variable Function
|
||||
87(f): 86(ptr) Variable Function
|
||||
100(i): 99(ptr) Variable Function
|
||||
120(g): 86(ptr) Variable Function
|
||||
Store 12(a) 14
|
||||
21: 20(ptr) AccessChain 18 19
|
||||
22: 15(int) Load 21
|
||||
@ -457,85 +455,84 @@ gl_FragCoord origin is upper left
|
||||
70: 23(bool) INotEqual 69 25
|
||||
71: 35(ptr) AccessChain 18 34
|
||||
72: 6(float) Load 71
|
||||
73: 15(int) ConvertFToS 72
|
||||
74: 23(bool) INotEqual 73 25
|
||||
75: 23(bool) LogicalAnd 70 74
|
||||
76: 35(ptr) AccessChain 18 46
|
||||
77: 6(float) Load 76
|
||||
78: 23(bool) FOrdNotEqual 77 38
|
||||
79: 23(bool) LogicalOr 75 78
|
||||
SelectionMerge 81 None
|
||||
BranchConditional 79 80 81
|
||||
80: Label
|
||||
82: 7(fvec4) Load 12(a)
|
||||
84: 7(fvec4) CompositeConstruct 83 83 83 83
|
||||
85: 7(fvec4) FAdd 82 84
|
||||
ReturnValue 85
|
||||
81: Label
|
||||
89: 35(ptr) AccessChain 18 34
|
||||
90: 6(float) Load 89
|
||||
Store 88(f) 90
|
||||
Branch 91
|
||||
91: Label
|
||||
LoopMerge 93 94 None
|
||||
Branch 95
|
||||
95: Label
|
||||
96: 6(float) Load 88(f)
|
||||
97: 23(bool) FOrdNotEqual 96 38
|
||||
BranchConditional 97 92 93
|
||||
92: Label
|
||||
98: 6(float) Load 88(f)
|
||||
99: 6(float) FSub 98 30
|
||||
Store 88(f) 99
|
||||
Branch 94
|
||||
94: Label
|
||||
Branch 91
|
||||
93: Label
|
||||
102: 20(ptr) AccessChain 18 19
|
||||
103: 15(int) Load 102
|
||||
Store 101(i) 103
|
||||
73: 23(bool) FOrdNotEqual 72 38
|
||||
74: 23(bool) LogicalAnd 70 73
|
||||
75: 35(ptr) AccessChain 18 46
|
||||
76: 6(float) Load 75
|
||||
77: 23(bool) FOrdNotEqual 76 38
|
||||
78: 23(bool) LogicalOr 74 77
|
||||
SelectionMerge 80 None
|
||||
BranchConditional 78 79 80
|
||||
79: Label
|
||||
81: 7(fvec4) Load 12(a)
|
||||
83: 7(fvec4) CompositeConstruct 82 82 82 82
|
||||
84: 7(fvec4) FAdd 81 83
|
||||
ReturnValue 84
|
||||
80: Label
|
||||
88: 35(ptr) AccessChain 18 34
|
||||
89: 6(float) Load 88
|
||||
Store 87(f) 89
|
||||
Branch 90
|
||||
90: Label
|
||||
LoopMerge 92 93 None
|
||||
Branch 94
|
||||
94: Label
|
||||
95: 6(float) Load 87(f)
|
||||
96: 23(bool) FOrdNotEqual 95 38
|
||||
BranchConditional 96 91 92
|
||||
91: Label
|
||||
97: 6(float) Load 87(f)
|
||||
98: 6(float) FSub 97 30
|
||||
Store 87(f) 98
|
||||
Branch 93
|
||||
93: Label
|
||||
Branch 90
|
||||
92: Label
|
||||
101: 20(ptr) AccessChain 18 19
|
||||
102: 15(int) Load 101
|
||||
Store 100(i) 102
|
||||
Branch 103
|
||||
103: Label
|
||||
LoopMerge 105 106 None
|
||||
Branch 104
|
||||
104: Label
|
||||
LoopMerge 106 107 None
|
||||
Branch 105
|
||||
105: Label
|
||||
108: 15(int) Load 101(i)
|
||||
109: 15(int) ISub 108 19
|
||||
Store 101(i) 109
|
||||
Branch 107
|
||||
107: Label
|
||||
110: 15(int) Load 101(i)
|
||||
111: 23(bool) INotEqual 110 25
|
||||
BranchConditional 111 104 106
|
||||
107: 15(int) Load 100(i)
|
||||
108: 15(int) ISub 107 19
|
||||
Store 100(i) 108
|
||||
Branch 106
|
||||
106: Label
|
||||
Branch 112
|
||||
112: Label
|
||||
LoopMerge 114 115 None
|
||||
Branch 116
|
||||
116: Label
|
||||
117: 15(int) Load 101(i)
|
||||
118: 23(bool) INotEqual 117 25
|
||||
BranchConditional 118 113 114
|
||||
113: Label
|
||||
119: 15(int) Load 101(i)
|
||||
120: 15(int) ISub 119 19
|
||||
Store 101(i) 120
|
||||
Branch 115
|
||||
115: Label
|
||||
Branch 112
|
||||
114: Label
|
||||
122: 35(ptr) AccessChain 18 34
|
||||
123: 6(float) Load 122
|
||||
124: 23(bool) FOrdNotEqual 123 38
|
||||
127: 6(float) Select 124 125 126
|
||||
Store 121(g) 127
|
||||
128: 6(float) Load 121(g)
|
||||
129: 7(fvec4) Load 12(a)
|
||||
130: 7(fvec4) CompositeConstruct 128 128 128 128
|
||||
131: 7(fvec4) FAdd 129 130
|
||||
Store 12(a) 131
|
||||
132: 7(fvec4) Load 12(a)
|
||||
133: 7(fvec4) CompositeConstruct 30 30 30 30
|
||||
134: 7(fvec4) FSub 132 133
|
||||
ReturnValue 134
|
||||
109: 15(int) Load 100(i)
|
||||
110: 23(bool) INotEqual 109 25
|
||||
BranchConditional 110 103 105
|
||||
105: Label
|
||||
Branch 111
|
||||
111: Label
|
||||
LoopMerge 113 114 None
|
||||
Branch 115
|
||||
115: Label
|
||||
116: 15(int) Load 100(i)
|
||||
117: 23(bool) INotEqual 116 25
|
||||
BranchConditional 117 112 113
|
||||
112: Label
|
||||
118: 15(int) Load 100(i)
|
||||
119: 15(int) ISub 118 19
|
||||
Store 100(i) 119
|
||||
Branch 114
|
||||
114: Label
|
||||
Branch 111
|
||||
113: Label
|
||||
121: 35(ptr) AccessChain 18 34
|
||||
122: 6(float) Load 121
|
||||
123: 23(bool) FOrdNotEqual 122 38
|
||||
126: 6(float) Select 123 124 125
|
||||
Store 120(g) 126
|
||||
127: 6(float) Load 120(g)
|
||||
128: 7(fvec4) Load 12(a)
|
||||
129: 7(fvec4) CompositeConstruct 127 127 127 127
|
||||
130: 7(fvec4) FAdd 128 129
|
||||
Store 12(a) 130
|
||||
131: 7(fvec4) Load 12(a)
|
||||
132: 7(fvec4) CompositeConstruct 30 30 30 30
|
||||
133: 7(fvec4) FSub 131 132
|
||||
ReturnValue 133
|
||||
FunctionEnd
|
||||
|
@ -13,12 +13,11 @@ gl_FragCoord origin is upper left
|
||||
0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:13 Constant:
|
||||
0:13 0 (const uint)
|
||||
0:13 Convert int to bool ( temp bool)
|
||||
0:13 Convert float to int ( temp int)
|
||||
0:13 fval: direct index for structure ( uniform float)
|
||||
0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:13 Constant:
|
||||
0:13 2 (const uint)
|
||||
0:13 Convert float to bool ( temp bool)
|
||||
0:13 fval: direct index for structure ( uniform float)
|
||||
0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:13 Constant:
|
||||
0:13 2 (const uint)
|
||||
0:13 true case is null
|
||||
0:14 Test condition and select ( temp void)
|
||||
0:14 Condition
|
||||
@ -28,12 +27,11 @@ gl_FragCoord origin is upper left
|
||||
0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:14 Constant:
|
||||
0:14 0 (const uint)
|
||||
0:14 Convert int to bool ( temp bool)
|
||||
0:14 Convert float to int ( temp int)
|
||||
0:14 fval: direct index for structure ( uniform float)
|
||||
0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:14 Constant:
|
||||
0:14 2 (const uint)
|
||||
0:14 Convert float to bool ( temp bool)
|
||||
0:14 fval: direct index for structure ( uniform float)
|
||||
0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:14 Constant:
|
||||
0:14 2 (const uint)
|
||||
0:14 true case is null
|
||||
0:17 move second child to first child ( temp 4-component vector of float)
|
||||
0:17 Color: direct index for structure ( temp 4-component vector of float)
|
||||
@ -79,12 +77,11 @@ gl_FragCoord origin is upper left
|
||||
0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:13 Constant:
|
||||
0:13 0 (const uint)
|
||||
0:13 Convert int to bool ( temp bool)
|
||||
0:13 Convert float to int ( temp int)
|
||||
0:13 fval: direct index for structure ( uniform float)
|
||||
0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:13 Constant:
|
||||
0:13 2 (const uint)
|
||||
0:13 Convert float to bool ( temp bool)
|
||||
0:13 fval: direct index for structure ( uniform float)
|
||||
0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:13 Constant:
|
||||
0:13 2 (const uint)
|
||||
0:13 true case is null
|
||||
0:14 Test condition and select ( temp void)
|
||||
0:14 Condition
|
||||
@ -94,12 +91,11 @@ gl_FragCoord origin is upper left
|
||||
0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:14 Constant:
|
||||
0:14 0 (const uint)
|
||||
0:14 Convert int to bool ( temp bool)
|
||||
0:14 Convert float to int ( temp int)
|
||||
0:14 fval: direct index for structure ( uniform float)
|
||||
0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:14 Constant:
|
||||
0:14 2 (const uint)
|
||||
0:14 Convert float to bool ( temp bool)
|
||||
0:14 fval: direct index for structure ( uniform float)
|
||||
0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4})
|
||||
0:14 Constant:
|
||||
0:14 2 (const uint)
|
||||
0:14 true case is null
|
||||
0:17 move second child to first child ( temp 4-component vector of float)
|
||||
0:17 Color: direct index for structure ( temp 4-component vector of float)
|
||||
@ -129,12 +125,12 @@ gl_FragCoord origin is upper left
|
||||
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 57
|
||||
// Id's are bound by 56
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 54
|
||||
EntryPoint Fragment 4 "main" 53
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source HLSL 500
|
||||
Name 4 "main"
|
||||
@ -147,15 +143,15 @@ gl_FragCoord origin is upper left
|
||||
MemberName 14($Global) 2 "fval"
|
||||
MemberName 14($Global) 3 "fval4"
|
||||
Name 16 ""
|
||||
Name 45 "psout"
|
||||
Name 54 "@entryPointOutput.Color"
|
||||
Name 44 "psout"
|
||||
Name 53 "@entryPointOutput.Color"
|
||||
MemberDecorate 14($Global) 0 Offset 0
|
||||
MemberDecorate 14($Global) 1 Offset 16
|
||||
MemberDecorate 14($Global) 2 Offset 32
|
||||
MemberDecorate 14($Global) 3 Offset 48
|
||||
Decorate 14($Global) Block
|
||||
Decorate 16 DescriptorSet 0
|
||||
Decorate 54(@entryPointOutput.Color) Location 0
|
||||
Decorate 53(@entryPointOutput.Color) Location 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
@ -174,29 +170,29 @@ gl_FragCoord origin is upper left
|
||||
23: 22(int) Constant 0
|
||||
25: 12(int) Constant 2
|
||||
26: TypePointer Uniform 6(float)
|
||||
44: TypePointer Function 8(PS_OUTPUT)
|
||||
46: 6(float) Constant 1065353216
|
||||
47: 7(fvec4) ConstantComposite 46 46 46 46
|
||||
48: TypePointer Function 7(fvec4)
|
||||
53: TypePointer Output 7(fvec4)
|
||||
54(@entryPointOutput.Color): 53(ptr) Variable Output
|
||||
29: 6(float) Constant 0
|
||||
43: TypePointer Function 8(PS_OUTPUT)
|
||||
45: 6(float) Constant 1065353216
|
||||
46: 7(fvec4) ConstantComposite 45 45 45 45
|
||||
47: TypePointer Function 7(fvec4)
|
||||
52: TypePointer Output 7(fvec4)
|
||||
53(@entryPointOutput.Color): 52(ptr) Variable Output
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
55:8(PS_OUTPUT) FunctionCall 10(@main()
|
||||
56: 7(fvec4) CompositeExtract 55 0
|
||||
Store 54(@entryPointOutput.Color) 56
|
||||
54:8(PS_OUTPUT) FunctionCall 10(@main()
|
||||
55: 7(fvec4) CompositeExtract 54 0
|
||||
Store 53(@entryPointOutput.Color) 55
|
||||
Return
|
||||
FunctionEnd
|
||||
10(@main():8(PS_OUTPUT) Function None 9
|
||||
11: Label
|
||||
45(psout): 44(ptr) Variable Function
|
||||
44(psout): 43(ptr) Variable Function
|
||||
19: 18(ptr) AccessChain 16 17
|
||||
20: 12(int) Load 19
|
||||
24: 21(bool) INotEqual 20 23
|
||||
27: 26(ptr) AccessChain 16 25
|
||||
28: 6(float) Load 27
|
||||
29: 12(int) ConvertFToS 28
|
||||
30: 21(bool) INotEqual 29 23
|
||||
30: 21(bool) FOrdNotEqual 28 29
|
||||
31: 21(bool) LogicalAnd 24 30
|
||||
SelectionMerge 33 None
|
||||
BranchConditional 31 32 33
|
||||
@ -208,16 +204,15 @@ gl_FragCoord origin is upper left
|
||||
36: 21(bool) INotEqual 35 23
|
||||
37: 26(ptr) AccessChain 16 25
|
||||
38: 6(float) Load 37
|
||||
39: 12(int) ConvertFToS 38
|
||||
40: 21(bool) INotEqual 39 23
|
||||
41: 21(bool) LogicalOr 36 40
|
||||
SelectionMerge 43 None
|
||||
BranchConditional 41 42 43
|
||||
42: Label
|
||||
Branch 43
|
||||
43: Label
|
||||
49: 48(ptr) AccessChain 45(psout) 17
|
||||
Store 49 47
|
||||
50:8(PS_OUTPUT) Load 45(psout)
|
||||
ReturnValue 50
|
||||
39: 21(bool) FOrdNotEqual 38 29
|
||||
40: 21(bool) LogicalOr 36 39
|
||||
SelectionMerge 42 None
|
||||
BranchConditional 40 41 42
|
||||
41: Label
|
||||
Branch 42
|
||||
42: Label
|
||||
48: 47(ptr) AccessChain 44(psout) 17
|
||||
Store 48 46
|
||||
49:8(PS_OUTPUT) Load 44(psout)
|
||||
ReturnValue 49
|
||||
FunctionEnd
|
||||
|
125
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
vendored
Normal file
125
3rdparty/glslang/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
vendored
Normal file
@ -0,0 +1,125 @@
|
||||
hlsl.structbuffer.incdec.frag
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 70
|
||||
|
||||
Capability Shader
|
||||
Extension "SPV_GOOGLE_hlsl_functionality1"
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 63 66
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source HLSL 500
|
||||
Name 4 "main"
|
||||
Name 12 "@main(u1;"
|
||||
Name 11 "pos"
|
||||
Name 16 "result"
|
||||
Name 20 "sbuf_rw_i"
|
||||
MemberName 20(sbuf_rw_i) 0 "@data"
|
||||
Name 22 "sbuf_rw_i"
|
||||
Name 26 "sbuf_rw_d"
|
||||
Name 27 "sbuf_rw_nocounter"
|
||||
Name 33 "c1"
|
||||
Name 34 "sbuf_rw_i@count"
|
||||
MemberName 34(sbuf_rw_i@count) 0 "@count"
|
||||
Name 36 "sbuf_rw_i@count"
|
||||
Name 42 "c2"
|
||||
Name 43 "sbuf_rw_d@count"
|
||||
Name 61 "pos"
|
||||
Name 63 "pos"
|
||||
Name 66 "@entryPointOutput"
|
||||
Name 67 "param"
|
||||
Decorate 19 ArrayStride 16
|
||||
MemberDecorate 20(sbuf_rw_i) 0 Offset 0
|
||||
Decorate 20(sbuf_rw_i) BufferBlock
|
||||
Decorate 22(sbuf_rw_i) DescriptorSet 0
|
||||
Decorate 26(sbuf_rw_d) DescriptorSet 0
|
||||
Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
|
||||
MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
|
||||
Decorate 34(sbuf_rw_i@count) BufferBlock
|
||||
Decorate 36(sbuf_rw_i@count) DescriptorSet 0
|
||||
Decorate 43(sbuf_rw_d@count) DescriptorSet 0
|
||||
Decorate 63(pos) Flat
|
||||
Decorate 63(pos) Location 0
|
||||
DecorateStringGOOGLE 63(pos) DecorationHlslSemanticGOOGLE "FOO"
|
||||
Decorate 66(@entryPointOutput) Location 0
|
||||
DecorateStringGOOGLE 66(@entryPointOutput) DecorationHlslSemanticGOOGLE "SV_TARGET0"
|
||||
DecorateId 22(sbuf_rw_i) DecorationHlslCounterBufferGOOGLE 36(sbuf_rw_i@count)
|
||||
DecorateId 26(sbuf_rw_d) DecorationHlslCounterBufferGOOGLE 43(sbuf_rw_d@count)
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 32 0
|
||||
7: TypePointer Function 6(int)
|
||||
8: TypeFloat 32
|
||||
9: TypeVector 8(float) 4
|
||||
10: TypeFunction 9(fvec4) 7(ptr)
|
||||
14: TypeVector 6(int) 4
|
||||
15: TypePointer Function 14(ivec4)
|
||||
17: 6(int) Constant 0
|
||||
18: 14(ivec4) ConstantComposite 17 17 17 17
|
||||
19: TypeRuntimeArray 14(ivec4)
|
||||
20(sbuf_rw_i): TypeStruct 19
|
||||
21: TypePointer Uniform 20(sbuf_rw_i)
|
||||
22(sbuf_rw_i): 21(ptr) Variable Uniform
|
||||
23: TypeInt 32 1
|
||||
24: 23(int) Constant 0
|
||||
25: 23(int) Constant 7
|
||||
26(sbuf_rw_d): 21(ptr) Variable Uniform
|
||||
27(sbuf_rw_nocounter): 21(ptr) Variable Uniform
|
||||
28: 23(int) Constant 5
|
||||
29: 6(int) Constant 2
|
||||
30: 14(ivec4) ConstantComposite 29 29 29 29
|
||||
31: TypePointer Uniform 14(ivec4)
|
||||
34(sbuf_rw_i@count): TypeStruct 23(int)
|
||||
35: TypePointer Uniform 34(sbuf_rw_i@count)
|
||||
36(sbuf_rw_i@count): 35(ptr) Variable Uniform
|
||||
37: TypePointer Uniform 23(int)
|
||||
39: 23(int) Constant 1
|
||||
40: 6(int) Constant 1
|
||||
43(sbuf_rw_d@count): 35(ptr) Variable Uniform
|
||||
45: 23(int) Constant 4294967295
|
||||
62: TypePointer Input 6(int)
|
||||
63(pos): 62(ptr) Variable Input
|
||||
65: TypePointer Output 9(fvec4)
|
||||
66(@entryPointOutput): 65(ptr) Variable Output
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
61(pos): 7(ptr) Variable Function
|
||||
67(param): 7(ptr) Variable Function
|
||||
64: 6(int) Load 63(pos)
|
||||
Store 61(pos) 64
|
||||
68: 6(int) Load 61(pos)
|
||||
Store 67(param) 68
|
||||
69: 9(fvec4) FunctionCall 12(@main(u1;) 67(param)
|
||||
Store 66(@entryPointOutput) 69
|
||||
Return
|
||||
FunctionEnd
|
||||
12(@main(u1;): 9(fvec4) Function None 10
|
||||
11(pos): 7(ptr) FunctionParameter
|
||||
13: Label
|
||||
16(result): 15(ptr) Variable Function
|
||||
33(c1): 7(ptr) Variable Function
|
||||
42(c2): 7(ptr) Variable Function
|
||||
Store 16(result) 18
|
||||
32: 31(ptr) AccessChain 27(sbuf_rw_nocounter) 24 28
|
||||
Store 32 30
|
||||
38: 37(ptr) AccessChain 36(sbuf_rw_i@count) 24
|
||||
41: 6(int) AtomicIAdd 38 40 17 39
|
||||
Store 33(c1) 41
|
||||
44: 37(ptr) AccessChain 43(sbuf_rw_d@count) 24
|
||||
46: 6(int) AtomicIAdd 44 40 17 45
|
||||
47: 6(int) IAdd 46 45
|
||||
Store 42(c2) 47
|
||||
48: 7(ptr) AccessChain 16(result) 17
|
||||
49: 6(int) Load 48
|
||||
50: 8(float) ConvertUToF 49
|
||||
51: 7(ptr) AccessChain 16(result) 40
|
||||
52: 6(int) Load 51
|
||||
53: 8(float) ConvertUToF 52
|
||||
54: 6(int) Load 33(c1)
|
||||
55: 8(float) ConvertUToF 54
|
||||
56: 6(int) Load 42(c2)
|
||||
57: 8(float) ConvertUToF 56
|
||||
58: 9(fvec4) CompositeConstruct 50 53 55 57
|
||||
ReturnValue 58
|
||||
FunctionEnd
|
38
3rdparty/glslang/Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out
vendored
Normal file
38
3rdparty/glslang/Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
nvShaderNoperspectiveInterpolation.frag
|
||||
ERROR: 0:5: 'noperspective' : Reserved word.
|
||||
ERROR: 0:5: 'noperspective' : not supported for this version or the enabled extensions
|
||||
ERROR: 2 compilation errors. No code generated.
|
||||
|
||||
|
||||
Shader version: 300
|
||||
Requested GL_NV_shader_noperspective_interpolation
|
||||
ERROR: node is still EOpNull!
|
||||
0:13 Function Definition: main( ( global void)
|
||||
0:13 Function Parameters:
|
||||
0:14 Sequence
|
||||
0:14 move second child to first child ( temp mediump 4-component vector of float)
|
||||
0:14 'fragColor' ( out mediump 4-component vector of float)
|
||||
0:14 'color' ( noperspective in mediump 4-component vector of float)
|
||||
0:? Linker Objects
|
||||
0:? 'bad' ( noperspective in mediump 4-component vector of float)
|
||||
0:? 'color' ( noperspective in mediump 4-component vector of float)
|
||||
0:? 'fragColor' ( out mediump 4-component vector of float)
|
||||
|
||||
|
||||
Linked fragment stage:
|
||||
|
||||
|
||||
Shader version: 300
|
||||
Requested GL_NV_shader_noperspective_interpolation
|
||||
ERROR: node is still EOpNull!
|
||||
0:13 Function Definition: main( ( global void)
|
||||
0:13 Function Parameters:
|
||||
0:14 Sequence
|
||||
0:14 move second child to first child ( temp mediump 4-component vector of float)
|
||||
0:14 'fragColor' ( out mediump 4-component vector of float)
|
||||
0:14 'color' ( noperspective in mediump 4-component vector of float)
|
||||
0:? Linker Objects
|
||||
0:? 'bad' ( noperspective in mediump 4-component vector of float)
|
||||
0:? 'color' ( noperspective in mediump 4-component vector of float)
|
||||
0:? 'fragColor' ( out mediump 4-component vector of float)
|
||||
|
674
3rdparty/glslang/Test/baseResults/spv.int16.frag.out
vendored
674
3rdparty/glslang/Test/baseResults/spv.int16.frag.out
vendored
@ -1,7 +1,7 @@
|
||||
spv.int16.frag
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 525
|
||||
// Id's are bound by 523
|
||||
|
||||
Capability Shader
|
||||
Capability Float16
|
||||
@ -55,48 +55,48 @@ spv.int16.frag
|
||||
Name 220 "i"
|
||||
Name 227 "uv"
|
||||
Name 243 "i64"
|
||||
Name 283 "b"
|
||||
Name 345 "i16v"
|
||||
Name 348 "i16"
|
||||
Name 358 "u16v"
|
||||
Name 360 "u16"
|
||||
Name 430 "i32"
|
||||
Name 433 "i64"
|
||||
Name 436 "i16v4"
|
||||
Name 439 "u32"
|
||||
Name 440 "u16v2"
|
||||
Name 444 "u64"
|
||||
Name 447 "u16v4"
|
||||
Name 459 "bv"
|
||||
Name 520 "Block"
|
||||
MemberName 520(Block) 0 "i16"
|
||||
MemberName 520(Block) 1 "i16v2"
|
||||
MemberName 520(Block) 2 "i16v3"
|
||||
MemberName 520(Block) 3 "i16v4"
|
||||
MemberName 520(Block) 4 "u16"
|
||||
MemberName 520(Block) 5 "u16v2"
|
||||
MemberName 520(Block) 6 "u16v3"
|
||||
MemberName 520(Block) 7 "u16v4"
|
||||
Name 522 "block"
|
||||
Name 523 "si16"
|
||||
Name 524 "su16"
|
||||
Name 281 "b"
|
||||
Name 343 "i16v"
|
||||
Name 346 "i16"
|
||||
Name 356 "u16v"
|
||||
Name 358 "u16"
|
||||
Name 428 "i32"
|
||||
Name 431 "i64"
|
||||
Name 434 "i16v4"
|
||||
Name 437 "u32"
|
||||
Name 438 "u16v2"
|
||||
Name 442 "u64"
|
||||
Name 445 "u16v4"
|
||||
Name 457 "bv"
|
||||
Name 518 "Block"
|
||||
MemberName 518(Block) 0 "i16"
|
||||
MemberName 518(Block) 1 "i16v2"
|
||||
MemberName 518(Block) 2 "i16v3"
|
||||
MemberName 518(Block) 3 "i16v4"
|
||||
MemberName 518(Block) 4 "u16"
|
||||
MemberName 518(Block) 5 "u16v2"
|
||||
MemberName 518(Block) 6 "u16v3"
|
||||
MemberName 518(Block) 7 "u16v4"
|
||||
Name 520 "block"
|
||||
Name 521 "si16"
|
||||
Name 522 "su16"
|
||||
MemberDecorate 24(Uniforms) 0 Offset 0
|
||||
Decorate 24(Uniforms) Block
|
||||
Decorate 26 DescriptorSet 0
|
||||
Decorate 26 Binding 0
|
||||
MemberDecorate 520(Block) 0 Offset 0
|
||||
MemberDecorate 520(Block) 1 Offset 4
|
||||
MemberDecorate 520(Block) 2 Offset 8
|
||||
MemberDecorate 520(Block) 3 Offset 16
|
||||
MemberDecorate 520(Block) 4 Offset 24
|
||||
MemberDecorate 520(Block) 5 Offset 28
|
||||
MemberDecorate 520(Block) 6 Offset 32
|
||||
MemberDecorate 520(Block) 7 Offset 40
|
||||
Decorate 520(Block) Block
|
||||
Decorate 522(block) DescriptorSet 0
|
||||
Decorate 522(block) Binding 1
|
||||
Decorate 523(si16) SpecId 100
|
||||
Decorate 524(su16) SpecId 101
|
||||
MemberDecorate 518(Block) 0 Offset 0
|
||||
MemberDecorate 518(Block) 1 Offset 4
|
||||
MemberDecorate 518(Block) 2 Offset 8
|
||||
MemberDecorate 518(Block) 3 Offset 16
|
||||
MemberDecorate 518(Block) 4 Offset 24
|
||||
MemberDecorate 518(Block) 5 Offset 28
|
||||
MemberDecorate 518(Block) 6 Offset 32
|
||||
MemberDecorate 518(Block) 7 Offset 40
|
||||
Decorate 518(Block) Block
|
||||
Decorate 520(block) DescriptorSet 0
|
||||
Decorate 520(block) Binding 1
|
||||
Decorate 521(si16) SpecId 100
|
||||
Decorate 522(su16) SpecId 101
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
14: TypeInt 16 1
|
||||
@ -171,28 +171,28 @@ spv.int16.frag
|
||||
242: TypePointer Function 71(int)
|
||||
264: 17(int) Constant 1
|
||||
270: 17(int) Constant 2
|
||||
275: TypeVector 27(int) 3
|
||||
282: TypePointer Function 173(bool)
|
||||
284: 17(int) Constant 0
|
||||
298: TypePointer Function 17(int)
|
||||
356: 52(ivec2) ConstantComposite 21 21
|
||||
365: 193(ivec3) ConstantComposite 184 184 184
|
||||
407: 173(bool) ConstantTrue
|
||||
414: 173(bool) ConstantFalse
|
||||
415: 174(bvec2) ConstantComposite 414 414
|
||||
427: TypeVector 173(bool) 3
|
||||
428: 427(bvec3) ConstantComposite 414 414 414
|
||||
434: TypeVector 14(int) 4
|
||||
435: TypePointer Function 434(ivec4)
|
||||
443: TypePointer Function 77(int)
|
||||
445: TypeVector 36(int) 4
|
||||
446: TypePointer Function 445(ivec4)
|
||||
458: TypePointer Function 427(bvec3)
|
||||
520(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4)
|
||||
521: TypePointer Uniform 520(Block)
|
||||
522(block): 521(ptr) Variable Uniform
|
||||
523(si16): 14(int) SpecConstant 4294967286
|
||||
524(su16): 36(int) SpecConstant 20
|
||||
276: TypeVector 27(int) 3
|
||||
280: TypePointer Function 173(bool)
|
||||
282: 17(int) Constant 0
|
||||
296: TypePointer Function 17(int)
|
||||
354: 52(ivec2) ConstantComposite 21 21
|
||||
363: 193(ivec3) ConstantComposite 184 184 184
|
||||
405: 173(bool) ConstantTrue
|
||||
412: 173(bool) ConstantFalse
|
||||
413: 174(bvec2) ConstantComposite 412 412
|
||||
425: TypeVector 173(bool) 3
|
||||
426: 425(bvec3) ConstantComposite 412 412 412
|
||||
432: TypeVector 14(int) 4
|
||||
433: TypePointer Function 432(ivec4)
|
||||
441: TypePointer Function 77(int)
|
||||
443: TypeVector 36(int) 4
|
||||
444: TypePointer Function 443(ivec4)
|
||||
456: TypePointer Function 425(bvec3)
|
||||
518(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 432(ivec4) 36(int) 57(ivec2) 193(ivec3) 443(ivec4)
|
||||
519: TypePointer Uniform 518(Block)
|
||||
520(block): 519(ptr) Variable Uniform
|
||||
521(si16): 14(int) SpecConstant 4294967286
|
||||
522(su16): 36(int) SpecConstant 20
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
Return
|
||||
@ -371,7 +371,7 @@ spv.int16.frag
|
||||
220(i): 219(ptr) Variable Function
|
||||
227(uv): 226(ptr) Variable Function
|
||||
243(i64): 242(ptr) Variable Function
|
||||
283(b): 282(ptr) Variable Function
|
||||
281(b): 280(ptr) Variable Function
|
||||
196: 193(ivec3) Load 195(u16v)
|
||||
198: 197(ivec3) CompositeConstruct 179 179 179
|
||||
199: 193(ivec3) IAdd 196 198
|
||||
@ -460,287 +460,285 @@ spv.int16.frag
|
||||
273: 14(int) ShiftLeftLogical 269 272
|
||||
Store 200(i16) 273
|
||||
274: 193(ivec3) Load 195(u16v)
|
||||
276: 275(ivec3) UConvert 274
|
||||
277: 275(ivec3) Bitcast 276
|
||||
278: 27(int) Load 220(i)
|
||||
279: 275(ivec3) CompositeConstruct 278 278 278
|
||||
280: 275(ivec3) ShiftLeftLogical 277 279
|
||||
281: 225(ivec3) Bitcast 280
|
||||
Store 227(uv) 281
|
||||
285: 37(ptr) AccessChain 195(u16v) 284
|
||||
286: 36(int) Load 285
|
||||
287: 14(int) Load 200(i16)
|
||||
288: 36(int) Bitcast 287
|
||||
289: 173(bool) INotEqual 286 288
|
||||
Store 283(b) 289
|
||||
290: 14(int) Load 200(i16)
|
||||
291: 36(int) Bitcast 290
|
||||
292: 37(ptr) AccessChain 195(u16v) 284
|
||||
293: 36(int) Load 292
|
||||
294: 173(bool) IEqual 291 293
|
||||
Store 283(b) 294
|
||||
295: 37(ptr) AccessChain 195(u16v) 284
|
||||
296: 36(int) Load 295
|
||||
297: 17(int) UConvert 296
|
||||
299: 298(ptr) AccessChain 227(uv) 264
|
||||
300: 17(int) Load 299
|
||||
301: 173(bool) UGreaterThan 297 300
|
||||
Store 283(b) 301
|
||||
302: 14(int) Load 200(i16)
|
||||
303: 27(int) SConvert 302
|
||||
304: 27(int) Load 220(i)
|
||||
305: 173(bool) SLessThan 303 304
|
||||
Store 283(b) 305
|
||||
306: 37(ptr) AccessChain 195(u16v) 264
|
||||
307: 36(int) Load 306
|
||||
308: 17(int) UConvert 307
|
||||
309: 298(ptr) AccessChain 227(uv) 284
|
||||
310: 17(int) Load 309
|
||||
311: 173(bool) UGreaterThanEqual 308 310
|
||||
Store 283(b) 311
|
||||
312: 14(int) Load 200(i16)
|
||||
313: 27(int) SConvert 312
|
||||
314: 27(int) Load 220(i)
|
||||
315: 173(bool) SLessThanEqual 313 314
|
||||
Store 283(b) 315
|
||||
316: 14(int) Load 200(i16)
|
||||
317: 27(int) SConvert 316
|
||||
318: 17(int) Bitcast 317
|
||||
319: 225(ivec3) Load 227(uv)
|
||||
320: 225(ivec3) CompositeConstruct 318 318 318
|
||||
321: 225(ivec3) BitwiseOr 319 320
|
||||
Store 227(uv) 321
|
||||
322: 14(int) Load 200(i16)
|
||||
323: 27(int) SConvert 322
|
||||
324: 27(int) Load 220(i)
|
||||
325: 27(int) BitwiseOr 323 324
|
||||
Store 220(i) 325
|
||||
326: 14(int) Load 200(i16)
|
||||
327: 71(int) SConvert 326
|
||||
328: 71(int) Load 243(i64)
|
||||
329: 71(int) BitwiseAnd 328 327
|
||||
Store 243(i64) 329
|
||||
330: 193(ivec3) Load 195(u16v)
|
||||
331: 225(ivec3) UConvert 330
|
||||
332: 225(ivec3) Load 227(uv)
|
||||
333: 225(ivec3) BitwiseAnd 331 332
|
||||
Store 227(uv) 333
|
||||
334: 14(int) Load 200(i16)
|
||||
335: 27(int) SConvert 334
|
||||
336: 17(int) Bitcast 335
|
||||
337: 225(ivec3) Load 227(uv)
|
||||
338: 225(ivec3) CompositeConstruct 336 336 336
|
||||
339: 225(ivec3) BitwiseXor 337 338
|
||||
Store 227(uv) 339
|
||||
340: 193(ivec3) Load 195(u16v)
|
||||
341: 14(int) Load 200(i16)
|
||||
342: 36(int) Bitcast 341
|
||||
343: 193(ivec3) CompositeConstruct 342 342 342
|
||||
344: 193(ivec3) BitwiseXor 340 343
|
||||
Store 195(u16v) 344
|
||||
275: 27(int) Load 220(i)
|
||||
277: 276(ivec3) CompositeConstruct 275 275 275
|
||||
278: 193(ivec3) ShiftLeftLogical 274 277
|
||||
279: 225(ivec3) UConvert 278
|
||||
Store 227(uv) 279
|
||||
283: 37(ptr) AccessChain 195(u16v) 282
|
||||
284: 36(int) Load 283
|
||||
285: 14(int) Load 200(i16)
|
||||
286: 36(int) Bitcast 285
|
||||
287: 173(bool) INotEqual 284 286
|
||||
Store 281(b) 287
|
||||
288: 14(int) Load 200(i16)
|
||||
289: 36(int) Bitcast 288
|
||||
290: 37(ptr) AccessChain 195(u16v) 282
|
||||
291: 36(int) Load 290
|
||||
292: 173(bool) IEqual 289 291
|
||||
Store 281(b) 292
|
||||
293: 37(ptr) AccessChain 195(u16v) 282
|
||||
294: 36(int) Load 293
|
||||
295: 17(int) UConvert 294
|
||||
297: 296(ptr) AccessChain 227(uv) 264
|
||||
298: 17(int) Load 297
|
||||
299: 173(bool) UGreaterThan 295 298
|
||||
Store 281(b) 299
|
||||
300: 14(int) Load 200(i16)
|
||||
301: 27(int) SConvert 300
|
||||
302: 27(int) Load 220(i)
|
||||
303: 173(bool) SLessThan 301 302
|
||||
Store 281(b) 303
|
||||
304: 37(ptr) AccessChain 195(u16v) 264
|
||||
305: 36(int) Load 304
|
||||
306: 17(int) UConvert 305
|
||||
307: 296(ptr) AccessChain 227(uv) 282
|
||||
308: 17(int) Load 307
|
||||
309: 173(bool) UGreaterThanEqual 306 308
|
||||
Store 281(b) 309
|
||||
310: 14(int) Load 200(i16)
|
||||
311: 27(int) SConvert 310
|
||||
312: 27(int) Load 220(i)
|
||||
313: 173(bool) SLessThanEqual 311 312
|
||||
Store 281(b) 313
|
||||
314: 14(int) Load 200(i16)
|
||||
315: 27(int) SConvert 314
|
||||
316: 17(int) Bitcast 315
|
||||
317: 225(ivec3) Load 227(uv)
|
||||
318: 225(ivec3) CompositeConstruct 316 316 316
|
||||
319: 225(ivec3) BitwiseOr 317 318
|
||||
Store 227(uv) 319
|
||||
320: 14(int) Load 200(i16)
|
||||
321: 27(int) SConvert 320
|
||||
322: 27(int) Load 220(i)
|
||||
323: 27(int) BitwiseOr 321 322
|
||||
Store 220(i) 323
|
||||
324: 14(int) Load 200(i16)
|
||||
325: 71(int) SConvert 324
|
||||
326: 71(int) Load 243(i64)
|
||||
327: 71(int) BitwiseAnd 326 325
|
||||
Store 243(i64) 327
|
||||
328: 193(ivec3) Load 195(u16v)
|
||||
329: 225(ivec3) UConvert 328
|
||||
330: 225(ivec3) Load 227(uv)
|
||||
331: 225(ivec3) BitwiseAnd 329 330
|
||||
Store 227(uv) 331
|
||||
332: 14(int) Load 200(i16)
|
||||
333: 27(int) SConvert 332
|
||||
334: 17(int) Bitcast 333
|
||||
335: 225(ivec3) Load 227(uv)
|
||||
336: 225(ivec3) CompositeConstruct 334 334 334
|
||||
337: 225(ivec3) BitwiseXor 335 336
|
||||
Store 227(uv) 337
|
||||
338: 193(ivec3) Load 195(u16v)
|
||||
339: 14(int) Load 200(i16)
|
||||
340: 36(int) Bitcast 339
|
||||
341: 193(ivec3) CompositeConstruct 340 340 340
|
||||
342: 193(ivec3) BitwiseXor 338 341
|
||||
Store 195(u16v) 342
|
||||
Return
|
||||
FunctionEnd
|
||||
12(builtinFuncs(): 2 Function None 3
|
||||
13: Label
|
||||
345(i16v): 53(ptr) Variable Function
|
||||
348(i16): 15(ptr) Variable Function
|
||||
358(u16v): 194(ptr) Variable Function
|
||||
360(u16): 37(ptr) Variable Function
|
||||
430(i32): 219(ptr) Variable Function
|
||||
433(i64): 242(ptr) Variable Function
|
||||
436(i16v4): 435(ptr) Variable Function
|
||||
439(u32): 298(ptr) Variable Function
|
||||
440(u16v2): 58(ptr) Variable Function
|
||||
444(u64): 443(ptr) Variable Function
|
||||
447(u16v4): 446(ptr) Variable Function
|
||||
459(bv): 458(ptr) Variable Function
|
||||
346: 52(ivec2) Load 345(i16v)
|
||||
347: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346
|
||||
Store 345(i16v) 347
|
||||
349: 14(int) Load 348(i16)
|
||||
350: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349
|
||||
Store 348(i16) 350
|
||||
351: 52(ivec2) Load 345(i16v)
|
||||
352: 14(int) Load 348(i16)
|
||||
353: 52(ivec2) CompositeConstruct 352 352
|
||||
354: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353
|
||||
Store 345(i16v) 354
|
||||
355: 52(ivec2) Load 345(i16v)
|
||||
357: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356
|
||||
Store 345(i16v) 357
|
||||
359: 193(ivec3) Load 358(u16v)
|
||||
361: 36(int) Load 360(u16)
|
||||
362: 193(ivec3) CompositeConstruct 361 361 361
|
||||
363: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362
|
||||
Store 358(u16v) 363
|
||||
364: 193(ivec3) Load 358(u16v)
|
||||
366: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365
|
||||
Store 358(u16v) 366
|
||||
367: 52(ivec2) Load 345(i16v)
|
||||
368: 14(int) Load 348(i16)
|
||||
369: 52(ivec2) CompositeConstruct 368 368
|
||||
370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369
|
||||
Store 345(i16v) 370
|
||||
371: 52(ivec2) Load 345(i16v)
|
||||
372: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356
|
||||
Store 345(i16v) 372
|
||||
373: 193(ivec3) Load 358(u16v)
|
||||
374: 36(int) Load 360(u16)
|
||||
375: 193(ivec3) CompositeConstruct 374 374 374
|
||||
376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375
|
||||
Store 358(u16v) 376
|
||||
377: 193(ivec3) Load 358(u16v)
|
||||
378: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365
|
||||
Store 358(u16v) 378
|
||||
379: 52(ivec2) Load 345(i16v)
|
||||
380: 14(int) Load 348(i16)
|
||||
381: 14(int) SNegate 380
|
||||
382: 14(int) Load 348(i16)
|
||||
383: 52(ivec2) CompositeConstruct 381 381
|
||||
384: 52(ivec2) CompositeConstruct 382 382
|
||||
385: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384
|
||||
Store 345(i16v) 385
|
||||
386: 52(ivec2) Load 345(i16v)
|
||||
387: 52(ivec2) Load 345(i16v)
|
||||
388: 52(ivec2) SNegate 387
|
||||
389: 52(ivec2) Load 345(i16v)
|
||||
390: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389
|
||||
Store 345(i16v) 390
|
||||
391: 193(ivec3) Load 358(u16v)
|
||||
392: 36(int) Load 360(u16)
|
||||
393: 36(int) SNegate 392
|
||||
394: 36(int) Load 360(u16)
|
||||
395: 193(ivec3) CompositeConstruct 393 393 393
|
||||
396: 193(ivec3) CompositeConstruct 394 394 394
|
||||
397: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396
|
||||
Store 358(u16v) 397
|
||||
398: 193(ivec3) Load 358(u16v)
|
||||
399: 193(ivec3) Load 358(u16v)
|
||||
400: 193(ivec3) SNegate 399
|
||||
401: 193(ivec3) Load 358(u16v)
|
||||
402: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401
|
||||
Store 358(u16v) 402
|
||||
403: 15(ptr) AccessChain 345(i16v) 284
|
||||
343(i16v): 53(ptr) Variable Function
|
||||
346(i16): 15(ptr) Variable Function
|
||||
356(u16v): 194(ptr) Variable Function
|
||||
358(u16): 37(ptr) Variable Function
|
||||
428(i32): 219(ptr) Variable Function
|
||||
431(i64): 242(ptr) Variable Function
|
||||
434(i16v4): 433(ptr) Variable Function
|
||||
437(u32): 296(ptr) Variable Function
|
||||
438(u16v2): 58(ptr) Variable Function
|
||||
442(u64): 441(ptr) Variable Function
|
||||
445(u16v4): 444(ptr) Variable Function
|
||||
457(bv): 456(ptr) Variable Function
|
||||
344: 52(ivec2) Load 343(i16v)
|
||||
345: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344
|
||||
Store 343(i16v) 345
|
||||
347: 14(int) Load 346(i16)
|
||||
348: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 347
|
||||
Store 346(i16) 348
|
||||
349: 52(ivec2) Load 343(i16v)
|
||||
350: 14(int) Load 346(i16)
|
||||
351: 52(ivec2) CompositeConstruct 350 350
|
||||
352: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351
|
||||
Store 343(i16v) 352
|
||||
353: 52(ivec2) Load 343(i16v)
|
||||
355: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354
|
||||
Store 343(i16v) 355
|
||||
357: 193(ivec3) Load 356(u16v)
|
||||
359: 36(int) Load 358(u16)
|
||||
360: 193(ivec3) CompositeConstruct 359 359 359
|
||||
361: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360
|
||||
Store 356(u16v) 361
|
||||
362: 193(ivec3) Load 356(u16v)
|
||||
364: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363
|
||||
Store 356(u16v) 364
|
||||
365: 52(ivec2) Load 343(i16v)
|
||||
366: 14(int) Load 346(i16)
|
||||
367: 52(ivec2) CompositeConstruct 366 366
|
||||
368: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367
|
||||
Store 343(i16v) 368
|
||||
369: 52(ivec2) Load 343(i16v)
|
||||
370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354
|
||||
Store 343(i16v) 370
|
||||
371: 193(ivec3) Load 356(u16v)
|
||||
372: 36(int) Load 358(u16)
|
||||
373: 193(ivec3) CompositeConstruct 372 372 372
|
||||
374: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373
|
||||
Store 356(u16v) 374
|
||||
375: 193(ivec3) Load 356(u16v)
|
||||
376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363
|
||||
Store 356(u16v) 376
|
||||
377: 52(ivec2) Load 343(i16v)
|
||||
378: 14(int) Load 346(i16)
|
||||
379: 14(int) SNegate 378
|
||||
380: 14(int) Load 346(i16)
|
||||
381: 52(ivec2) CompositeConstruct 379 379
|
||||
382: 52(ivec2) CompositeConstruct 380 380
|
||||
383: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382
|
||||
Store 343(i16v) 383
|
||||
384: 52(ivec2) Load 343(i16v)
|
||||
385: 52(ivec2) Load 343(i16v)
|
||||
386: 52(ivec2) SNegate 385
|
||||
387: 52(ivec2) Load 343(i16v)
|
||||
388: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387
|
||||
Store 343(i16v) 388
|
||||
389: 193(ivec3) Load 356(u16v)
|
||||
390: 36(int) Load 358(u16)
|
||||
391: 36(int) SNegate 390
|
||||
392: 36(int) Load 358(u16)
|
||||
393: 193(ivec3) CompositeConstruct 391 391 391
|
||||
394: 193(ivec3) CompositeConstruct 392 392 392
|
||||
395: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394
|
||||
Store 356(u16v) 395
|
||||
396: 193(ivec3) Load 356(u16v)
|
||||
397: 193(ivec3) Load 356(u16v)
|
||||
398: 193(ivec3) SNegate 397
|
||||
399: 193(ivec3) Load 356(u16v)
|
||||
400: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399
|
||||
Store 356(u16v) 400
|
||||
401: 15(ptr) AccessChain 343(i16v) 282
|
||||
402: 14(int) Load 401
|
||||
403: 15(ptr) AccessChain 343(i16v) 264
|
||||
404: 14(int) Load 403
|
||||
405: 15(ptr) AccessChain 345(i16v) 264
|
||||
406: 14(int) Load 405
|
||||
408: 14(int) Select 407 406 404
|
||||
Store 348(i16) 408
|
||||
409: 14(int) Load 348(i16)
|
||||
410: 52(ivec2) CompositeConstruct 409 409
|
||||
411: 14(int) Load 348(i16)
|
||||
412: 14(int) SNegate 411
|
||||
413: 52(ivec2) CompositeConstruct 412 412
|
||||
416: 52(ivec2) Select 415 413 410
|
||||
Store 345(i16v) 416
|
||||
417: 37(ptr) AccessChain 358(u16v) 284
|
||||
406: 14(int) Select 405 404 402
|
||||
Store 346(i16) 406
|
||||
407: 14(int) Load 346(i16)
|
||||
408: 52(ivec2) CompositeConstruct 407 407
|
||||
409: 14(int) Load 346(i16)
|
||||
410: 14(int) SNegate 409
|
||||
411: 52(ivec2) CompositeConstruct 410 410
|
||||
414: 52(ivec2) Select 413 411 408
|
||||
Store 343(i16v) 414
|
||||
415: 37(ptr) AccessChain 356(u16v) 282
|
||||
416: 36(int) Load 415
|
||||
417: 37(ptr) AccessChain 356(u16v) 264
|
||||
418: 36(int) Load 417
|
||||
419: 37(ptr) AccessChain 358(u16v) 264
|
||||
420: 36(int) Load 419
|
||||
421: 36(int) Select 407 420 418
|
||||
Store 360(u16) 421
|
||||
422: 36(int) Load 360(u16)
|
||||
423: 193(ivec3) CompositeConstruct 422 422 422
|
||||
424: 36(int) Load 360(u16)
|
||||
425: 36(int) SNegate 424
|
||||
426: 193(ivec3) CompositeConstruct 425 425 425
|
||||
429: 193(ivec3) Select 428 426 423
|
||||
Store 358(u16v) 429
|
||||
431: 52(ivec2) Load 345(i16v)
|
||||
432: 27(int) Bitcast 431
|
||||
Store 430(i32) 432
|
||||
437: 434(ivec4) Load 436(i16v4)
|
||||
438: 71(int) Bitcast 437
|
||||
Store 433(i64) 438
|
||||
441: 57(ivec2) Load 440(u16v2)
|
||||
442: 17(int) Bitcast 441
|
||||
Store 439(u32) 442
|
||||
448: 445(ivec4) Load 447(u16v4)
|
||||
449: 77(int) Bitcast 448
|
||||
Store 444(u64) 449
|
||||
450: 27(int) Load 430(i32)
|
||||
451: 52(ivec2) Bitcast 450
|
||||
Store 345(i16v) 451
|
||||
452: 71(int) Load 433(i64)
|
||||
453: 434(ivec4) Bitcast 452
|
||||
Store 436(i16v4) 453
|
||||
454: 17(int) Load 439(u32)
|
||||
455: 57(ivec2) Bitcast 454
|
||||
Store 440(u16v2) 455
|
||||
456: 77(int) Load 444(u64)
|
||||
457: 445(ivec4) Bitcast 456
|
||||
Store 447(u16v4) 457
|
||||
460: 193(ivec3) Load 358(u16v)
|
||||
461: 36(int) Load 360(u16)
|
||||
462: 193(ivec3) CompositeConstruct 461 461 461
|
||||
463: 427(bvec3) ULessThan 460 462
|
||||
Store 459(bv) 463
|
||||
464: 52(ivec2) Load 345(i16v)
|
||||
465: 14(int) Load 348(i16)
|
||||
466: 52(ivec2) CompositeConstruct 465 465
|
||||
467: 174(bvec2) SLessThan 464 466
|
||||
468: 427(bvec3) Load 459(bv)
|
||||
469: 427(bvec3) VectorShuffle 468 467 3 4 2
|
||||
Store 459(bv) 469
|
||||
470: 193(ivec3) Load 358(u16v)
|
||||
471: 36(int) Load 360(u16)
|
||||
472: 193(ivec3) CompositeConstruct 471 471 471
|
||||
473: 427(bvec3) ULessThanEqual 470 472
|
||||
Store 459(bv) 473
|
||||
474: 52(ivec2) Load 345(i16v)
|
||||
475: 14(int) Load 348(i16)
|
||||
476: 52(ivec2) CompositeConstruct 475 475
|
||||
477: 174(bvec2) SLessThanEqual 474 476
|
||||
478: 427(bvec3) Load 459(bv)
|
||||
479: 427(bvec3) VectorShuffle 478 477 3 4 2
|
||||
Store 459(bv) 479
|
||||
480: 193(ivec3) Load 358(u16v)
|
||||
481: 36(int) Load 360(u16)
|
||||
482: 193(ivec3) CompositeConstruct 481 481 481
|
||||
483: 427(bvec3) UGreaterThan 480 482
|
||||
Store 459(bv) 483
|
||||
484: 52(ivec2) Load 345(i16v)
|
||||
485: 14(int) Load 348(i16)
|
||||
486: 52(ivec2) CompositeConstruct 485 485
|
||||
487: 174(bvec2) SGreaterThan 484 486
|
||||
488: 427(bvec3) Load 459(bv)
|
||||
489: 427(bvec3) VectorShuffle 488 487 3 4 2
|
||||
Store 459(bv) 489
|
||||
490: 193(ivec3) Load 358(u16v)
|
||||
491: 36(int) Load 360(u16)
|
||||
492: 193(ivec3) CompositeConstruct 491 491 491
|
||||
493: 427(bvec3) UGreaterThanEqual 490 492
|
||||
Store 459(bv) 493
|
||||
494: 52(ivec2) Load 345(i16v)
|
||||
495: 14(int) Load 348(i16)
|
||||
496: 52(ivec2) CompositeConstruct 495 495
|
||||
497: 174(bvec2) SGreaterThanEqual 494 496
|
||||
498: 427(bvec3) Load 459(bv)
|
||||
499: 427(bvec3) VectorShuffle 498 497 3 4 2
|
||||
Store 459(bv) 499
|
||||
500: 193(ivec3) Load 358(u16v)
|
||||
501: 36(int) Load 360(u16)
|
||||
502: 193(ivec3) CompositeConstruct 501 501 501
|
||||
503: 427(bvec3) IEqual 500 502
|
||||
Store 459(bv) 503
|
||||
504: 52(ivec2) Load 345(i16v)
|
||||
505: 14(int) Load 348(i16)
|
||||
506: 52(ivec2) CompositeConstruct 505 505
|
||||
507: 174(bvec2) IEqual 504 506
|
||||
508: 427(bvec3) Load 459(bv)
|
||||
509: 427(bvec3) VectorShuffle 508 507 3 4 2
|
||||
Store 459(bv) 509
|
||||
510: 193(ivec3) Load 358(u16v)
|
||||
511: 36(int) Load 360(u16)
|
||||
512: 193(ivec3) CompositeConstruct 511 511 511
|
||||
513: 427(bvec3) INotEqual 510 512
|
||||
Store 459(bv) 513
|
||||
514: 52(ivec2) Load 345(i16v)
|
||||
515: 14(int) Load 348(i16)
|
||||
516: 52(ivec2) CompositeConstruct 515 515
|
||||
517: 174(bvec2) INotEqual 514 516
|
||||
518: 427(bvec3) Load 459(bv)
|
||||
519: 427(bvec3) VectorShuffle 518 517 3 4 2
|
||||
Store 459(bv) 519
|
||||
419: 36(int) Select 405 418 416
|
||||
Store 358(u16) 419
|
||||
420: 36(int) Load 358(u16)
|
||||
421: 193(ivec3) CompositeConstruct 420 420 420
|
||||
422: 36(int) Load 358(u16)
|
||||
423: 36(int) SNegate 422
|
||||
424: 193(ivec3) CompositeConstruct 423 423 423
|
||||
427: 193(ivec3) Select 426 424 421
|
||||
Store 356(u16v) 427
|
||||
429: 52(ivec2) Load 343(i16v)
|
||||
430: 27(int) Bitcast 429
|
||||
Store 428(i32) 430
|
||||
435: 432(ivec4) Load 434(i16v4)
|
||||
436: 71(int) Bitcast 435
|
||||
Store 431(i64) 436
|
||||
439: 57(ivec2) Load 438(u16v2)
|
||||
440: 17(int) Bitcast 439
|
||||
Store 437(u32) 440
|
||||
446: 443(ivec4) Load 445(u16v4)
|
||||
447: 77(int) Bitcast 446
|
||||
Store 442(u64) 447
|
||||
448: 27(int) Load 428(i32)
|
||||
449: 52(ivec2) Bitcast 448
|
||||
Store 343(i16v) 449
|
||||
450: 71(int) Load 431(i64)
|
||||
451: 432(ivec4) Bitcast 450
|
||||
Store 434(i16v4) 451
|
||||
452: 17(int) Load 437(u32)
|
||||
453: 57(ivec2) Bitcast 452
|
||||
Store 438(u16v2) 453
|
||||
454: 77(int) Load 442(u64)
|
||||
455: 443(ivec4) Bitcast 454
|
||||
Store 445(u16v4) 455
|
||||
458: 193(ivec3) Load 356(u16v)
|
||||
459: 36(int) Load 358(u16)
|
||||
460: 193(ivec3) CompositeConstruct 459 459 459
|
||||
461: 425(bvec3) ULessThan 458 460
|
||||
Store 457(bv) 461
|
||||
462: 52(ivec2) Load 343(i16v)
|
||||
463: 14(int) Load 346(i16)
|
||||
464: 52(ivec2) CompositeConstruct 463 463
|
||||
465: 174(bvec2) SLessThan 462 464
|
||||
466: 425(bvec3) Load 457(bv)
|
||||
467: 425(bvec3) VectorShuffle 466 465 3 4 2
|
||||
Store 457(bv) 467
|
||||
468: 193(ivec3) Load 356(u16v)
|
||||
469: 36(int) Load 358(u16)
|
||||
470: 193(ivec3) CompositeConstruct 469 469 469
|
||||
471: 425(bvec3) ULessThanEqual 468 470
|
||||
Store 457(bv) 471
|
||||
472: 52(ivec2) Load 343(i16v)
|
||||
473: 14(int) Load 346(i16)
|
||||
474: 52(ivec2) CompositeConstruct 473 473
|
||||
475: 174(bvec2) SLessThanEqual 472 474
|
||||
476: 425(bvec3) Load 457(bv)
|
||||
477: 425(bvec3) VectorShuffle 476 475 3 4 2
|
||||
Store 457(bv) 477
|
||||
478: 193(ivec3) Load 356(u16v)
|
||||
479: 36(int) Load 358(u16)
|
||||
480: 193(ivec3) CompositeConstruct 479 479 479
|
||||
481: 425(bvec3) UGreaterThan 478 480
|
||||
Store 457(bv) 481
|
||||
482: 52(ivec2) Load 343(i16v)
|
||||
483: 14(int) Load 346(i16)
|
||||
484: 52(ivec2) CompositeConstruct 483 483
|
||||
485: 174(bvec2) SGreaterThan 482 484
|
||||
486: 425(bvec3) Load 457(bv)
|
||||
487: 425(bvec3) VectorShuffle 486 485 3 4 2
|
||||
Store 457(bv) 487
|
||||
488: 193(ivec3) Load 356(u16v)
|
||||
489: 36(int) Load 358(u16)
|
||||
490: 193(ivec3) CompositeConstruct 489 489 489
|
||||
491: 425(bvec3) UGreaterThanEqual 488 490
|
||||
Store 457(bv) 491
|
||||
492: 52(ivec2) Load 343(i16v)
|
||||
493: 14(int) Load 346(i16)
|
||||
494: 52(ivec2) CompositeConstruct 493 493
|
||||
495: 174(bvec2) SGreaterThanEqual 492 494
|
||||
496: 425(bvec3) Load 457(bv)
|
||||
497: 425(bvec3) VectorShuffle 496 495 3 4 2
|
||||
Store 457(bv) 497
|
||||
498: 193(ivec3) Load 356(u16v)
|
||||
499: 36(int) Load 358(u16)
|
||||
500: 193(ivec3) CompositeConstruct 499 499 499
|
||||
501: 425(bvec3) IEqual 498 500
|
||||
Store 457(bv) 501
|
||||
502: 52(ivec2) Load 343(i16v)
|
||||
503: 14(int) Load 346(i16)
|
||||
504: 52(ivec2) CompositeConstruct 503 503
|
||||
505: 174(bvec2) IEqual 502 504
|
||||
506: 425(bvec3) Load 457(bv)
|
||||
507: 425(bvec3) VectorShuffle 506 505 3 4 2
|
||||
Store 457(bv) 507
|
||||
508: 193(ivec3) Load 356(u16v)
|
||||
509: 36(int) Load 358(u16)
|
||||
510: 193(ivec3) CompositeConstruct 509 509 509
|
||||
511: 425(bvec3) INotEqual 508 510
|
||||
Store 457(bv) 511
|
||||
512: 52(ivec2) Load 343(i16v)
|
||||
513: 14(int) Load 346(i16)
|
||||
514: 52(ivec2) CompositeConstruct 513 513
|
||||
515: 174(bvec2) INotEqual 512 514
|
||||
516: 425(bvec3) Load 457(bv)
|
||||
517: 425(bvec3) VectorShuffle 516 515 3 4 2
|
||||
Store 457(bv) 517
|
||||
Return
|
||||
FunctionEnd
|
||||
|
662
3rdparty/glslang/Test/baseResults/spv.int32.frag.out
vendored
662
3rdparty/glslang/Test/baseResults/spv.int32.frag.out
vendored
@ -1,7 +1,7 @@
|
||||
spv.int32.frag
|
||||
// Module Version 10300
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 495
|
||||
// Id's are bound by 493
|
||||
|
||||
Capability Shader
|
||||
Capability Float16
|
||||
@ -52,54 +52,54 @@ spv.int32.frag
|
||||
Name 210 "i"
|
||||
Name 214 "uv"
|
||||
Name 227 "i64"
|
||||
Name 262 "b"
|
||||
Name 314 "i32v"
|
||||
Name 317 "i32"
|
||||
Name 327 "u32v"
|
||||
Name 329 "u32"
|
||||
Name 401 "i8v4"
|
||||
Name 404 "i16v2"
|
||||
Name 409 "u8v4"
|
||||
Name 412 "u16v2"
|
||||
Name 415 "i64"
|
||||
Name 418 "u32v2"
|
||||
Name 420 "u64"
|
||||
Name 424 "bv"
|
||||
Name 487 "Block"
|
||||
MemberName 487(Block) 0 "i32"
|
||||
MemberName 487(Block) 1 "i32v2"
|
||||
MemberName 487(Block) 2 "i32v3"
|
||||
MemberName 487(Block) 3 "i32v4"
|
||||
MemberName 487(Block) 4 "u32"
|
||||
MemberName 487(Block) 5 "u32v2"
|
||||
MemberName 487(Block) 6 "u32v3"
|
||||
MemberName 487(Block) 7 "u32v4"
|
||||
Name 489 "block"
|
||||
Name 490 "si32"
|
||||
Name 491 "su32"
|
||||
Name 492 "si"
|
||||
Name 493 "su"
|
||||
Name 494 "sb"
|
||||
Name 260 "b"
|
||||
Name 312 "i32v"
|
||||
Name 315 "i32"
|
||||
Name 325 "u32v"
|
||||
Name 327 "u32"
|
||||
Name 399 "i8v4"
|
||||
Name 402 "i16v2"
|
||||
Name 407 "u8v4"
|
||||
Name 410 "u16v2"
|
||||
Name 413 "i64"
|
||||
Name 416 "u32v2"
|
||||
Name 418 "u64"
|
||||
Name 422 "bv"
|
||||
Name 485 "Block"
|
||||
MemberName 485(Block) 0 "i32"
|
||||
MemberName 485(Block) 1 "i32v2"
|
||||
MemberName 485(Block) 2 "i32v3"
|
||||
MemberName 485(Block) 3 "i32v4"
|
||||
MemberName 485(Block) 4 "u32"
|
||||
MemberName 485(Block) 5 "u32v2"
|
||||
MemberName 485(Block) 6 "u32v3"
|
||||
MemberName 485(Block) 7 "u32v4"
|
||||
Name 487 "block"
|
||||
Name 488 "si32"
|
||||
Name 489 "su32"
|
||||
Name 490 "si"
|
||||
Name 491 "su"
|
||||
Name 492 "sb"
|
||||
MemberDecorate 27(Uniforms) 0 Offset 0
|
||||
Decorate 27(Uniforms) Block
|
||||
Decorate 29 DescriptorSet 0
|
||||
Decorate 29 Binding 0
|
||||
MemberDecorate 487(Block) 0 Offset 0
|
||||
MemberDecorate 487(Block) 1 Offset 8
|
||||
MemberDecorate 487(Block) 2 Offset 16
|
||||
MemberDecorate 487(Block) 3 Offset 32
|
||||
MemberDecorate 487(Block) 4 Offset 48
|
||||
MemberDecorate 487(Block) 5 Offset 56
|
||||
MemberDecorate 487(Block) 6 Offset 64
|
||||
MemberDecorate 487(Block) 7 Offset 80
|
||||
Decorate 487(Block) Block
|
||||
Decorate 489(block) DescriptorSet 0
|
||||
Decorate 489(block) Binding 1
|
||||
Decorate 490(si32) SpecId 100
|
||||
Decorate 491(su32) SpecId 101
|
||||
Decorate 492(si) SpecId 102
|
||||
Decorate 493(su) SpecId 103
|
||||
Decorate 494(sb) SpecId 104
|
||||
MemberDecorate 485(Block) 0 Offset 0
|
||||
MemberDecorate 485(Block) 1 Offset 8
|
||||
MemberDecorate 485(Block) 2 Offset 16
|
||||
MemberDecorate 485(Block) 3 Offset 32
|
||||
MemberDecorate 485(Block) 4 Offset 48
|
||||
MemberDecorate 485(Block) 5 Offset 56
|
||||
MemberDecorate 485(Block) 6 Offset 64
|
||||
MemberDecorate 485(Block) 7 Offset 80
|
||||
Decorate 485(Block) Block
|
||||
Decorate 487(block) DescriptorSet 0
|
||||
Decorate 487(block) Binding 1
|
||||
Decorate 488(si32) SpecId 100
|
||||
Decorate 489(su32) SpecId 101
|
||||
Decorate 490(si) SpecId 102
|
||||
Decorate 491(su) SpecId 103
|
||||
Decorate 492(sb) SpecId 104
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
14: TypeInt 32 0
|
||||
@ -171,30 +171,30 @@ spv.int32.frag
|
||||
188: TypeVector 18(int) 3
|
||||
226: TypePointer Function 57(int)
|
||||
251: 14(int) Constant 2
|
||||
261: TypePointer Function 165(bool)
|
||||
325: 52(ivec2) ConstantComposite 24 24
|
||||
334: 184(ivec3) ConstantComposite 175 175 175
|
||||
376: 165(bool) ConstantTrue
|
||||
383: 165(bool) ConstantFalse
|
||||
384: 166(bvec2) ConstantComposite 383 383
|
||||
396: TypeVector 165(bool) 3
|
||||
397: 396(bvec3) ConstantComposite 383 383 383
|
||||
399: TypeVector 91(int) 4
|
||||
400: TypePointer Function 399(ivec4)
|
||||
407: TypeVector 120(int) 4
|
||||
408: TypePointer Function 407(ivec4)
|
||||
419: TypePointer Function 63(int)
|
||||
423: TypePointer Function 396(bvec3)
|
||||
485: TypeVector 18(int) 4
|
||||
486: TypeVector 14(int) 4
|
||||
487(Block): TypeStruct 18(int) 52(ivec2) 188(ivec3) 485(ivec4) 14(int) 49(ivec2) 184(ivec3) 486(ivec4)
|
||||
488: TypePointer Uniform 487(Block)
|
||||
489(block): 488(ptr) Variable Uniform
|
||||
490(si32): 18(int) SpecConstant 4294967286
|
||||
491(su32): 14(int) SpecConstant 20
|
||||
492(si): 18(int) SpecConstant 4294967291
|
||||
493(su): 14(int) SpecConstant 4
|
||||
494(sb): 165(bool) SpecConstantTrue
|
||||
259: TypePointer Function 165(bool)
|
||||
323: 52(ivec2) ConstantComposite 24 24
|
||||
332: 184(ivec3) ConstantComposite 175 175 175
|
||||
374: 165(bool) ConstantTrue
|
||||
381: 165(bool) ConstantFalse
|
||||
382: 166(bvec2) ConstantComposite 381 381
|
||||
394: TypeVector 165(bool) 3
|
||||
395: 394(bvec3) ConstantComposite 381 381 381
|
||||
397: TypeVector 91(int) 4
|
||||
398: TypePointer Function 397(ivec4)
|
||||
405: TypeVector 120(int) 4
|
||||
406: TypePointer Function 405(ivec4)
|
||||
417: TypePointer Function 63(int)
|
||||
421: TypePointer Function 394(bvec3)
|
||||
483: TypeVector 18(int) 4
|
||||
484: TypeVector 14(int) 4
|
||||
485(Block): TypeStruct 18(int) 52(ivec2) 188(ivec3) 483(ivec4) 14(int) 49(ivec2) 184(ivec3) 484(ivec4)
|
||||
486: TypePointer Uniform 485(Block)
|
||||
487(block): 486(ptr) Variable Uniform
|
||||
488(si32): 18(int) SpecConstant 4294967286
|
||||
489(su32): 14(int) SpecConstant 20
|
||||
490(si): 18(int) SpecConstant 4294967291
|
||||
491(su): 14(int) SpecConstant 4
|
||||
492(sb): 165(bool) SpecConstantTrue
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
Store 16(u32Max) 17
|
||||
@ -360,7 +360,7 @@ spv.int32.frag
|
||||
210(i): 19(ptr) Variable Function
|
||||
214(uv): 185(ptr) Variable Function
|
||||
227(i64): 226(ptr) Variable Function
|
||||
262(b): 261(ptr) Variable Function
|
||||
260(b): 259(ptr) Variable Function
|
||||
187: 184(ivec3) Load 186(u32v)
|
||||
189: 188(ivec3) CompositeConstruct 170 170 170
|
||||
190: 184(ivec3) IAdd 187 189
|
||||
@ -440,275 +440,273 @@ spv.int32.frag
|
||||
250: 57(int) Load 227(i64)
|
||||
252: 38(ptr) AccessChain 186(u32v) 251
|
||||
253: 14(int) Load 252
|
||||
254: 57(int) UConvert 253
|
||||
255: 57(int) Bitcast 254
|
||||
256: 57(int) ShiftLeftLogical 250 255
|
||||
Store 227(i64) 256
|
||||
257: 184(ivec3) Load 186(u32v)
|
||||
258: 18(int) Load 210(i)
|
||||
259: 188(ivec3) CompositeConstruct 258 258 258
|
||||
260: 184(ivec3) ShiftLeftLogical 257 259
|
||||
Store 214(uv) 260
|
||||
263: 38(ptr) AccessChain 186(u32v) 175
|
||||
264: 14(int) Load 263
|
||||
265: 18(int) Load 191(i32)
|
||||
266: 14(int) Bitcast 265
|
||||
267: 165(bool) INotEqual 264 266
|
||||
Store 262(b) 267
|
||||
268: 18(int) Load 191(i32)
|
||||
269: 14(int) Bitcast 268
|
||||
270: 38(ptr) AccessChain 186(u32v) 175
|
||||
271: 14(int) Load 270
|
||||
272: 165(bool) IEqual 269 271
|
||||
Store 262(b) 272
|
||||
273: 38(ptr) AccessChain 186(u32v) 175
|
||||
254: 57(int) ShiftLeftLogical 250 253
|
||||
Store 227(i64) 254
|
||||
255: 184(ivec3) Load 186(u32v)
|
||||
256: 18(int) Load 210(i)
|
||||
257: 188(ivec3) CompositeConstruct 256 256 256
|
||||
258: 184(ivec3) ShiftLeftLogical 255 257
|
||||
Store 214(uv) 258
|
||||
261: 38(ptr) AccessChain 186(u32v) 175
|
||||
262: 14(int) Load 261
|
||||
263: 18(int) Load 191(i32)
|
||||
264: 14(int) Bitcast 263
|
||||
265: 165(bool) INotEqual 262 264
|
||||
Store 260(b) 265
|
||||
266: 18(int) Load 191(i32)
|
||||
267: 14(int) Bitcast 266
|
||||
268: 38(ptr) AccessChain 186(u32v) 175
|
||||
269: 14(int) Load 268
|
||||
270: 165(bool) IEqual 267 269
|
||||
Store 260(b) 270
|
||||
271: 38(ptr) AccessChain 186(u32v) 175
|
||||
272: 14(int) Load 271
|
||||
273: 38(ptr) AccessChain 214(uv) 176
|
||||
274: 14(int) Load 273
|
||||
275: 38(ptr) AccessChain 214(uv) 176
|
||||
276: 14(int) Load 275
|
||||
277: 165(bool) UGreaterThan 274 276
|
||||
Store 262(b) 277
|
||||
278: 18(int) Load 191(i32)
|
||||
279: 18(int) Load 210(i)
|
||||
280: 165(bool) SLessThan 278 279
|
||||
Store 262(b) 280
|
||||
281: 38(ptr) AccessChain 186(u32v) 176
|
||||
275: 165(bool) UGreaterThan 272 274
|
||||
Store 260(b) 275
|
||||
276: 18(int) Load 191(i32)
|
||||
277: 18(int) Load 210(i)
|
||||
278: 165(bool) SLessThan 276 277
|
||||
Store 260(b) 278
|
||||
279: 38(ptr) AccessChain 186(u32v) 176
|
||||
280: 14(int) Load 279
|
||||
281: 38(ptr) AccessChain 214(uv) 175
|
||||
282: 14(int) Load 281
|
||||
283: 38(ptr) AccessChain 214(uv) 175
|
||||
284: 14(int) Load 283
|
||||
285: 165(bool) UGreaterThanEqual 282 284
|
||||
Store 262(b) 285
|
||||
286: 18(int) Load 191(i32)
|
||||
287: 18(int) Load 210(i)
|
||||
288: 165(bool) SLessThanEqual 286 287
|
||||
Store 262(b) 288
|
||||
289: 18(int) Load 191(i32)
|
||||
290: 14(int) Bitcast 289
|
||||
291: 184(ivec3) Load 214(uv)
|
||||
292: 184(ivec3) CompositeConstruct 290 290 290
|
||||
293: 184(ivec3) BitwiseOr 291 292
|
||||
Store 214(uv) 293
|
||||
294: 18(int) Load 191(i32)
|
||||
295: 18(int) Load 210(i)
|
||||
296: 18(int) BitwiseOr 294 295
|
||||
Store 210(i) 296
|
||||
297: 18(int) Load 191(i32)
|
||||
298: 57(int) SConvert 297
|
||||
299: 57(int) Load 227(i64)
|
||||
300: 57(int) BitwiseAnd 299 298
|
||||
Store 227(i64) 300
|
||||
301: 184(ivec3) Load 186(u32v)
|
||||
302: 184(ivec3) Load 214(uv)
|
||||
303: 184(ivec3) BitwiseAnd 301 302
|
||||
Store 214(uv) 303
|
||||
304: 18(int) Load 191(i32)
|
||||
305: 14(int) Bitcast 304
|
||||
306: 184(ivec3) Load 214(uv)
|
||||
307: 184(ivec3) CompositeConstruct 305 305 305
|
||||
308: 184(ivec3) BitwiseXor 306 307
|
||||
Store 214(uv) 308
|
||||
309: 184(ivec3) Load 186(u32v)
|
||||
310: 18(int) Load 191(i32)
|
||||
311: 14(int) Bitcast 310
|
||||
312: 184(ivec3) CompositeConstruct 311 311 311
|
||||
313: 184(ivec3) BitwiseXor 309 312
|
||||
Store 186(u32v) 313
|
||||
283: 165(bool) UGreaterThanEqual 280 282
|
||||
Store 260(b) 283
|
||||
284: 18(int) Load 191(i32)
|
||||
285: 18(int) Load 210(i)
|
||||
286: 165(bool) SLessThanEqual 284 285
|
||||
Store 260(b) 286
|
||||
287: 18(int) Load 191(i32)
|
||||
288: 14(int) Bitcast 287
|
||||
289: 184(ivec3) Load 214(uv)
|
||||
290: 184(ivec3) CompositeConstruct 288 288 288
|
||||
291: 184(ivec3) BitwiseOr 289 290
|
||||
Store 214(uv) 291
|
||||
292: 18(int) Load 191(i32)
|
||||
293: 18(int) Load 210(i)
|
||||
294: 18(int) BitwiseOr 292 293
|
||||
Store 210(i) 294
|
||||
295: 18(int) Load 191(i32)
|
||||
296: 57(int) SConvert 295
|
||||
297: 57(int) Load 227(i64)
|
||||
298: 57(int) BitwiseAnd 297 296
|
||||
Store 227(i64) 298
|
||||
299: 184(ivec3) Load 186(u32v)
|
||||
300: 184(ivec3) Load 214(uv)
|
||||
301: 184(ivec3) BitwiseAnd 299 300
|
||||
Store 214(uv) 301
|
||||
302: 18(int) Load 191(i32)
|
||||
303: 14(int) Bitcast 302
|
||||
304: 184(ivec3) Load 214(uv)
|
||||
305: 184(ivec3) CompositeConstruct 303 303 303
|
||||
306: 184(ivec3) BitwiseXor 304 305
|
||||
Store 214(uv) 306
|
||||
307: 184(ivec3) Load 186(u32v)
|
||||
308: 18(int) Load 191(i32)
|
||||
309: 14(int) Bitcast 308
|
||||
310: 184(ivec3) CompositeConstruct 309 309 309
|
||||
311: 184(ivec3) BitwiseXor 307 310
|
||||
Store 186(u32v) 311
|
||||
Return
|
||||
FunctionEnd
|
||||
12(builtinFuncs(): 2 Function None 3
|
||||
13: Label
|
||||
314(i32v): 53(ptr) Variable Function
|
||||
317(i32): 19(ptr) Variable Function
|
||||
327(u32v): 185(ptr) Variable Function
|
||||
329(u32): 38(ptr) Variable Function
|
||||
401(i8v4): 400(ptr) Variable Function
|
||||
404(i16v2): 102(ptr) Variable Function
|
||||
409(u8v4): 408(ptr) Variable Function
|
||||
412(u16v2): 131(ptr) Variable Function
|
||||
415(i64): 226(ptr) Variable Function
|
||||
418(u32v2): 50(ptr) Variable Function
|
||||
420(u64): 419(ptr) Variable Function
|
||||
424(bv): 423(ptr) Variable Function
|
||||
315: 52(ivec2) Load 314(i32v)
|
||||
316: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 315
|
||||
Store 314(i32v) 316
|
||||
318: 18(int) Load 317(i32)
|
||||
319: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 318
|
||||
Store 317(i32) 319
|
||||
320: 52(ivec2) Load 314(i32v)
|
||||
321: 18(int) Load 317(i32)
|
||||
322: 52(ivec2) CompositeConstruct 321 321
|
||||
323: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 320 322
|
||||
Store 314(i32v) 323
|
||||
324: 52(ivec2) Load 314(i32v)
|
||||
326: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 324 325
|
||||
Store 314(i32v) 326
|
||||
328: 184(ivec3) Load 327(u32v)
|
||||
330: 14(int) Load 329(u32)
|
||||
331: 184(ivec3) CompositeConstruct 330 330 330
|
||||
332: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 328 331
|
||||
Store 327(u32v) 332
|
||||
333: 184(ivec3) Load 327(u32v)
|
||||
335: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 333 334
|
||||
Store 327(u32v) 335
|
||||
336: 52(ivec2) Load 314(i32v)
|
||||
337: 18(int) Load 317(i32)
|
||||
338: 52(ivec2) CompositeConstruct 337 337
|
||||
339: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 336 338
|
||||
Store 314(i32v) 339
|
||||
340: 52(ivec2) Load 314(i32v)
|
||||
341: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 340 325
|
||||
Store 314(i32v) 341
|
||||
342: 184(ivec3) Load 327(u32v)
|
||||
343: 14(int) Load 329(u32)
|
||||
344: 184(ivec3) CompositeConstruct 343 343 343
|
||||
345: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 342 344
|
||||
Store 327(u32v) 345
|
||||
346: 184(ivec3) Load 327(u32v)
|
||||
347: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 346 334
|
||||
Store 327(u32v) 347
|
||||
348: 52(ivec2) Load 314(i32v)
|
||||
349: 18(int) Load 317(i32)
|
||||
350: 18(int) SNegate 349
|
||||
351: 18(int) Load 317(i32)
|
||||
352: 52(ivec2) CompositeConstruct 350 350
|
||||
353: 52(ivec2) CompositeConstruct 351 351
|
||||
354: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 348 352 353
|
||||
Store 314(i32v) 354
|
||||
355: 52(ivec2) Load 314(i32v)
|
||||
356: 52(ivec2) Load 314(i32v)
|
||||
357: 52(ivec2) SNegate 356
|
||||
358: 52(ivec2) Load 314(i32v)
|
||||
359: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 355 357 358
|
||||
Store 314(i32v) 359
|
||||
360: 184(ivec3) Load 327(u32v)
|
||||
361: 14(int) Load 329(u32)
|
||||
362: 14(int) SNegate 361
|
||||
363: 14(int) Load 329(u32)
|
||||
364: 184(ivec3) CompositeConstruct 362 362 362
|
||||
365: 184(ivec3) CompositeConstruct 363 363 363
|
||||
366: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 360 364 365
|
||||
Store 327(u32v) 366
|
||||
367: 184(ivec3) Load 327(u32v)
|
||||
368: 184(ivec3) Load 327(u32v)
|
||||
369: 184(ivec3) SNegate 368
|
||||
370: 184(ivec3) Load 327(u32v)
|
||||
371: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 367 369 370
|
||||
Store 327(u32v) 371
|
||||
372: 19(ptr) AccessChain 314(i32v) 175
|
||||
312(i32v): 53(ptr) Variable Function
|
||||
315(i32): 19(ptr) Variable Function
|
||||
325(u32v): 185(ptr) Variable Function
|
||||
327(u32): 38(ptr) Variable Function
|
||||
399(i8v4): 398(ptr) Variable Function
|
||||
402(i16v2): 102(ptr) Variable Function
|
||||
407(u8v4): 406(ptr) Variable Function
|
||||
410(u16v2): 131(ptr) Variable Function
|
||||
413(i64): 226(ptr) Variable Function
|
||||
416(u32v2): 50(ptr) Variable Function
|
||||
418(u64): 417(ptr) Variable Function
|
||||
422(bv): 421(ptr) Variable Function
|
||||
313: 52(ivec2) Load 312(i32v)
|
||||
314: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 313
|
||||
Store 312(i32v) 314
|
||||
316: 18(int) Load 315(i32)
|
||||
317: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 316
|
||||
Store 315(i32) 317
|
||||
318: 52(ivec2) Load 312(i32v)
|
||||
319: 18(int) Load 315(i32)
|
||||
320: 52(ivec2) CompositeConstruct 319 319
|
||||
321: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 318 320
|
||||
Store 312(i32v) 321
|
||||
322: 52(ivec2) Load 312(i32v)
|
||||
324: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 322 323
|
||||
Store 312(i32v) 324
|
||||
326: 184(ivec3) Load 325(u32v)
|
||||
328: 14(int) Load 327(u32)
|
||||
329: 184(ivec3) CompositeConstruct 328 328 328
|
||||
330: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 326 329
|
||||
Store 325(u32v) 330
|
||||
331: 184(ivec3) Load 325(u32v)
|
||||
333: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 331 332
|
||||
Store 325(u32v) 333
|
||||
334: 52(ivec2) Load 312(i32v)
|
||||
335: 18(int) Load 315(i32)
|
||||
336: 52(ivec2) CompositeConstruct 335 335
|
||||
337: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 334 336
|
||||
Store 312(i32v) 337
|
||||
338: 52(ivec2) Load 312(i32v)
|
||||
339: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 338 323
|
||||
Store 312(i32v) 339
|
||||
340: 184(ivec3) Load 325(u32v)
|
||||
341: 14(int) Load 327(u32)
|
||||
342: 184(ivec3) CompositeConstruct 341 341 341
|
||||
343: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 340 342
|
||||
Store 325(u32v) 343
|
||||
344: 184(ivec3) Load 325(u32v)
|
||||
345: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 344 332
|
||||
Store 325(u32v) 345
|
||||
346: 52(ivec2) Load 312(i32v)
|
||||
347: 18(int) Load 315(i32)
|
||||
348: 18(int) SNegate 347
|
||||
349: 18(int) Load 315(i32)
|
||||
350: 52(ivec2) CompositeConstruct 348 348
|
||||
351: 52(ivec2) CompositeConstruct 349 349
|
||||
352: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 346 350 351
|
||||
Store 312(i32v) 352
|
||||
353: 52(ivec2) Load 312(i32v)
|
||||
354: 52(ivec2) Load 312(i32v)
|
||||
355: 52(ivec2) SNegate 354
|
||||
356: 52(ivec2) Load 312(i32v)
|
||||
357: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 353 355 356
|
||||
Store 312(i32v) 357
|
||||
358: 184(ivec3) Load 325(u32v)
|
||||
359: 14(int) Load 327(u32)
|
||||
360: 14(int) SNegate 359
|
||||
361: 14(int) Load 327(u32)
|
||||
362: 184(ivec3) CompositeConstruct 360 360 360
|
||||
363: 184(ivec3) CompositeConstruct 361 361 361
|
||||
364: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 358 362 363
|
||||
Store 325(u32v) 364
|
||||
365: 184(ivec3) Load 325(u32v)
|
||||
366: 184(ivec3) Load 325(u32v)
|
||||
367: 184(ivec3) SNegate 366
|
||||
368: 184(ivec3) Load 325(u32v)
|
||||
369: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 365 367 368
|
||||
Store 325(u32v) 369
|
||||
370: 19(ptr) AccessChain 312(i32v) 175
|
||||
371: 18(int) Load 370
|
||||
372: 19(ptr) AccessChain 312(i32v) 176
|
||||
373: 18(int) Load 372
|
||||
374: 19(ptr) AccessChain 314(i32v) 176
|
||||
375: 18(int) Load 374
|
||||
377: 18(int) Select 376 375 373
|
||||
Store 317(i32) 377
|
||||
378: 18(int) Load 317(i32)
|
||||
379: 52(ivec2) CompositeConstruct 378 378
|
||||
380: 18(int) Load 317(i32)
|
||||
381: 18(int) SNegate 380
|
||||
382: 52(ivec2) CompositeConstruct 381 381
|
||||
385: 52(ivec2) Select 384 382 379
|
||||
Store 314(i32v) 385
|
||||
386: 38(ptr) AccessChain 327(u32v) 175
|
||||
375: 18(int) Select 374 373 371
|
||||
Store 315(i32) 375
|
||||
376: 18(int) Load 315(i32)
|
||||
377: 52(ivec2) CompositeConstruct 376 376
|
||||
378: 18(int) Load 315(i32)
|
||||
379: 18(int) SNegate 378
|
||||
380: 52(ivec2) CompositeConstruct 379 379
|
||||
383: 52(ivec2) Select 382 380 377
|
||||
Store 312(i32v) 383
|
||||
384: 38(ptr) AccessChain 325(u32v) 175
|
||||
385: 14(int) Load 384
|
||||
386: 38(ptr) AccessChain 325(u32v) 176
|
||||
387: 14(int) Load 386
|
||||
388: 38(ptr) AccessChain 327(u32v) 176
|
||||
389: 14(int) Load 388
|
||||
390: 14(int) Select 376 389 387
|
||||
Store 329(u32) 390
|
||||
391: 14(int) Load 329(u32)
|
||||
392: 184(ivec3) CompositeConstruct 391 391 391
|
||||
393: 14(int) Load 329(u32)
|
||||
394: 14(int) SNegate 393
|
||||
395: 184(ivec3) CompositeConstruct 394 394 394
|
||||
398: 184(ivec3) Select 397 395 392
|
||||
Store 327(u32v) 398
|
||||
402: 399(ivec4) Load 401(i8v4)
|
||||
403: 18(int) Bitcast 402
|
||||
Store 317(i32) 403
|
||||
405: 101(ivec2) Load 404(i16v2)
|
||||
406: 18(int) Bitcast 405
|
||||
Store 317(i32) 406
|
||||
410: 407(ivec4) Load 409(u8v4)
|
||||
411: 14(int) Bitcast 410
|
||||
Store 329(u32) 411
|
||||
413: 130(ivec2) Load 412(u16v2)
|
||||
414: 14(int) Bitcast 413
|
||||
Store 329(u32) 414
|
||||
416: 57(int) Load 415(i64)
|
||||
417: 52(ivec2) Bitcast 416
|
||||
Store 314(i32v) 417
|
||||
421: 63(int) Load 420(u64)
|
||||
422: 49(ivec2) Bitcast 421
|
||||
Store 418(u32v2) 422
|
||||
425: 184(ivec3) Load 327(u32v)
|
||||
426: 14(int) Load 329(u32)
|
||||
427: 184(ivec3) CompositeConstruct 426 426 426
|
||||
428: 396(bvec3) ULessThan 425 427
|
||||
Store 424(bv) 428
|
||||
429: 52(ivec2) Load 314(i32v)
|
||||
430: 18(int) Load 317(i32)
|
||||
431: 52(ivec2) CompositeConstruct 430 430
|
||||
432: 166(bvec2) SLessThan 429 431
|
||||
433: 396(bvec3) Load 424(bv)
|
||||
434: 396(bvec3) VectorShuffle 433 432 3 4 2
|
||||
Store 424(bv) 434
|
||||
435: 184(ivec3) Load 327(u32v)
|
||||
436: 14(int) Load 329(u32)
|
||||
437: 184(ivec3) CompositeConstruct 436 436 436
|
||||
438: 396(bvec3) ULessThanEqual 435 437
|
||||
Store 424(bv) 438
|
||||
439: 52(ivec2) Load 314(i32v)
|
||||
440: 18(int) Load 317(i32)
|
||||
441: 52(ivec2) CompositeConstruct 440 440
|
||||
442: 166(bvec2) SLessThanEqual 439 441
|
||||
443: 396(bvec3) Load 424(bv)
|
||||
444: 396(bvec3) VectorShuffle 443 442 3 4 2
|
||||
Store 424(bv) 444
|
||||
445: 184(ivec3) Load 327(u32v)
|
||||
446: 14(int) Load 329(u32)
|
||||
447: 184(ivec3) CompositeConstruct 446 446 446
|
||||
448: 396(bvec3) UGreaterThan 445 447
|
||||
Store 424(bv) 448
|
||||
449: 52(ivec2) Load 314(i32v)
|
||||
450: 18(int) Load 317(i32)
|
||||
451: 52(ivec2) CompositeConstruct 450 450
|
||||
452: 166(bvec2) SGreaterThan 449 451
|
||||
453: 396(bvec3) Load 424(bv)
|
||||
454: 396(bvec3) VectorShuffle 453 452 3 4 2
|
||||
Store 424(bv) 454
|
||||
455: 184(ivec3) Load 327(u32v)
|
||||
456: 14(int) Load 329(u32)
|
||||
457: 184(ivec3) CompositeConstruct 456 456 456
|
||||
458: 396(bvec3) UGreaterThanEqual 455 457
|
||||
Store 424(bv) 458
|
||||
459: 52(ivec2) Load 314(i32v)
|
||||
460: 18(int) Load 317(i32)
|
||||
461: 52(ivec2) CompositeConstruct 460 460
|
||||
462: 166(bvec2) SGreaterThanEqual 459 461
|
||||
463: 396(bvec3) Load 424(bv)
|
||||
464: 396(bvec3) VectorShuffle 463 462 3 4 2
|
||||
Store 424(bv) 464
|
||||
465: 184(ivec3) Load 327(u32v)
|
||||
466: 14(int) Load 329(u32)
|
||||
467: 184(ivec3) CompositeConstruct 466 466 466
|
||||
468: 396(bvec3) IEqual 465 467
|
||||
Store 424(bv) 468
|
||||
469: 52(ivec2) Load 314(i32v)
|
||||
470: 18(int) Load 317(i32)
|
||||
471: 52(ivec2) CompositeConstruct 470 470
|
||||
472: 166(bvec2) IEqual 469 471
|
||||
473: 396(bvec3) Load 424(bv)
|
||||
474: 396(bvec3) VectorShuffle 473 472 3 4 2
|
||||
Store 424(bv) 474
|
||||
475: 184(ivec3) Load 327(u32v)
|
||||
476: 14(int) Load 329(u32)
|
||||
477: 184(ivec3) CompositeConstruct 476 476 476
|
||||
478: 396(bvec3) INotEqual 475 477
|
||||
Store 424(bv) 478
|
||||
479: 52(ivec2) Load 314(i32v)
|
||||
480: 18(int) Load 317(i32)
|
||||
481: 52(ivec2) CompositeConstruct 480 480
|
||||
482: 166(bvec2) INotEqual 479 481
|
||||
483: 396(bvec3) Load 424(bv)
|
||||
484: 396(bvec3) VectorShuffle 483 482 3 4 2
|
||||
Store 424(bv) 484
|
||||
388: 14(int) Select 374 387 385
|
||||
Store 327(u32) 388
|
||||
389: 14(int) Load 327(u32)
|
||||
390: 184(ivec3) CompositeConstruct 389 389 389
|
||||
391: 14(int) Load 327(u32)
|
||||
392: 14(int) SNegate 391
|
||||
393: 184(ivec3) CompositeConstruct 392 392 392
|
||||
396: 184(ivec3) Select 395 393 390
|
||||
Store 325(u32v) 396
|
||||
400: 397(ivec4) Load 399(i8v4)
|
||||
401: 18(int) Bitcast 400
|
||||
Store 315(i32) 401
|
||||
403: 101(ivec2) Load 402(i16v2)
|
||||
404: 18(int) Bitcast 403
|
||||
Store 315(i32) 404
|
||||
408: 405(ivec4) Load 407(u8v4)
|
||||
409: 14(int) Bitcast 408
|
||||
Store 327(u32) 409
|
||||
411: 130(ivec2) Load 410(u16v2)
|
||||
412: 14(int) Bitcast 411
|
||||
Store 327(u32) 412
|
||||
414: 57(int) Load 413(i64)
|
||||
415: 52(ivec2) Bitcast 414
|
||||
Store 312(i32v) 415
|
||||
419: 63(int) Load 418(u64)
|
||||
420: 49(ivec2) Bitcast 419
|
||||
Store 416(u32v2) 420
|
||||
423: 184(ivec3) Load 325(u32v)
|
||||
424: 14(int) Load 327(u32)
|
||||
425: 184(ivec3) CompositeConstruct 424 424 424
|
||||
426: 394(bvec3) ULessThan 423 425
|
||||
Store 422(bv) 426
|
||||
427: 52(ivec2) Load 312(i32v)
|
||||
428: 18(int) Load 315(i32)
|
||||
429: 52(ivec2) CompositeConstruct 428 428
|
||||
430: 166(bvec2) SLessThan 427 429
|
||||
431: 394(bvec3) Load 422(bv)
|
||||
432: 394(bvec3) VectorShuffle 431 430 3 4 2
|
||||
Store 422(bv) 432
|
||||
433: 184(ivec3) Load 325(u32v)
|
||||
434: 14(int) Load 327(u32)
|
||||
435: 184(ivec3) CompositeConstruct 434 434 434
|
||||
436: 394(bvec3) ULessThanEqual 433 435
|
||||
Store 422(bv) 436
|
||||
437: 52(ivec2) Load 312(i32v)
|
||||
438: 18(int) Load 315(i32)
|
||||
439: 52(ivec2) CompositeConstruct 438 438
|
||||
440: 166(bvec2) SLessThanEqual 437 439
|
||||
441: 394(bvec3) Load 422(bv)
|
||||
442: 394(bvec3) VectorShuffle 441 440 3 4 2
|
||||
Store 422(bv) 442
|
||||
443: 184(ivec3) Load 325(u32v)
|
||||
444: 14(int) Load 327(u32)
|
||||
445: 184(ivec3) CompositeConstruct 444 444 444
|
||||
446: 394(bvec3) UGreaterThan 443 445
|
||||
Store 422(bv) 446
|
||||
447: 52(ivec2) Load 312(i32v)
|
||||
448: 18(int) Load 315(i32)
|
||||
449: 52(ivec2) CompositeConstruct 448 448
|
||||
450: 166(bvec2) SGreaterThan 447 449
|
||||
451: 394(bvec3) Load 422(bv)
|
||||
452: 394(bvec3) VectorShuffle 451 450 3 4 2
|
||||
Store 422(bv) 452
|
||||
453: 184(ivec3) Load 325(u32v)
|
||||
454: 14(int) Load 327(u32)
|
||||
455: 184(ivec3) CompositeConstruct 454 454 454
|
||||
456: 394(bvec3) UGreaterThanEqual 453 455
|
||||
Store 422(bv) 456
|
||||
457: 52(ivec2) Load 312(i32v)
|
||||
458: 18(int) Load 315(i32)
|
||||
459: 52(ivec2) CompositeConstruct 458 458
|
||||
460: 166(bvec2) SGreaterThanEqual 457 459
|
||||
461: 394(bvec3) Load 422(bv)
|
||||
462: 394(bvec3) VectorShuffle 461 460 3 4 2
|
||||
Store 422(bv) 462
|
||||
463: 184(ivec3) Load 325(u32v)
|
||||
464: 14(int) Load 327(u32)
|
||||
465: 184(ivec3) CompositeConstruct 464 464 464
|
||||
466: 394(bvec3) IEqual 463 465
|
||||
Store 422(bv) 466
|
||||
467: 52(ivec2) Load 312(i32v)
|
||||
468: 18(int) Load 315(i32)
|
||||
469: 52(ivec2) CompositeConstruct 468 468
|
||||
470: 166(bvec2) IEqual 467 469
|
||||
471: 394(bvec3) Load 422(bv)
|
||||
472: 394(bvec3) VectorShuffle 471 470 3 4 2
|
||||
Store 422(bv) 472
|
||||
473: 184(ivec3) Load 325(u32v)
|
||||
474: 14(int) Load 327(u32)
|
||||
475: 184(ivec3) CompositeConstruct 474 474 474
|
||||
476: 394(bvec3) INotEqual 473 475
|
||||
Store 422(bv) 476
|
||||
477: 52(ivec2) Load 312(i32v)
|
||||
478: 18(int) Load 315(i32)
|
||||
479: 52(ivec2) CompositeConstruct 478 478
|
||||
480: 166(bvec2) INotEqual 477 479
|
||||
481: 394(bvec3) Load 422(bv)
|
||||
482: 394(bvec3) VectorShuffle 481 480 3 4 2
|
||||
Store 422(bv) 482
|
||||
Return
|
||||
FunctionEnd
|
||||
|
731
3rdparty/glslang/Test/baseResults/spv.int64.frag.out
vendored
731
3rdparty/glslang/Test/baseResults/spv.int64.frag.out
vendored
@ -1,7 +1,7 @@
|
||||
spv.int64.frag
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 483
|
||||
// Id's are bound by 488
|
||||
|
||||
Capability Shader
|
||||
Capability Float64
|
||||
@ -37,38 +37,38 @@ spv.int64.frag
|
||||
Name 139 "i64"
|
||||
Name 159 "i"
|
||||
Name 166 "uv"
|
||||
Name 221 "b"
|
||||
Name 281 "i64v"
|
||||
Name 284 "i64"
|
||||
Name 294 "u64v"
|
||||
Name 296 "u64"
|
||||
Name 368 "dv"
|
||||
Name 387 "iv"
|
||||
Name 392 "uv"
|
||||
Name 396 "bv"
|
||||
Name 457 "Block"
|
||||
MemberName 457(Block) 0 "i64v"
|
||||
MemberName 457(Block) 1 "u64"
|
||||
Name 459 "block"
|
||||
Name 460 "si64"
|
||||
Name 461 "su64"
|
||||
Name 462 "si"
|
||||
Name 463 "su"
|
||||
Name 464 "sb"
|
||||
Name 226 "b"
|
||||
Name 286 "i64v"
|
||||
Name 289 "i64"
|
||||
Name 299 "u64v"
|
||||
Name 301 "u64"
|
||||
Name 373 "dv"
|
||||
Name 392 "iv"
|
||||
Name 397 "uv"
|
||||
Name 401 "bv"
|
||||
Name 462 "Block"
|
||||
MemberName 462(Block) 0 "i64v"
|
||||
MemberName 462(Block) 1 "u64"
|
||||
Name 464 "block"
|
||||
Name 465 "si64"
|
||||
Name 466 "su64"
|
||||
Name 467 "si"
|
||||
Name 468 "su"
|
||||
Name 469 "sb"
|
||||
MemberDecorate 28(Uniforms) 0 Offset 0
|
||||
Decorate 28(Uniforms) Block
|
||||
Decorate 30 DescriptorSet 0
|
||||
Decorate 30 Binding 0
|
||||
MemberDecorate 457(Block) 0 Offset 0
|
||||
MemberDecorate 457(Block) 1 Offset 24
|
||||
Decorate 457(Block) Block
|
||||
Decorate 459(block) DescriptorSet 0
|
||||
Decorate 459(block) Binding 1
|
||||
Decorate 460(si64) SpecId 100
|
||||
Decorate 461(su64) SpecId 101
|
||||
Decorate 462(si) SpecId 102
|
||||
Decorate 463(su) SpecId 103
|
||||
Decorate 464(sb) SpecId 104
|
||||
MemberDecorate 462(Block) 0 Offset 0
|
||||
MemberDecorate 462(Block) 1 Offset 24
|
||||
Decorate 462(Block) Block
|
||||
Decorate 464(block) DescriptorSet 0
|
||||
Decorate 464(block) Binding 1
|
||||
Decorate 465(si64) SpecId 100
|
||||
Decorate 466(su64) SpecId 101
|
||||
Decorate 467(si) SpecId 102
|
||||
Decorate 468(su) SpecId 103
|
||||
Decorate 469(sb) SpecId 104
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
14: TypeInt 64 0
|
||||
@ -128,52 +128,53 @@ spv.int64.frag
|
||||
158: TypePointer Function 31(int)
|
||||
164: TypeVector 21(int) 3
|
||||
165: TypePointer Function 164(ivec3)
|
||||
199: TypeVector 31(int) 3
|
||||
203: 21(int) Constant 1
|
||||
204: TypePointer Function 21(int)
|
||||
212: 21(int) Constant 2
|
||||
220: TypePointer Function 55(bool)
|
||||
222: 21(int) Constant 0
|
||||
292: 52(ivec2) ConstantComposite 25 25
|
||||
301: 132(ivec3) ConstantComposite 69 69 69
|
||||
343: 55(bool) ConstantTrue
|
||||
350: 55(bool) ConstantFalse
|
||||
351: 56(bvec2) ConstantComposite 350 350
|
||||
363: TypeVector 55(bool) 3
|
||||
364: 363(bvec3) ConstantComposite 350 350 350
|
||||
366: TypeVector 94(float) 3
|
||||
367: TypePointer Function 366(fvec3)
|
||||
372: TypePointer Function 94(float)
|
||||
383: 31(int) Constant 1
|
||||
384: 31(int) Constant 2
|
||||
385: 74(ivec2) ConstantComposite 383 384
|
||||
390: 81(ivec2) ConstantComposite 212 22
|
||||
395: TypePointer Function 363(bvec3)
|
||||
457(Block): TypeStruct 136(ivec3) 14(int)
|
||||
458: TypePointer Uniform 457(Block)
|
||||
459(block): 458(ptr) Variable Uniform
|
||||
460(si64): 18(int) SpecConstant 4294967286 4294967295
|
||||
461(su64): 14(int) SpecConstant 20 0
|
||||
462(si): 31(int) SpecConstant 4294967291
|
||||
463(su): 21(int) SpecConstant 4
|
||||
464(sb): 55(bool) SpecConstantTrue
|
||||
465: 55(bool) SpecConstantOp 171 460(si64) 69
|
||||
466: 55(bool) SpecConstantOp 171 461(su64) 69
|
||||
467: 18(int) SpecConstantOp 169 464(sb) 61 60
|
||||
468: 14(int) SpecConstantOp 169 464(sb) 70 69
|
||||
469: 31(int) SpecConstantOp 114 460(si64)
|
||||
470: 18(int) SpecConstantOp 114 462(si)
|
||||
471: 21(int) SpecConstantOp 113 461(su64)
|
||||
472: 14(int) SpecConstantOp 113 463(su)
|
||||
473: 18(int) SpecConstantOp 128 461(su64) 69
|
||||
474: 14(int) SpecConstantOp 128 460(si64) 69
|
||||
475: 31(int) SpecConstantOp 113 461(su64)
|
||||
476: 31(int) SpecConstantOp 128 475 222
|
||||
477: 18(int) SpecConstantOp 114 462(si)
|
||||
478: 14(int) SpecConstantOp 128 477 69
|
||||
479: 31(int) SpecConstantOp 114 460(si64)
|
||||
480: 21(int) SpecConstantOp 128 479 222
|
||||
481: 18(int) SpecConstantOp 113 463(su)
|
||||
482: 18(int) SpecConstantOp 128 481 69
|
||||
217: 21(int) Constant 2
|
||||
225: TypePointer Function 55(bool)
|
||||
227: 21(int) Constant 0
|
||||
297: 52(ivec2) ConstantComposite 25 25
|
||||
306: 132(ivec3) ConstantComposite 69 69 69
|
||||
348: 55(bool) ConstantTrue
|
||||
355: 55(bool) ConstantFalse
|
||||
356: 56(bvec2) ConstantComposite 355 355
|
||||
368: TypeVector 55(bool) 3
|
||||
369: 368(bvec3) ConstantComposite 355 355 355
|
||||
371: TypeVector 94(float) 3
|
||||
372: TypePointer Function 371(fvec3)
|
||||
377: TypePointer Function 94(float)
|
||||
388: 31(int) Constant 1
|
||||
389: 31(int) Constant 2
|
||||
390: 74(ivec2) ConstantComposite 388 389
|
||||
395: 81(ivec2) ConstantComposite 217 22
|
||||
400: TypePointer Function 368(bvec3)
|
||||
462(Block): TypeStruct 136(ivec3) 14(int)
|
||||
463: TypePointer Uniform 462(Block)
|
||||
464(block): 463(ptr) Variable Uniform
|
||||
465(si64): 18(int) SpecConstant 4294967286 4294967295
|
||||
466(su64): 14(int) SpecConstant 20 0
|
||||
467(si): 31(int) SpecConstant 4294967291
|
||||
468(su): 21(int) SpecConstant 4
|
||||
469(sb): 55(bool) SpecConstantTrue
|
||||
470: 55(bool) SpecConstantOp 171 465(si64) 69
|
||||
471: 55(bool) SpecConstantOp 171 466(su64) 69
|
||||
472: 18(int) SpecConstantOp 169 469(sb) 61 60
|
||||
473: 14(int) SpecConstantOp 169 469(sb) 70 69
|
||||
474: 31(int) SpecConstantOp 114 465(si64)
|
||||
475: 18(int) SpecConstantOp 114 467(si)
|
||||
476: 21(int) SpecConstantOp 113 466(su64)
|
||||
477: 14(int) SpecConstantOp 113 468(su)
|
||||
478: 18(int) SpecConstantOp 128 466(su64) 69
|
||||
479: 14(int) SpecConstantOp 128 465(si64) 69
|
||||
480: 31(int) SpecConstantOp 113 466(su64)
|
||||
481: 31(int) SpecConstantOp 128 480 227
|
||||
482: 18(int) SpecConstantOp 114 467(si)
|
||||
483: 14(int) SpecConstantOp 128 482 69
|
||||
484: 31(int) SpecConstantOp 114 465(si64)
|
||||
485: 21(int) SpecConstantOp 128 484 227
|
||||
486: 18(int) SpecConstantOp 113 468(su)
|
||||
487: 18(int) SpecConstantOp 128 486 69
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
Store 16(u64Max) 17
|
||||
@ -286,7 +287,7 @@ spv.int64.frag
|
||||
139(i64): 19(ptr) Variable Function
|
||||
159(i): 158(ptr) Variable Function
|
||||
166(uv): 165(ptr) Variable Function
|
||||
221(b): 220(ptr) Variable Function
|
||||
226(b): 225(ptr) Variable Function
|
||||
135: 132(ivec3) Load 134(u64v)
|
||||
137: 136(ivec3) CompositeConstruct 61 61 61
|
||||
138: 132(ivec3) IAdd 135 137
|
||||
@ -359,302 +360,308 @@ spv.int64.frag
|
||||
195: 18(int) SConvert 194
|
||||
196: 18(int) SMod 193 195
|
||||
Store 139(i64) 196
|
||||
197: 31(int) Load 159(i)
|
||||
198: 18(int) SConvert 197
|
||||
199: 14(int) Bitcast 198
|
||||
200: 132(ivec3) Load 134(u64v)
|
||||
201: 132(ivec3) CompositeConstruct 199 199 199
|
||||
202: 132(ivec3) ShiftLeftLogical 200 201
|
||||
Store 134(u64v) 202
|
||||
197: 132(ivec3) Load 134(u64v)
|
||||
198: 31(int) Load 159(i)
|
||||
200: 199(ivec3) CompositeConstruct 198 198 198
|
||||
201: 132(ivec3) ShiftLeftLogical 197 200
|
||||
Store 134(u64v) 201
|
||||
202: 18(int) Load 139(i64)
|
||||
205: 204(ptr) AccessChain 166(uv) 203
|
||||
206: 21(int) Load 205
|
||||
207: 18(int) UConvert 206
|
||||
208: 18(int) Bitcast 207
|
||||
209: 18(int) Load 139(i64)
|
||||
210: 18(int) ShiftRightArithmetic 209 208
|
||||
Store 139(i64) 210
|
||||
211: 18(int) Load 139(i64)
|
||||
213: 40(ptr) AccessChain 134(u64v) 212
|
||||
214: 14(int) Load 213
|
||||
215: 18(int) ShiftLeftLogical 211 214
|
||||
207: 18(int) ShiftRightArithmetic 202 206
|
||||
Store 139(i64) 207
|
||||
208: 31(int) Load 159(i)
|
||||
209: 132(ivec3) Load 134(u64v)
|
||||
210: 199(ivec3) CompositeConstruct 208 208 208
|
||||
211: 132(ivec3) ShiftLeftLogical 209 210
|
||||
Store 134(u64v) 211
|
||||
212: 204(ptr) AccessChain 166(uv) 203
|
||||
213: 21(int) Load 212
|
||||
214: 18(int) Load 139(i64)
|
||||
215: 18(int) ShiftRightArithmetic 214 213
|
||||
Store 139(i64) 215
|
||||
216: 132(ivec3) Load 134(u64v)
|
||||
217: 18(int) Load 139(i64)
|
||||
218: 136(ivec3) CompositeConstruct 217 217 217
|
||||
219: 132(ivec3) ShiftLeftLogical 216 218
|
||||
Store 134(u64v) 219
|
||||
223: 40(ptr) AccessChain 134(u64v) 222
|
||||
224: 14(int) Load 223
|
||||
225: 18(int) Load 139(i64)
|
||||
226: 14(int) Bitcast 225
|
||||
227: 55(bool) INotEqual 224 226
|
||||
Store 221(b) 227
|
||||
228: 18(int) Load 139(i64)
|
||||
229: 14(int) Bitcast 228
|
||||
230: 40(ptr) AccessChain 134(u64v) 222
|
||||
231: 14(int) Load 230
|
||||
232: 55(bool) IEqual 229 231
|
||||
Store 221(b) 232
|
||||
233: 40(ptr) AccessChain 134(u64v) 222
|
||||
234: 14(int) Load 233
|
||||
235: 204(ptr) AccessChain 166(uv) 203
|
||||
236: 21(int) Load 235
|
||||
237: 14(int) UConvert 236
|
||||
238: 55(bool) UGreaterThan 234 237
|
||||
Store 221(b) 238
|
||||
239: 18(int) Load 139(i64)
|
||||
240: 31(int) Load 159(i)
|
||||
241: 18(int) SConvert 240
|
||||
242: 55(bool) SLessThan 239 241
|
||||
Store 221(b) 242
|
||||
243: 40(ptr) AccessChain 134(u64v) 203
|
||||
244: 14(int) Load 243
|
||||
245: 204(ptr) AccessChain 166(uv) 222
|
||||
246: 21(int) Load 245
|
||||
247: 14(int) UConvert 246
|
||||
248: 55(bool) UGreaterThanEqual 244 247
|
||||
Store 221(b) 248
|
||||
249: 18(int) Load 139(i64)
|
||||
250: 31(int) Load 159(i)
|
||||
251: 18(int) SConvert 250
|
||||
252: 55(bool) SLessThanEqual 249 251
|
||||
Store 221(b) 252
|
||||
253: 31(int) Load 159(i)
|
||||
254: 18(int) SConvert 253
|
||||
255: 14(int) Bitcast 254
|
||||
256: 132(ivec3) Load 134(u64v)
|
||||
257: 132(ivec3) CompositeConstruct 255 255 255
|
||||
258: 132(ivec3) BitwiseOr 256 257
|
||||
Store 134(u64v) 258
|
||||
259: 18(int) Load 139(i64)
|
||||
260: 31(int) Load 159(i)
|
||||
261: 18(int) SConvert 260
|
||||
262: 18(int) BitwiseOr 259 261
|
||||
Store 139(i64) 262
|
||||
263: 31(int) Load 159(i)
|
||||
264: 18(int) SConvert 263
|
||||
265: 18(int) Load 139(i64)
|
||||
266: 18(int) BitwiseAnd 265 264
|
||||
Store 139(i64) 266
|
||||
267: 132(ivec3) Load 134(u64v)
|
||||
268: 164(ivec3) Load 166(uv)
|
||||
269: 132(ivec3) UConvert 268
|
||||
270: 132(ivec3) BitwiseAnd 267 269
|
||||
Store 134(u64v) 270
|
||||
271: 18(int) Load 139(i64)
|
||||
272: 14(int) Bitcast 271
|
||||
273: 132(ivec3) Load 134(u64v)
|
||||
274: 132(ivec3) CompositeConstruct 272 272 272
|
||||
275: 132(ivec3) BitwiseXor 273 274
|
||||
216: 18(int) Load 139(i64)
|
||||
218: 40(ptr) AccessChain 134(u64v) 217
|
||||
219: 14(int) Load 218
|
||||
220: 18(int) ShiftLeftLogical 216 219
|
||||
Store 139(i64) 220
|
||||
221: 132(ivec3) Load 134(u64v)
|
||||
222: 18(int) Load 139(i64)
|
||||
223: 136(ivec3) CompositeConstruct 222 222 222
|
||||
224: 132(ivec3) ShiftLeftLogical 221 223
|
||||
Store 134(u64v) 224
|
||||
228: 40(ptr) AccessChain 134(u64v) 227
|
||||
229: 14(int) Load 228
|
||||
230: 18(int) Load 139(i64)
|
||||
231: 14(int) Bitcast 230
|
||||
232: 55(bool) INotEqual 229 231
|
||||
Store 226(b) 232
|
||||
233: 18(int) Load 139(i64)
|
||||
234: 14(int) Bitcast 233
|
||||
235: 40(ptr) AccessChain 134(u64v) 227
|
||||
236: 14(int) Load 235
|
||||
237: 55(bool) IEqual 234 236
|
||||
Store 226(b) 237
|
||||
238: 40(ptr) AccessChain 134(u64v) 227
|
||||
239: 14(int) Load 238
|
||||
240: 204(ptr) AccessChain 166(uv) 203
|
||||
241: 21(int) Load 240
|
||||
242: 14(int) UConvert 241
|
||||
243: 55(bool) UGreaterThan 239 242
|
||||
Store 226(b) 243
|
||||
244: 18(int) Load 139(i64)
|
||||
245: 31(int) Load 159(i)
|
||||
246: 18(int) SConvert 245
|
||||
247: 55(bool) SLessThan 244 246
|
||||
Store 226(b) 247
|
||||
248: 40(ptr) AccessChain 134(u64v) 203
|
||||
249: 14(int) Load 248
|
||||
250: 204(ptr) AccessChain 166(uv) 227
|
||||
251: 21(int) Load 250
|
||||
252: 14(int) UConvert 251
|
||||
253: 55(bool) UGreaterThanEqual 249 252
|
||||
Store 226(b) 253
|
||||
254: 18(int) Load 139(i64)
|
||||
255: 31(int) Load 159(i)
|
||||
256: 18(int) SConvert 255
|
||||
257: 55(bool) SLessThanEqual 254 256
|
||||
Store 226(b) 257
|
||||
258: 31(int) Load 159(i)
|
||||
259: 18(int) SConvert 258
|
||||
260: 14(int) Bitcast 259
|
||||
261: 132(ivec3) Load 134(u64v)
|
||||
262: 132(ivec3) CompositeConstruct 260 260 260
|
||||
263: 132(ivec3) BitwiseOr 261 262
|
||||
Store 134(u64v) 263
|
||||
264: 18(int) Load 139(i64)
|
||||
265: 31(int) Load 159(i)
|
||||
266: 18(int) SConvert 265
|
||||
267: 18(int) BitwiseOr 264 266
|
||||
Store 139(i64) 267
|
||||
268: 31(int) Load 159(i)
|
||||
269: 18(int) SConvert 268
|
||||
270: 18(int) Load 139(i64)
|
||||
271: 18(int) BitwiseAnd 270 269
|
||||
Store 139(i64) 271
|
||||
272: 132(ivec3) Load 134(u64v)
|
||||
273: 164(ivec3) Load 166(uv)
|
||||
274: 132(ivec3) UConvert 273
|
||||
275: 132(ivec3) BitwiseAnd 272 274
|
||||
Store 134(u64v) 275
|
||||
276: 132(ivec3) Load 134(u64v)
|
||||
277: 18(int) Load 139(i64)
|
||||
278: 14(int) Bitcast 277
|
||||
279: 132(ivec3) CompositeConstruct 278 278 278
|
||||
280: 132(ivec3) BitwiseXor 276 279
|
||||
276: 18(int) Load 139(i64)
|
||||
277: 14(int) Bitcast 276
|
||||
278: 132(ivec3) Load 134(u64v)
|
||||
279: 132(ivec3) CompositeConstruct 277 277 277
|
||||
280: 132(ivec3) BitwiseXor 278 279
|
||||
Store 134(u64v) 280
|
||||
281: 132(ivec3) Load 134(u64v)
|
||||
282: 18(int) Load 139(i64)
|
||||
283: 14(int) Bitcast 282
|
||||
284: 132(ivec3) CompositeConstruct 283 283 283
|
||||
285: 132(ivec3) BitwiseXor 281 284
|
||||
Store 134(u64v) 285
|
||||
Return
|
||||
FunctionEnd
|
||||
12(builtinFuncs(): 2 Function None 3
|
||||
13: Label
|
||||
281(i64v): 53(ptr) Variable Function
|
||||
284(i64): 19(ptr) Variable Function
|
||||
294(u64v): 133(ptr) Variable Function
|
||||
296(u64): 40(ptr) Variable Function
|
||||
368(dv): 367(ptr) Variable Function
|
||||
387(iv): 75(ptr) Variable Function
|
||||
392(uv): 82(ptr) Variable Function
|
||||
396(bv): 395(ptr) Variable Function
|
||||
282: 52(ivec2) Load 281(i64v)
|
||||
283: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 282
|
||||
Store 281(i64v) 283
|
||||
285: 18(int) Load 284(i64)
|
||||
286: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 285
|
||||
Store 284(i64) 286
|
||||
287: 52(ivec2) Load 281(i64v)
|
||||
288: 18(int) Load 284(i64)
|
||||
289: 52(ivec2) CompositeConstruct 288 288
|
||||
290: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 287 289
|
||||
Store 281(i64v) 290
|
||||
291: 52(ivec2) Load 281(i64v)
|
||||
293: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 291 292
|
||||
Store 281(i64v) 293
|
||||
295: 132(ivec3) Load 294(u64v)
|
||||
297: 14(int) Load 296(u64)
|
||||
298: 132(ivec3) CompositeConstruct 297 297 297
|
||||
299: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 295 298
|
||||
Store 294(u64v) 299
|
||||
300: 132(ivec3) Load 294(u64v)
|
||||
302: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 301
|
||||
Store 294(u64v) 302
|
||||
303: 52(ivec2) Load 281(i64v)
|
||||
304: 18(int) Load 284(i64)
|
||||
305: 52(ivec2) CompositeConstruct 304 304
|
||||
306: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 303 305
|
||||
Store 281(i64v) 306
|
||||
307: 52(ivec2) Load 281(i64v)
|
||||
308: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 307 292
|
||||
Store 281(i64v) 308
|
||||
309: 132(ivec3) Load 294(u64v)
|
||||
310: 14(int) Load 296(u64)
|
||||
311: 132(ivec3) CompositeConstruct 310 310 310
|
||||
312: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 309 311
|
||||
Store 294(u64v) 312
|
||||
313: 132(ivec3) Load 294(u64v)
|
||||
314: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 313 301
|
||||
Store 294(u64v) 314
|
||||
315: 52(ivec2) Load 281(i64v)
|
||||
316: 18(int) Load 284(i64)
|
||||
317: 18(int) SNegate 316
|
||||
318: 18(int) Load 284(i64)
|
||||
319: 52(ivec2) CompositeConstruct 317 317
|
||||
320: 52(ivec2) CompositeConstruct 318 318
|
||||
321: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 315 319 320
|
||||
Store 281(i64v) 321
|
||||
322: 52(ivec2) Load 281(i64v)
|
||||
323: 52(ivec2) Load 281(i64v)
|
||||
324: 52(ivec2) SNegate 323
|
||||
325: 52(ivec2) Load 281(i64v)
|
||||
326: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 322 324 325
|
||||
Store 281(i64v) 326
|
||||
327: 132(ivec3) Load 294(u64v)
|
||||
328: 14(int) Load 296(u64)
|
||||
329: 14(int) SNegate 328
|
||||
330: 14(int) Load 296(u64)
|
||||
331: 132(ivec3) CompositeConstruct 329 329 329
|
||||
332: 132(ivec3) CompositeConstruct 330 330 330
|
||||
333: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 327 331 332
|
||||
Store 294(u64v) 333
|
||||
334: 132(ivec3) Load 294(u64v)
|
||||
335: 132(ivec3) Load 294(u64v)
|
||||
336: 132(ivec3) SNegate 335
|
||||
337: 132(ivec3) Load 294(u64v)
|
||||
338: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 334 336 337
|
||||
Store 294(u64v) 338
|
||||
339: 19(ptr) AccessChain 281(i64v) 222
|
||||
340: 18(int) Load 339
|
||||
341: 19(ptr) AccessChain 281(i64v) 203
|
||||
342: 18(int) Load 341
|
||||
344: 18(int) Select 343 342 340
|
||||
Store 284(i64) 344
|
||||
345: 18(int) Load 284(i64)
|
||||
346: 52(ivec2) CompositeConstruct 345 345
|
||||
347: 18(int) Load 284(i64)
|
||||
348: 18(int) SNegate 347
|
||||
349: 52(ivec2) CompositeConstruct 348 348
|
||||
352: 52(ivec2) Select 351 349 346
|
||||
Store 281(i64v) 352
|
||||
353: 40(ptr) AccessChain 294(u64v) 222
|
||||
354: 14(int) Load 353
|
||||
355: 40(ptr) AccessChain 294(u64v) 203
|
||||
356: 14(int) Load 355
|
||||
357: 14(int) Select 343 356 354
|
||||
Store 296(u64) 357
|
||||
358: 14(int) Load 296(u64)
|
||||
359: 132(ivec3) CompositeConstruct 358 358 358
|
||||
360: 14(int) Load 296(u64)
|
||||
361: 14(int) SNegate 360
|
||||
362: 132(ivec3) CompositeConstruct 361 361 361
|
||||
365: 132(ivec3) Select 364 362 359
|
||||
Store 294(u64v) 365
|
||||
369: 366(fvec3) Load 368(dv)
|
||||
370: 95(fvec2) VectorShuffle 369 369 0 1
|
||||
371: 52(ivec2) Bitcast 370
|
||||
Store 281(i64v) 371
|
||||
373: 372(ptr) AccessChain 368(dv) 212
|
||||
374: 94(float) Load 373
|
||||
375: 14(int) Bitcast 374
|
||||
376: 40(ptr) AccessChain 294(u64v) 222
|
||||
Store 376 375
|
||||
377: 52(ivec2) Load 281(i64v)
|
||||
378: 95(fvec2) Bitcast 377
|
||||
379: 366(fvec3) Load 368(dv)
|
||||
380: 366(fvec3) VectorShuffle 379 378 3 4 2
|
||||
Store 368(dv) 380
|
||||
381: 132(ivec3) Load 294(u64v)
|
||||
382: 366(fvec3) Bitcast 381
|
||||
Store 368(dv) 382
|
||||
386: 18(int) Bitcast 385
|
||||
Store 284(i64) 386
|
||||
388: 18(int) Load 284(i64)
|
||||
389: 74(ivec2) Bitcast 388
|
||||
Store 387(iv) 389
|
||||
391: 14(int) Bitcast 390
|
||||
Store 296(u64) 391
|
||||
393: 14(int) Load 296(u64)
|
||||
394: 81(ivec2) Bitcast 393
|
||||
Store 392(uv) 394
|
||||
397: 132(ivec3) Load 294(u64v)
|
||||
398: 14(int) Load 296(u64)
|
||||
399: 132(ivec3) CompositeConstruct 398 398 398
|
||||
400: 363(bvec3) ULessThan 397 399
|
||||
Store 396(bv) 400
|
||||
401: 52(ivec2) Load 281(i64v)
|
||||
402: 18(int) Load 284(i64)
|
||||
403: 52(ivec2) CompositeConstruct 402 402
|
||||
404: 56(bvec2) SLessThan 401 403
|
||||
405: 363(bvec3) Load 396(bv)
|
||||
406: 363(bvec3) VectorShuffle 405 404 3 4 2
|
||||
Store 396(bv) 406
|
||||
407: 132(ivec3) Load 294(u64v)
|
||||
408: 14(int) Load 296(u64)
|
||||
409: 132(ivec3) CompositeConstruct 408 408 408
|
||||
410: 363(bvec3) ULessThanEqual 407 409
|
||||
Store 396(bv) 410
|
||||
411: 52(ivec2) Load 281(i64v)
|
||||
412: 18(int) Load 284(i64)
|
||||
413: 52(ivec2) CompositeConstruct 412 412
|
||||
414: 56(bvec2) SLessThanEqual 411 413
|
||||
415: 363(bvec3) Load 396(bv)
|
||||
416: 363(bvec3) VectorShuffle 415 414 3 4 2
|
||||
Store 396(bv) 416
|
||||
417: 132(ivec3) Load 294(u64v)
|
||||
418: 14(int) Load 296(u64)
|
||||
419: 132(ivec3) CompositeConstruct 418 418 418
|
||||
420: 363(bvec3) UGreaterThan 417 419
|
||||
Store 396(bv) 420
|
||||
421: 52(ivec2) Load 281(i64v)
|
||||
422: 18(int) Load 284(i64)
|
||||
423: 52(ivec2) CompositeConstruct 422 422
|
||||
424: 56(bvec2) SGreaterThan 421 423
|
||||
425: 363(bvec3) Load 396(bv)
|
||||
426: 363(bvec3) VectorShuffle 425 424 3 4 2
|
||||
Store 396(bv) 426
|
||||
427: 132(ivec3) Load 294(u64v)
|
||||
428: 14(int) Load 296(u64)
|
||||
429: 132(ivec3) CompositeConstruct 428 428 428
|
||||
430: 363(bvec3) UGreaterThanEqual 427 429
|
||||
Store 396(bv) 430
|
||||
431: 52(ivec2) Load 281(i64v)
|
||||
432: 18(int) Load 284(i64)
|
||||
433: 52(ivec2) CompositeConstruct 432 432
|
||||
434: 56(bvec2) SGreaterThanEqual 431 433
|
||||
435: 363(bvec3) Load 396(bv)
|
||||
436: 363(bvec3) VectorShuffle 435 434 3 4 2
|
||||
Store 396(bv) 436
|
||||
437: 132(ivec3) Load 294(u64v)
|
||||
438: 14(int) Load 296(u64)
|
||||
439: 132(ivec3) CompositeConstruct 438 438 438
|
||||
440: 363(bvec3) IEqual 437 439
|
||||
Store 396(bv) 440
|
||||
441: 52(ivec2) Load 281(i64v)
|
||||
442: 18(int) Load 284(i64)
|
||||
443: 52(ivec2) CompositeConstruct 442 442
|
||||
444: 56(bvec2) IEqual 441 443
|
||||
445: 363(bvec3) Load 396(bv)
|
||||
446: 363(bvec3) VectorShuffle 445 444 3 4 2
|
||||
Store 396(bv) 446
|
||||
447: 132(ivec3) Load 294(u64v)
|
||||
448: 14(int) Load 296(u64)
|
||||
449: 132(ivec3) CompositeConstruct 448 448 448
|
||||
450: 363(bvec3) INotEqual 447 449
|
||||
Store 396(bv) 450
|
||||
451: 52(ivec2) Load 281(i64v)
|
||||
452: 18(int) Load 284(i64)
|
||||
453: 52(ivec2) CompositeConstruct 452 452
|
||||
454: 56(bvec2) INotEqual 451 453
|
||||
455: 363(bvec3) Load 396(bv)
|
||||
456: 363(bvec3) VectorShuffle 455 454 3 4 2
|
||||
Store 396(bv) 456
|
||||
286(i64v): 53(ptr) Variable Function
|
||||
289(i64): 19(ptr) Variable Function
|
||||
299(u64v): 133(ptr) Variable Function
|
||||
301(u64): 40(ptr) Variable Function
|
||||
373(dv): 372(ptr) Variable Function
|
||||
392(iv): 75(ptr) Variable Function
|
||||
397(uv): 82(ptr) Variable Function
|
||||
401(bv): 400(ptr) Variable Function
|
||||
287: 52(ivec2) Load 286(i64v)
|
||||
288: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 287
|
||||
Store 286(i64v) 288
|
||||
290: 18(int) Load 289(i64)
|
||||
291: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 290
|
||||
Store 289(i64) 291
|
||||
292: 52(ivec2) Load 286(i64v)
|
||||
293: 18(int) Load 289(i64)
|
||||
294: 52(ivec2) CompositeConstruct 293 293
|
||||
295: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 292 294
|
||||
Store 286(i64v) 295
|
||||
296: 52(ivec2) Load 286(i64v)
|
||||
298: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 296 297
|
||||
Store 286(i64v) 298
|
||||
300: 132(ivec3) Load 299(u64v)
|
||||
302: 14(int) Load 301(u64)
|
||||
303: 132(ivec3) CompositeConstruct 302 302 302
|
||||
304: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 303
|
||||
Store 299(u64v) 304
|
||||
305: 132(ivec3) Load 299(u64v)
|
||||
307: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 305 306
|
||||
Store 299(u64v) 307
|
||||
308: 52(ivec2) Load 286(i64v)
|
||||
309: 18(int) Load 289(i64)
|
||||
310: 52(ivec2) CompositeConstruct 309 309
|
||||
311: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 308 310
|
||||
Store 286(i64v) 311
|
||||
312: 52(ivec2) Load 286(i64v)
|
||||
313: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 312 297
|
||||
Store 286(i64v) 313
|
||||
314: 132(ivec3) Load 299(u64v)
|
||||
315: 14(int) Load 301(u64)
|
||||
316: 132(ivec3) CompositeConstruct 315 315 315
|
||||
317: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 314 316
|
||||
Store 299(u64v) 317
|
||||
318: 132(ivec3) Load 299(u64v)
|
||||
319: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 318 306
|
||||
Store 299(u64v) 319
|
||||
320: 52(ivec2) Load 286(i64v)
|
||||
321: 18(int) Load 289(i64)
|
||||
322: 18(int) SNegate 321
|
||||
323: 18(int) Load 289(i64)
|
||||
324: 52(ivec2) CompositeConstruct 322 322
|
||||
325: 52(ivec2) CompositeConstruct 323 323
|
||||
326: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 320 324 325
|
||||
Store 286(i64v) 326
|
||||
327: 52(ivec2) Load 286(i64v)
|
||||
328: 52(ivec2) Load 286(i64v)
|
||||
329: 52(ivec2) SNegate 328
|
||||
330: 52(ivec2) Load 286(i64v)
|
||||
331: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 327 329 330
|
||||
Store 286(i64v) 331
|
||||
332: 132(ivec3) Load 299(u64v)
|
||||
333: 14(int) Load 301(u64)
|
||||
334: 14(int) SNegate 333
|
||||
335: 14(int) Load 301(u64)
|
||||
336: 132(ivec3) CompositeConstruct 334 334 334
|
||||
337: 132(ivec3) CompositeConstruct 335 335 335
|
||||
338: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 332 336 337
|
||||
Store 299(u64v) 338
|
||||
339: 132(ivec3) Load 299(u64v)
|
||||
340: 132(ivec3) Load 299(u64v)
|
||||
341: 132(ivec3) SNegate 340
|
||||
342: 132(ivec3) Load 299(u64v)
|
||||
343: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 339 341 342
|
||||
Store 299(u64v) 343
|
||||
344: 19(ptr) AccessChain 286(i64v) 227
|
||||
345: 18(int) Load 344
|
||||
346: 19(ptr) AccessChain 286(i64v) 203
|
||||
347: 18(int) Load 346
|
||||
349: 18(int) Select 348 347 345
|
||||
Store 289(i64) 349
|
||||
350: 18(int) Load 289(i64)
|
||||
351: 52(ivec2) CompositeConstruct 350 350
|
||||
352: 18(int) Load 289(i64)
|
||||
353: 18(int) SNegate 352
|
||||
354: 52(ivec2) CompositeConstruct 353 353
|
||||
357: 52(ivec2) Select 356 354 351
|
||||
Store 286(i64v) 357
|
||||
358: 40(ptr) AccessChain 299(u64v) 227
|
||||
359: 14(int) Load 358
|
||||
360: 40(ptr) AccessChain 299(u64v) 203
|
||||
361: 14(int) Load 360
|
||||
362: 14(int) Select 348 361 359
|
||||
Store 301(u64) 362
|
||||
363: 14(int) Load 301(u64)
|
||||
364: 132(ivec3) CompositeConstruct 363 363 363
|
||||
365: 14(int) Load 301(u64)
|
||||
366: 14(int) SNegate 365
|
||||
367: 132(ivec3) CompositeConstruct 366 366 366
|
||||
370: 132(ivec3) Select 369 367 364
|
||||
Store 299(u64v) 370
|
||||
374: 371(fvec3) Load 373(dv)
|
||||
375: 95(fvec2) VectorShuffle 374 374 0 1
|
||||
376: 52(ivec2) Bitcast 375
|
||||
Store 286(i64v) 376
|
||||
378: 377(ptr) AccessChain 373(dv) 217
|
||||
379: 94(float) Load 378
|
||||
380: 14(int) Bitcast 379
|
||||
381: 40(ptr) AccessChain 299(u64v) 227
|
||||
Store 381 380
|
||||
382: 52(ivec2) Load 286(i64v)
|
||||
383: 95(fvec2) Bitcast 382
|
||||
384: 371(fvec3) Load 373(dv)
|
||||
385: 371(fvec3) VectorShuffle 384 383 3 4 2
|
||||
Store 373(dv) 385
|
||||
386: 132(ivec3) Load 299(u64v)
|
||||
387: 371(fvec3) Bitcast 386
|
||||
Store 373(dv) 387
|
||||
391: 18(int) Bitcast 390
|
||||
Store 289(i64) 391
|
||||
393: 18(int) Load 289(i64)
|
||||
394: 74(ivec2) Bitcast 393
|
||||
Store 392(iv) 394
|
||||
396: 14(int) Bitcast 395
|
||||
Store 301(u64) 396
|
||||
398: 14(int) Load 301(u64)
|
||||
399: 81(ivec2) Bitcast 398
|
||||
Store 397(uv) 399
|
||||
402: 132(ivec3) Load 299(u64v)
|
||||
403: 14(int) Load 301(u64)
|
||||
404: 132(ivec3) CompositeConstruct 403 403 403
|
||||
405: 368(bvec3) ULessThan 402 404
|
||||
Store 401(bv) 405
|
||||
406: 52(ivec2) Load 286(i64v)
|
||||
407: 18(int) Load 289(i64)
|
||||
408: 52(ivec2) CompositeConstruct 407 407
|
||||
409: 56(bvec2) SLessThan 406 408
|
||||
410: 368(bvec3) Load 401(bv)
|
||||
411: 368(bvec3) VectorShuffle 410 409 3 4 2
|
||||
Store 401(bv) 411
|
||||
412: 132(ivec3) Load 299(u64v)
|
||||
413: 14(int) Load 301(u64)
|
||||
414: 132(ivec3) CompositeConstruct 413 413 413
|
||||
415: 368(bvec3) ULessThanEqual 412 414
|
||||
Store 401(bv) 415
|
||||
416: 52(ivec2) Load 286(i64v)
|
||||
417: 18(int) Load 289(i64)
|
||||
418: 52(ivec2) CompositeConstruct 417 417
|
||||
419: 56(bvec2) SLessThanEqual 416 418
|
||||
420: 368(bvec3) Load 401(bv)
|
||||
421: 368(bvec3) VectorShuffle 420 419 3 4 2
|
||||
Store 401(bv) 421
|
||||
422: 132(ivec3) Load 299(u64v)
|
||||
423: 14(int) Load 301(u64)
|
||||
424: 132(ivec3) CompositeConstruct 423 423 423
|
||||
425: 368(bvec3) UGreaterThan 422 424
|
||||
Store 401(bv) 425
|
||||
426: 52(ivec2) Load 286(i64v)
|
||||
427: 18(int) Load 289(i64)
|
||||
428: 52(ivec2) CompositeConstruct 427 427
|
||||
429: 56(bvec2) SGreaterThan 426 428
|
||||
430: 368(bvec3) Load 401(bv)
|
||||
431: 368(bvec3) VectorShuffle 430 429 3 4 2
|
||||
Store 401(bv) 431
|
||||
432: 132(ivec3) Load 299(u64v)
|
||||
433: 14(int) Load 301(u64)
|
||||
434: 132(ivec3) CompositeConstruct 433 433 433
|
||||
435: 368(bvec3) UGreaterThanEqual 432 434
|
||||
Store 401(bv) 435
|
||||
436: 52(ivec2) Load 286(i64v)
|
||||
437: 18(int) Load 289(i64)
|
||||
438: 52(ivec2) CompositeConstruct 437 437
|
||||
439: 56(bvec2) SGreaterThanEqual 436 438
|
||||
440: 368(bvec3) Load 401(bv)
|
||||
441: 368(bvec3) VectorShuffle 440 439 3 4 2
|
||||
Store 401(bv) 441
|
||||
442: 132(ivec3) Load 299(u64v)
|
||||
443: 14(int) Load 301(u64)
|
||||
444: 132(ivec3) CompositeConstruct 443 443 443
|
||||
445: 368(bvec3) IEqual 442 444
|
||||
Store 401(bv) 445
|
||||
446: 52(ivec2) Load 286(i64v)
|
||||
447: 18(int) Load 289(i64)
|
||||
448: 52(ivec2) CompositeConstruct 447 447
|
||||
449: 56(bvec2) IEqual 446 448
|
||||
450: 368(bvec3) Load 401(bv)
|
||||
451: 368(bvec3) VectorShuffle 450 449 3 4 2
|
||||
Store 401(bv) 451
|
||||
452: 132(ivec3) Load 299(u64v)
|
||||
453: 14(int) Load 301(u64)
|
||||
454: 132(ivec3) CompositeConstruct 453 453 453
|
||||
455: 368(bvec3) INotEqual 452 454
|
||||
Store 401(bv) 455
|
||||
456: 52(ivec2) Load 286(i64v)
|
||||
457: 18(int) Load 289(i64)
|
||||
458: 52(ivec2) CompositeConstruct 457 457
|
||||
459: 56(bvec2) INotEqual 456 458
|
||||
460: 368(bvec3) Load 401(bv)
|
||||
461: 368(bvec3) VectorShuffle 460 459 3 4 2
|
||||
Store 401(bv) 461
|
||||
Return
|
||||
FunctionEnd
|
||||
|
57
3rdparty/glslang/Test/baseResults/spv.rankShift.comp.out
vendored
Executable file
57
3rdparty/glslang/Test/baseResults/spv.rankShift.comp.out
vendored
Executable file
@ -0,0 +1,57 @@
|
||||
spv.rankShift.comp
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 33
|
||||
|
||||
Capability Shader
|
||||
Capability Int64
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint GLCompute 4 "main"
|
||||
ExecutionMode 4 LocalSize 54 1 1
|
||||
Source GLSL 450
|
||||
SourceExtension "GL_ARB_gpu_shader_int64"
|
||||
Name 4 "main"
|
||||
Name 8 "result"
|
||||
Name 11 "arg0"
|
||||
Name 15 "arg1"
|
||||
Decorate 11(arg0) Location 4
|
||||
Decorate 15(arg1) Location 5
|
||||
Decorate 32 BuiltIn WorkgroupSize
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeInt 64 0
|
||||
7: TypePointer Function 6(int)
|
||||
9: TypeInt 64 1
|
||||
10: TypePointer UniformConstant 9(int)
|
||||
11(arg0): 10(ptr) Variable UniformConstant
|
||||
13: TypeInt 32 0
|
||||
14: TypePointer UniformConstant 13(int)
|
||||
15(arg1): 14(ptr) Variable UniformConstant
|
||||
29: TypeVector 13(int) 3
|
||||
30: 13(int) Constant 54
|
||||
31: 13(int) Constant 1
|
||||
32: 29(ivec3) ConstantComposite 30 31 31
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(result): 7(ptr) Variable Function
|
||||
12: 9(int) Load 11(arg0)
|
||||
16: 13(int) Load 15(arg1)
|
||||
17: 9(int) ShiftLeftLogical 12 16
|
||||
18: 6(int) Bitcast 17
|
||||
Store 8(result) 18
|
||||
19: 9(int) Load 11(arg0)
|
||||
20: 13(int) Load 15(arg1)
|
||||
21: 9(int) ShiftRightArithmetic 19 20
|
||||
22: 6(int) Bitcast 21
|
||||
Store 8(result) 22
|
||||
23: 13(int) Load 15(arg1)
|
||||
24: 6(int) Load 8(result)
|
||||
25: 6(int) ShiftLeftLogical 24 23
|
||||
Store 8(result) 25
|
||||
26: 13(int) Load 15(arg1)
|
||||
27: 6(int) Load 8(result)
|
||||
28: 6(int) ShiftRightLogical 27 26
|
||||
Store 8(result) 28
|
||||
Return
|
||||
FunctionEnd
|
@ -1,7 +1,7 @@
|
||||
spv.vulkan110.int16.frag
|
||||
// Module Version 10300
|
||||
// Generated by (magic number): 80006
|
||||
// Id's are bound by 525
|
||||
// Id's are bound by 523
|
||||
|
||||
Capability Shader
|
||||
Capability Float16
|
||||
@ -52,48 +52,48 @@ spv.vulkan110.int16.frag
|
||||
Name 220 "i"
|
||||
Name 227 "uv"
|
||||
Name 243 "i64"
|
||||
Name 283 "b"
|
||||
Name 345 "i16v"
|
||||
Name 348 "i16"
|
||||
Name 358 "u16v"
|
||||
Name 360 "u16"
|
||||
Name 430 "i32"
|
||||
Name 433 "i64"
|
||||
Name 436 "i16v4"
|
||||
Name 439 "u32"
|
||||
Name 440 "u16v2"
|
||||
Name 444 "u64"
|
||||
Name 447 "u16v4"
|
||||
Name 459 "bv"
|
||||
Name 520 "Block"
|
||||
MemberName 520(Block) 0 "i16"
|
||||
MemberName 520(Block) 1 "i16v2"
|
||||
MemberName 520(Block) 2 "i16v3"
|
||||
MemberName 520(Block) 3 "i16v4"
|
||||
MemberName 520(Block) 4 "u16"
|
||||
MemberName 520(Block) 5 "u16v2"
|
||||
MemberName 520(Block) 6 "u16v3"
|
||||
MemberName 520(Block) 7 "u16v4"
|
||||
Name 522 "block"
|
||||
Name 523 "si16"
|
||||
Name 524 "su16"
|
||||
Name 281 "b"
|
||||
Name 343 "i16v"
|
||||
Name 346 "i16"
|
||||
Name 356 "u16v"
|
||||
Name 358 "u16"
|
||||
Name 428 "i32"
|
||||
Name 431 "i64"
|
||||
Name 434 "i16v4"
|
||||
Name 437 "u32"
|
||||
Name 438 "u16v2"
|
||||
Name 442 "u64"
|
||||
Name 445 "u16v4"
|
||||
Name 457 "bv"
|
||||
Name 518 "Block"
|
||||
MemberName 518(Block) 0 "i16"
|
||||
MemberName 518(Block) 1 "i16v2"
|
||||
MemberName 518(Block) 2 "i16v3"
|
||||
MemberName 518(Block) 3 "i16v4"
|
||||
MemberName 518(Block) 4 "u16"
|
||||
MemberName 518(Block) 5 "u16v2"
|
||||
MemberName 518(Block) 6 "u16v3"
|
||||
MemberName 518(Block) 7 "u16v4"
|
||||
Name 520 "block"
|
||||
Name 521 "si16"
|
||||
Name 522 "su16"
|
||||
MemberDecorate 24(Uniforms) 0 Offset 0
|
||||
Decorate 24(Uniforms) Block
|
||||
Decorate 26 DescriptorSet 0
|
||||
Decorate 26 Binding 0
|
||||
MemberDecorate 520(Block) 0 Offset 0
|
||||
MemberDecorate 520(Block) 1 Offset 4
|
||||
MemberDecorate 520(Block) 2 Offset 8
|
||||
MemberDecorate 520(Block) 3 Offset 16
|
||||
MemberDecorate 520(Block) 4 Offset 24
|
||||
MemberDecorate 520(Block) 5 Offset 28
|
||||
MemberDecorate 520(Block) 6 Offset 32
|
||||
MemberDecorate 520(Block) 7 Offset 40
|
||||
Decorate 520(Block) Block
|
||||
Decorate 522(block) DescriptorSet 0
|
||||
Decorate 522(block) Binding 1
|
||||
Decorate 523(si16) SpecId 100
|
||||
Decorate 524(su16) SpecId 101
|
||||
MemberDecorate 518(Block) 0 Offset 0
|
||||
MemberDecorate 518(Block) 1 Offset 4
|
||||
MemberDecorate 518(Block) 2 Offset 8
|
||||
MemberDecorate 518(Block) 3 Offset 16
|
||||
MemberDecorate 518(Block) 4 Offset 24
|
||||
MemberDecorate 518(Block) 5 Offset 28
|
||||
MemberDecorate 518(Block) 6 Offset 32
|
||||
MemberDecorate 518(Block) 7 Offset 40
|
||||
Decorate 518(Block) Block
|
||||
Decorate 520(block) DescriptorSet 0
|
||||
Decorate 520(block) Binding 1
|
||||
Decorate 521(si16) SpecId 100
|
||||
Decorate 522(su16) SpecId 101
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
14: TypeInt 16 1
|
||||
@ -168,28 +168,28 @@ spv.vulkan110.int16.frag
|
||||
242: TypePointer Function 71(int)
|
||||
264: 17(int) Constant 1
|
||||
270: 17(int) Constant 2
|
||||
275: TypeVector 27(int) 3
|
||||
282: TypePointer Function 173(bool)
|
||||
284: 17(int) Constant 0
|
||||
298: TypePointer Function 17(int)
|
||||
356: 52(ivec2) ConstantComposite 21 21
|
||||
365: 193(ivec3) ConstantComposite 184 184 184
|
||||
407: 173(bool) ConstantTrue
|
||||
414: 173(bool) ConstantFalse
|
||||
415: 174(bvec2) ConstantComposite 414 414
|
||||
427: TypeVector 173(bool) 3
|
||||
428: 427(bvec3) ConstantComposite 414 414 414
|
||||
434: TypeVector 14(int) 4
|
||||
435: TypePointer Function 434(ivec4)
|
||||
443: TypePointer Function 77(int)
|
||||
445: TypeVector 36(int) 4
|
||||
446: TypePointer Function 445(ivec4)
|
||||
458: TypePointer Function 427(bvec3)
|
||||
520(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4)
|
||||
521: TypePointer Uniform 520(Block)
|
||||
522(block): 521(ptr) Variable Uniform
|
||||
523(si16): 14(int) SpecConstant 4294967286
|
||||
524(su16): 36(int) SpecConstant 20
|
||||
276: TypeVector 27(int) 3
|
||||
280: TypePointer Function 173(bool)
|
||||
282: 17(int) Constant 0
|
||||
296: TypePointer Function 17(int)
|
||||
354: 52(ivec2) ConstantComposite 21 21
|
||||
363: 193(ivec3) ConstantComposite 184 184 184
|
||||
405: 173(bool) ConstantTrue
|
||||
412: 173(bool) ConstantFalse
|
||||
413: 174(bvec2) ConstantComposite 412 412
|
||||
425: TypeVector 173(bool) 3
|
||||
426: 425(bvec3) ConstantComposite 412 412 412
|
||||
432: TypeVector 14(int) 4
|
||||
433: TypePointer Function 432(ivec4)
|
||||
441: TypePointer Function 77(int)
|
||||
443: TypeVector 36(int) 4
|
||||
444: TypePointer Function 443(ivec4)
|
||||
456: TypePointer Function 425(bvec3)
|
||||
518(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 432(ivec4) 36(int) 57(ivec2) 193(ivec3) 443(ivec4)
|
||||
519: TypePointer Uniform 518(Block)
|
||||
520(block): 519(ptr) Variable Uniform
|
||||
521(si16): 14(int) SpecConstant 4294967286
|
||||
522(su16): 36(int) SpecConstant 20
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
Return
|
||||
@ -368,7 +368,7 @@ spv.vulkan110.int16.frag
|
||||
220(i): 219(ptr) Variable Function
|
||||
227(uv): 226(ptr) Variable Function
|
||||
243(i64): 242(ptr) Variable Function
|
||||
283(b): 282(ptr) Variable Function
|
||||
281(b): 280(ptr) Variable Function
|
||||
196: 193(ivec3) Load 195(u16v)
|
||||
198: 197(ivec3) CompositeConstruct 179 179 179
|
||||
199: 193(ivec3) IAdd 196 198
|
||||
@ -457,287 +457,285 @@ spv.vulkan110.int16.frag
|
||||
273: 14(int) ShiftLeftLogical 269 272
|
||||
Store 200(i16) 273
|
||||
274: 193(ivec3) Load 195(u16v)
|
||||
276: 275(ivec3) UConvert 274
|
||||
277: 275(ivec3) Bitcast 276
|
||||
278: 27(int) Load 220(i)
|
||||
279: 275(ivec3) CompositeConstruct 278 278 278
|
||||
280: 275(ivec3) ShiftLeftLogical 277 279
|
||||
281: 225(ivec3) Bitcast 280
|
||||
Store 227(uv) 281
|
||||
285: 37(ptr) AccessChain 195(u16v) 284
|
||||
286: 36(int) Load 285
|
||||
287: 14(int) Load 200(i16)
|
||||
288: 36(int) Bitcast 287
|
||||
289: 173(bool) INotEqual 286 288
|
||||
Store 283(b) 289
|
||||
290: 14(int) Load 200(i16)
|
||||
291: 36(int) Bitcast 290
|
||||
292: 37(ptr) AccessChain 195(u16v) 284
|
||||
293: 36(int) Load 292
|
||||
294: 173(bool) IEqual 291 293
|
||||
Store 283(b) 294
|
||||
295: 37(ptr) AccessChain 195(u16v) 284
|
||||
296: 36(int) Load 295
|
||||
297: 17(int) UConvert 296
|
||||
299: 298(ptr) AccessChain 227(uv) 264
|
||||
300: 17(int) Load 299
|
||||
301: 173(bool) UGreaterThan 297 300
|
||||
Store 283(b) 301
|
||||
302: 14(int) Load 200(i16)
|
||||
303: 27(int) SConvert 302
|
||||
304: 27(int) Load 220(i)
|
||||
305: 173(bool) SLessThan 303 304
|
||||
Store 283(b) 305
|
||||
306: 37(ptr) AccessChain 195(u16v) 264
|
||||
307: 36(int) Load 306
|
||||
308: 17(int) UConvert 307
|
||||
309: 298(ptr) AccessChain 227(uv) 284
|
||||
310: 17(int) Load 309
|
||||
311: 173(bool) UGreaterThanEqual 308 310
|
||||
Store 283(b) 311
|
||||
312: 14(int) Load 200(i16)
|
||||
313: 27(int) SConvert 312
|
||||
314: 27(int) Load 220(i)
|
||||
315: 173(bool) SLessThanEqual 313 314
|
||||
Store 283(b) 315
|
||||
316: 14(int) Load 200(i16)
|
||||
317: 27(int) SConvert 316
|
||||
318: 17(int) Bitcast 317
|
||||
319: 225(ivec3) Load 227(uv)
|
||||
320: 225(ivec3) CompositeConstruct 318 318 318
|
||||
321: 225(ivec3) BitwiseOr 319 320
|
||||
Store 227(uv) 321
|
||||
322: 14(int) Load 200(i16)
|
||||
323: 27(int) SConvert 322
|
||||
324: 27(int) Load 220(i)
|
||||
325: 27(int) BitwiseOr 323 324
|
||||
Store 220(i) 325
|
||||
326: 14(int) Load 200(i16)
|
||||
327: 71(int) SConvert 326
|
||||
328: 71(int) Load 243(i64)
|
||||
329: 71(int) BitwiseAnd 328 327
|
||||
Store 243(i64) 329
|
||||
330: 193(ivec3) Load 195(u16v)
|
||||
331: 225(ivec3) UConvert 330
|
||||
332: 225(ivec3) Load 227(uv)
|
||||
333: 225(ivec3) BitwiseAnd 331 332
|
||||
Store 227(uv) 333
|
||||
334: 14(int) Load 200(i16)
|
||||
335: 27(int) SConvert 334
|
||||
336: 17(int) Bitcast 335
|
||||
337: 225(ivec3) Load 227(uv)
|
||||
338: 225(ivec3) CompositeConstruct 336 336 336
|
||||
339: 225(ivec3) BitwiseXor 337 338
|
||||
Store 227(uv) 339
|
||||
340: 193(ivec3) Load 195(u16v)
|
||||
341: 14(int) Load 200(i16)
|
||||
342: 36(int) Bitcast 341
|
||||
343: 193(ivec3) CompositeConstruct 342 342 342
|
||||
344: 193(ivec3) BitwiseXor 340 343
|
||||
Store 195(u16v) 344
|
||||
275: 27(int) Load 220(i)
|
||||
277: 276(ivec3) CompositeConstruct 275 275 275
|
||||
278: 193(ivec3) ShiftLeftLogical 274 277
|
||||
279: 225(ivec3) UConvert 278
|
||||
Store 227(uv) 279
|
||||
283: 37(ptr) AccessChain 195(u16v) 282
|
||||
284: 36(int) Load 283
|
||||
285: 14(int) Load 200(i16)
|
||||
286: 36(int) Bitcast 285
|
||||
287: 173(bool) INotEqual 284 286
|
||||
Store 281(b) 287
|
||||
288: 14(int) Load 200(i16)
|
||||
289: 36(int) Bitcast 288
|
||||
290: 37(ptr) AccessChain 195(u16v) 282
|
||||
291: 36(int) Load 290
|
||||
292: 173(bool) IEqual 289 291
|
||||
Store 281(b) 292
|
||||
293: 37(ptr) AccessChain 195(u16v) 282
|
||||
294: 36(int) Load 293
|
||||
295: 17(int) UConvert 294
|
||||
297: 296(ptr) AccessChain 227(uv) 264
|
||||
298: 17(int) Load 297
|
||||
299: 173(bool) UGreaterThan 295 298
|
||||
Store 281(b) 299
|
||||
300: 14(int) Load 200(i16)
|
||||
301: 27(int) SConvert 300
|
||||
302: 27(int) Load 220(i)
|
||||
303: 173(bool) SLessThan 301 302
|
||||
Store 281(b) 303
|
||||
304: 37(ptr) AccessChain 195(u16v) 264
|
||||
305: 36(int) Load 304
|
||||
306: 17(int) UConvert 305
|
||||
307: 296(ptr) AccessChain 227(uv) 282
|
||||
308: 17(int) Load 307
|
||||
309: 173(bool) UGreaterThanEqual 306 308
|
||||
Store 281(b) 309
|
||||
310: 14(int) Load 200(i16)
|
||||
311: 27(int) SConvert 310
|
||||
312: 27(int) Load 220(i)
|
||||
313: 173(bool) SLessThanEqual 311 312
|
||||
Store 281(b) 313
|
||||
314: 14(int) Load 200(i16)
|
||||
315: 27(int) SConvert 314
|
||||
316: 17(int) Bitcast 315
|
||||
317: 225(ivec3) Load 227(uv)
|
||||
318: 225(ivec3) CompositeConstruct 316 316 316
|
||||
319: 225(ivec3) BitwiseOr 317 318
|
||||
Store 227(uv) 319
|
||||
320: 14(int) Load 200(i16)
|
||||
321: 27(int) SConvert 320
|
||||
322: 27(int) Load 220(i)
|
||||
323: 27(int) BitwiseOr 321 322
|
||||
Store 220(i) 323
|
||||
324: 14(int) Load 200(i16)
|
||||
325: 71(int) SConvert 324
|
||||
326: 71(int) Load 243(i64)
|
||||
327: 71(int) BitwiseAnd 326 325
|
||||
Store 243(i64) 327
|
||||
328: 193(ivec3) Load 195(u16v)
|
||||
329: 225(ivec3) UConvert 328
|
||||
330: 225(ivec3) Load 227(uv)
|
||||
331: 225(ivec3) BitwiseAnd 329 330
|
||||
Store 227(uv) 331
|
||||
332: 14(int) Load 200(i16)
|
||||
333: 27(int) SConvert 332
|
||||
334: 17(int) Bitcast 333
|
||||
335: 225(ivec3) Load 227(uv)
|
||||
336: 225(ivec3) CompositeConstruct 334 334 334
|
||||
337: 225(ivec3) BitwiseXor 335 336
|
||||
Store 227(uv) 337
|
||||
338: 193(ivec3) Load 195(u16v)
|
||||
339: 14(int) Load 200(i16)
|
||||
340: 36(int) Bitcast 339
|
||||
341: 193(ivec3) CompositeConstruct 340 340 340
|
||||
342: 193(ivec3) BitwiseXor 338 341
|
||||
Store 195(u16v) 342
|
||||
Return
|
||||
FunctionEnd
|
||||
12(builtinFuncs(): 2 Function None 3
|
||||
13: Label
|
||||
345(i16v): 53(ptr) Variable Function
|
||||
348(i16): 15(ptr) Variable Function
|
||||
358(u16v): 194(ptr) Variable Function
|
||||
360(u16): 37(ptr) Variable Function
|
||||
430(i32): 219(ptr) Variable Function
|
||||
433(i64): 242(ptr) Variable Function
|
||||
436(i16v4): 435(ptr) Variable Function
|
||||
439(u32): 298(ptr) Variable Function
|
||||
440(u16v2): 58(ptr) Variable Function
|
||||
444(u64): 443(ptr) Variable Function
|
||||
447(u16v4): 446(ptr) Variable Function
|
||||
459(bv): 458(ptr) Variable Function
|
||||
346: 52(ivec2) Load 345(i16v)
|
||||
347: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346
|
||||
Store 345(i16v) 347
|
||||
349: 14(int) Load 348(i16)
|
||||
350: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349
|
||||
Store 348(i16) 350
|
||||
351: 52(ivec2) Load 345(i16v)
|
||||
352: 14(int) Load 348(i16)
|
||||
353: 52(ivec2) CompositeConstruct 352 352
|
||||
354: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353
|
||||
Store 345(i16v) 354
|
||||
355: 52(ivec2) Load 345(i16v)
|
||||
357: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356
|
||||
Store 345(i16v) 357
|
||||
359: 193(ivec3) Load 358(u16v)
|
||||
361: 36(int) Load 360(u16)
|
||||
362: 193(ivec3) CompositeConstruct 361 361 361
|
||||
363: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362
|
||||
Store 358(u16v) 363
|
||||
364: 193(ivec3) Load 358(u16v)
|
||||
366: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365
|
||||
Store 358(u16v) 366
|
||||
367: 52(ivec2) Load 345(i16v)
|
||||
368: 14(int) Load 348(i16)
|
||||
369: 52(ivec2) CompositeConstruct 368 368
|
||||
370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369
|
||||
Store 345(i16v) 370
|
||||
371: 52(ivec2) Load 345(i16v)
|
||||
372: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356
|
||||
Store 345(i16v) 372
|
||||
373: 193(ivec3) Load 358(u16v)
|
||||
374: 36(int) Load 360(u16)
|
||||
375: 193(ivec3) CompositeConstruct 374 374 374
|
||||
376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375
|
||||
Store 358(u16v) 376
|
||||
377: 193(ivec3) Load 358(u16v)
|
||||
378: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365
|
||||
Store 358(u16v) 378
|
||||
379: 52(ivec2) Load 345(i16v)
|
||||
380: 14(int) Load 348(i16)
|
||||
381: 14(int) SNegate 380
|
||||
382: 14(int) Load 348(i16)
|
||||
383: 52(ivec2) CompositeConstruct 381 381
|
||||
384: 52(ivec2) CompositeConstruct 382 382
|
||||
385: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384
|
||||
Store 345(i16v) 385
|
||||
386: 52(ivec2) Load 345(i16v)
|
||||
387: 52(ivec2) Load 345(i16v)
|
||||
388: 52(ivec2) SNegate 387
|
||||
389: 52(ivec2) Load 345(i16v)
|
||||
390: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389
|
||||
Store 345(i16v) 390
|
||||
391: 193(ivec3) Load 358(u16v)
|
||||
392: 36(int) Load 360(u16)
|
||||
393: 36(int) SNegate 392
|
||||
394: 36(int) Load 360(u16)
|
||||
395: 193(ivec3) CompositeConstruct 393 393 393
|
||||
396: 193(ivec3) CompositeConstruct 394 394 394
|
||||
397: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396
|
||||
Store 358(u16v) 397
|
||||
398: 193(ivec3) Load 358(u16v)
|
||||
399: 193(ivec3) Load 358(u16v)
|
||||
400: 193(ivec3) SNegate 399
|
||||
401: 193(ivec3) Load 358(u16v)
|
||||
402: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401
|
||||
Store 358(u16v) 402
|
||||
403: 15(ptr) AccessChain 345(i16v) 284
|
||||
343(i16v): 53(ptr) Variable Function
|
||||
346(i16): 15(ptr) Variable Function
|
||||
356(u16v): 194(ptr) Variable Function
|
||||
358(u16): 37(ptr) Variable Function
|
||||
428(i32): 219(ptr) Variable Function
|
||||
431(i64): 242(ptr) Variable Function
|
||||
434(i16v4): 433(ptr) Variable Function
|
||||
437(u32): 296(ptr) Variable Function
|
||||
438(u16v2): 58(ptr) Variable Function
|
||||
442(u64): 441(ptr) Variable Function
|
||||
445(u16v4): 444(ptr) Variable Function
|
||||
457(bv): 456(ptr) Variable Function
|
||||
344: 52(ivec2) Load 343(i16v)
|
||||
345: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344
|
||||
Store 343(i16v) 345
|
||||
347: 14(int) Load 346(i16)
|
||||
348: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 347
|
||||
Store 346(i16) 348
|
||||
349: 52(ivec2) Load 343(i16v)
|
||||
350: 14(int) Load 346(i16)
|
||||
351: 52(ivec2) CompositeConstruct 350 350
|
||||
352: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351
|
||||
Store 343(i16v) 352
|
||||
353: 52(ivec2) Load 343(i16v)
|
||||
355: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354
|
||||
Store 343(i16v) 355
|
||||
357: 193(ivec3) Load 356(u16v)
|
||||
359: 36(int) Load 358(u16)
|
||||
360: 193(ivec3) CompositeConstruct 359 359 359
|
||||
361: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360
|
||||
Store 356(u16v) 361
|
||||
362: 193(ivec3) Load 356(u16v)
|
||||
364: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363
|
||||
Store 356(u16v) 364
|
||||
365: 52(ivec2) Load 343(i16v)
|
||||
366: 14(int) Load 346(i16)
|
||||
367: 52(ivec2) CompositeConstruct 366 366
|
||||
368: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367
|
||||
Store 343(i16v) 368
|
||||
369: 52(ivec2) Load 343(i16v)
|
||||
370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354
|
||||
Store 343(i16v) 370
|
||||
371: 193(ivec3) Load 356(u16v)
|
||||
372: 36(int) Load 358(u16)
|
||||
373: 193(ivec3) CompositeConstruct 372 372 372
|
||||
374: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373
|
||||
Store 356(u16v) 374
|
||||
375: 193(ivec3) Load 356(u16v)
|
||||
376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363
|
||||
Store 356(u16v) 376
|
||||
377: 52(ivec2) Load 343(i16v)
|
||||
378: 14(int) Load 346(i16)
|
||||
379: 14(int) SNegate 378
|
||||
380: 14(int) Load 346(i16)
|
||||
381: 52(ivec2) CompositeConstruct 379 379
|
||||
382: 52(ivec2) CompositeConstruct 380 380
|
||||
383: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382
|
||||
Store 343(i16v) 383
|
||||
384: 52(ivec2) Load 343(i16v)
|
||||
385: 52(ivec2) Load 343(i16v)
|
||||
386: 52(ivec2) SNegate 385
|
||||
387: 52(ivec2) Load 343(i16v)
|
||||
388: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387
|
||||
Store 343(i16v) 388
|
||||
389: 193(ivec3) Load 356(u16v)
|
||||
390: 36(int) Load 358(u16)
|
||||
391: 36(int) SNegate 390
|
||||
392: 36(int) Load 358(u16)
|
||||
393: 193(ivec3) CompositeConstruct 391 391 391
|
||||
394: 193(ivec3) CompositeConstruct 392 392 392
|
||||
395: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394
|
||||
Store 356(u16v) 395
|
||||
396: 193(ivec3) Load 356(u16v)
|
||||
397: 193(ivec3) Load 356(u16v)
|
||||
398: 193(ivec3) SNegate 397
|
||||
399: 193(ivec3) Load 356(u16v)
|
||||
400: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399
|
||||
Store 356(u16v) 400
|
||||
401: 15(ptr) AccessChain 343(i16v) 282
|
||||
402: 14(int) Load 401
|
||||
403: 15(ptr) AccessChain 343(i16v) 264
|
||||
404: 14(int) Load 403
|
||||
405: 15(ptr) AccessChain 345(i16v) 264
|
||||
406: 14(int) Load 405
|
||||
408: 14(int) Select 407 406 404
|
||||
Store 348(i16) 408
|
||||
409: 14(int) Load 348(i16)
|
||||
410: 52(ivec2) CompositeConstruct 409 409
|
||||
411: 14(int) Load 348(i16)
|
||||
412: 14(int) SNegate 411
|
||||
413: 52(ivec2) CompositeConstruct 412 412
|
||||
416: 52(ivec2) Select 415 413 410
|
||||
Store 345(i16v) 416
|
||||
417: 37(ptr) AccessChain 358(u16v) 284
|
||||
406: 14(int) Select 405 404 402
|
||||
Store 346(i16) 406
|
||||
407: 14(int) Load 346(i16)
|
||||
408: 52(ivec2) CompositeConstruct 407 407
|
||||
409: 14(int) Load 346(i16)
|
||||
410: 14(int) SNegate 409
|
||||
411: 52(ivec2) CompositeConstruct 410 410
|
||||
414: 52(ivec2) Select 413 411 408
|
||||
Store 343(i16v) 414
|
||||
415: 37(ptr) AccessChain 356(u16v) 282
|
||||
416: 36(int) Load 415
|
||||
417: 37(ptr) AccessChain 356(u16v) 264
|
||||
418: 36(int) Load 417
|
||||
419: 37(ptr) AccessChain 358(u16v) 264
|
||||
420: 36(int) Load 419
|
||||
421: 36(int) Select 407 420 418
|
||||
Store 360(u16) 421
|
||||
422: 36(int) Load 360(u16)
|
||||
423: 193(ivec3) CompositeConstruct 422 422 422
|
||||
424: 36(int) Load 360(u16)
|
||||
425: 36(int) SNegate 424
|
||||
426: 193(ivec3) CompositeConstruct 425 425 425
|
||||
429: 193(ivec3) Select 428 426 423
|
||||
Store 358(u16v) 429
|
||||
431: 52(ivec2) Load 345(i16v)
|
||||
432: 27(int) Bitcast 431
|
||||
Store 430(i32) 432
|
||||
437: 434(ivec4) Load 436(i16v4)
|
||||
438: 71(int) Bitcast 437
|
||||
Store 433(i64) 438
|
||||
441: 57(ivec2) Load 440(u16v2)
|
||||
442: 17(int) Bitcast 441
|
||||
Store 439(u32) 442
|
||||
448: 445(ivec4) Load 447(u16v4)
|
||||
449: 77(int) Bitcast 448
|
||||
Store 444(u64) 449
|
||||
450: 27(int) Load 430(i32)
|
||||
451: 52(ivec2) Bitcast 450
|
||||
Store 345(i16v) 451
|
||||
452: 71(int) Load 433(i64)
|
||||
453: 434(ivec4) Bitcast 452
|
||||
Store 436(i16v4) 453
|
||||
454: 17(int) Load 439(u32)
|
||||
455: 57(ivec2) Bitcast 454
|
||||
Store 440(u16v2) 455
|
||||
456: 77(int) Load 444(u64)
|
||||
457: 445(ivec4) Bitcast 456
|
||||
Store 447(u16v4) 457
|
||||
460: 193(ivec3) Load 358(u16v)
|
||||
461: 36(int) Load 360(u16)
|
||||
462: 193(ivec3) CompositeConstruct 461 461 461
|
||||
463: 427(bvec3) ULessThan 460 462
|
||||
Store 459(bv) 463
|
||||
464: 52(ivec2) Load 345(i16v)
|
||||
465: 14(int) Load 348(i16)
|
||||
466: 52(ivec2) CompositeConstruct 465 465
|
||||
467: 174(bvec2) SLessThan 464 466
|
||||
468: 427(bvec3) Load 459(bv)
|
||||
469: 427(bvec3) VectorShuffle 468 467 3 4 2
|
||||
Store 459(bv) 469
|
||||
470: 193(ivec3) Load 358(u16v)
|
||||
471: 36(int) Load 360(u16)
|
||||
472: 193(ivec3) CompositeConstruct 471 471 471
|
||||
473: 427(bvec3) ULessThanEqual 470 472
|
||||
Store 459(bv) 473
|
||||
474: 52(ivec2) Load 345(i16v)
|
||||
475: 14(int) Load 348(i16)
|
||||
476: 52(ivec2) CompositeConstruct 475 475
|
||||
477: 174(bvec2) SLessThanEqual 474 476
|
||||
478: 427(bvec3) Load 459(bv)
|
||||
479: 427(bvec3) VectorShuffle 478 477 3 4 2
|
||||
Store 459(bv) 479
|
||||
480: 193(ivec3) Load 358(u16v)
|
||||
481: 36(int) Load 360(u16)
|
||||
482: 193(ivec3) CompositeConstruct 481 481 481
|
||||
483: 427(bvec3) UGreaterThan 480 482
|
||||
Store 459(bv) 483
|
||||
484: 52(ivec2) Load 345(i16v)
|
||||
485: 14(int) Load 348(i16)
|
||||
486: 52(ivec2) CompositeConstruct 485 485
|
||||
487: 174(bvec2) SGreaterThan 484 486
|
||||
488: 427(bvec3) Load 459(bv)
|
||||
489: 427(bvec3) VectorShuffle 488 487 3 4 2
|
||||
Store 459(bv) 489
|
||||
490: 193(ivec3) Load 358(u16v)
|
||||
491: 36(int) Load 360(u16)
|
||||
492: 193(ivec3) CompositeConstruct 491 491 491
|
||||
493: 427(bvec3) UGreaterThanEqual 490 492
|
||||
Store 459(bv) 493
|
||||
494: 52(ivec2) Load 345(i16v)
|
||||
495: 14(int) Load 348(i16)
|
||||
496: 52(ivec2) CompositeConstruct 495 495
|
||||
497: 174(bvec2) SGreaterThanEqual 494 496
|
||||
498: 427(bvec3) Load 459(bv)
|
||||
499: 427(bvec3) VectorShuffle 498 497 3 4 2
|
||||
Store 459(bv) 499
|
||||
500: 193(ivec3) Load 358(u16v)
|
||||
501: 36(int) Load 360(u16)
|
||||
502: 193(ivec3) CompositeConstruct 501 501 501
|
||||
503: 427(bvec3) IEqual 500 502
|
||||
Store 459(bv) 503
|
||||
504: 52(ivec2) Load 345(i16v)
|
||||
505: 14(int) Load 348(i16)
|
||||
506: 52(ivec2) CompositeConstruct 505 505
|
||||
507: 174(bvec2) IEqual 504 506
|
||||
508: 427(bvec3) Load 459(bv)
|
||||
509: 427(bvec3) VectorShuffle 508 507 3 4 2
|
||||
Store 459(bv) 509
|
||||
510: 193(ivec3) Load 358(u16v)
|
||||
511: 36(int) Load 360(u16)
|
||||
512: 193(ivec3) CompositeConstruct 511 511 511
|
||||
513: 427(bvec3) INotEqual 510 512
|
||||
Store 459(bv) 513
|
||||
514: 52(ivec2) Load 345(i16v)
|
||||
515: 14(int) Load 348(i16)
|
||||
516: 52(ivec2) CompositeConstruct 515 515
|
||||
517: 174(bvec2) INotEqual 514 516
|
||||
518: 427(bvec3) Load 459(bv)
|
||||
519: 427(bvec3) VectorShuffle 518 517 3 4 2
|
||||
Store 459(bv) 519
|
||||
419: 36(int) Select 405 418 416
|
||||
Store 358(u16) 419
|
||||
420: 36(int) Load 358(u16)
|
||||
421: 193(ivec3) CompositeConstruct 420 420 420
|
||||
422: 36(int) Load 358(u16)
|
||||
423: 36(int) SNegate 422
|
||||
424: 193(ivec3) CompositeConstruct 423 423 423
|
||||
427: 193(ivec3) Select 426 424 421
|
||||
Store 356(u16v) 427
|
||||
429: 52(ivec2) Load 343(i16v)
|
||||
430: 27(int) Bitcast 429
|
||||
Store 428(i32) 430
|
||||
435: 432(ivec4) Load 434(i16v4)
|
||||
436: 71(int) Bitcast 435
|
||||
Store 431(i64) 436
|
||||
439: 57(ivec2) Load 438(u16v2)
|
||||
440: 17(int) Bitcast 439
|
||||
Store 437(u32) 440
|
||||
446: 443(ivec4) Load 445(u16v4)
|
||||
447: 77(int) Bitcast 446
|
||||
Store 442(u64) 447
|
||||
448: 27(int) Load 428(i32)
|
||||
449: 52(ivec2) Bitcast 448
|
||||
Store 343(i16v) 449
|
||||
450: 71(int) Load 431(i64)
|
||||
451: 432(ivec4) Bitcast 450
|
||||
Store 434(i16v4) 451
|
||||
452: 17(int) Load 437(u32)
|
||||
453: 57(ivec2) Bitcast 452
|
||||
Store 438(u16v2) 453
|
||||
454: 77(int) Load 442(u64)
|
||||
455: 443(ivec4) Bitcast 454
|
||||
Store 445(u16v4) 455
|
||||
458: 193(ivec3) Load 356(u16v)
|
||||
459: 36(int) Load 358(u16)
|
||||
460: 193(ivec3) CompositeConstruct 459 459 459
|
||||
461: 425(bvec3) ULessThan 458 460
|
||||
Store 457(bv) 461
|
||||
462: 52(ivec2) Load 343(i16v)
|
||||
463: 14(int) Load 346(i16)
|
||||
464: 52(ivec2) CompositeConstruct 463 463
|
||||
465: 174(bvec2) SLessThan 462 464
|
||||
466: 425(bvec3) Load 457(bv)
|
||||
467: 425(bvec3) VectorShuffle 466 465 3 4 2
|
||||
Store 457(bv) 467
|
||||
468: 193(ivec3) Load 356(u16v)
|
||||
469: 36(int) Load 358(u16)
|
||||
470: 193(ivec3) CompositeConstruct 469 469 469
|
||||
471: 425(bvec3) ULessThanEqual 468 470
|
||||
Store 457(bv) 471
|
||||
472: 52(ivec2) Load 343(i16v)
|
||||
473: 14(int) Load 346(i16)
|
||||
474: 52(ivec2) CompositeConstruct 473 473
|
||||
475: 174(bvec2) SLessThanEqual 472 474
|
||||
476: 425(bvec3) Load 457(bv)
|
||||
477: 425(bvec3) VectorShuffle 476 475 3 4 2
|
||||
Store 457(bv) 477
|
||||
478: 193(ivec3) Load 356(u16v)
|
||||
479: 36(int) Load 358(u16)
|
||||
480: 193(ivec3) CompositeConstruct 479 479 479
|
||||
481: 425(bvec3) UGreaterThan 478 480
|
||||
Store 457(bv) 481
|
||||
482: 52(ivec2) Load 343(i16v)
|
||||
483: 14(int) Load 346(i16)
|
||||
484: 52(ivec2) CompositeConstruct 483 483
|
||||
485: 174(bvec2) SGreaterThan 482 484
|
||||
486: 425(bvec3) Load 457(bv)
|
||||
487: 425(bvec3) VectorShuffle 486 485 3 4 2
|
||||
Store 457(bv) 487
|
||||
488: 193(ivec3) Load 356(u16v)
|
||||
489: 36(int) Load 358(u16)
|
||||
490: 193(ivec3) CompositeConstruct 489 489 489
|
||||
491: 425(bvec3) UGreaterThanEqual 488 490
|
||||
Store 457(bv) 491
|
||||
492: 52(ivec2) Load 343(i16v)
|
||||
493: 14(int) Load 346(i16)
|
||||
494: 52(ivec2) CompositeConstruct 493 493
|
||||
495: 174(bvec2) SGreaterThanEqual 492 494
|
||||
496: 425(bvec3) Load 457(bv)
|
||||
497: 425(bvec3) VectorShuffle 496 495 3 4 2
|
||||
Store 457(bv) 497
|
||||
498: 193(ivec3) Load 356(u16v)
|
||||
499: 36(int) Load 358(u16)
|
||||
500: 193(ivec3) CompositeConstruct 499 499 499
|
||||
501: 425(bvec3) IEqual 498 500
|
||||
Store 457(bv) 501
|
||||
502: 52(ivec2) Load 343(i16v)
|
||||
503: 14(int) Load 346(i16)
|
||||
504: 52(ivec2) CompositeConstruct 503 503
|
||||
505: 174(bvec2) IEqual 502 504
|
||||
506: 425(bvec3) Load 457(bv)
|
||||
507: 425(bvec3) VectorShuffle 506 505 3 4 2
|
||||
Store 457(bv) 507
|
||||
508: 193(ivec3) Load 356(u16v)
|
||||
509: 36(int) Load 358(u16)
|
||||
510: 193(ivec3) CompositeConstruct 509 509 509
|
||||
511: 425(bvec3) INotEqual 508 510
|
||||
Store 457(bv) 511
|
||||
512: 52(ivec2) Load 343(i16v)
|
||||
513: 14(int) Load 346(i16)
|
||||
514: 52(ivec2) CompositeConstruct 513 513
|
||||
515: 174(bvec2) INotEqual 512 514
|
||||
516: 425(bvec3) Load 457(bv)
|
||||
517: 425(bvec3) VectorShuffle 516 515 3 4 2
|
||||
Store 457(bv) 517
|
||||
Return
|
||||
FunctionEnd
|
||||
|
15
3rdparty/glslang/Test/nvShaderNoperspectiveInterpolation.frag
vendored
Normal file
15
3rdparty/glslang/Test/nvShaderNoperspectiveInterpolation.frag
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
#version 300 es
|
||||
|
||||
precision mediump float;
|
||||
|
||||
noperspective in vec4 bad; // ERROR
|
||||
|
||||
#extension GL_NV_shader_noperspective_interpolation : enable
|
||||
|
||||
noperspective in vec4 color;
|
||||
|
||||
out vec4 fragColor;
|
||||
|
||||
void main() {
|
||||
fragColor = color;
|
||||
}
|
7
3rdparty/glslang/Test/runtests
vendored
7
3rdparty/glslang/Test/runtests
vendored
@ -201,6 +201,13 @@ diff -b $BASEDIR/hlsl.y-negate-2.vert.out $TARGETDIR/hlsl.y-negate-2.vert.out ||
|
||||
$EXE -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > $TARGETDIR/hlsl.y-negate-3.vert.out
|
||||
diff -b $BASEDIR/hlsl.y-negate-3.vert.out $TARGETDIR/hlsl.y-negate-3.vert.out || HASERROR=1
|
||||
|
||||
#
|
||||
# Testing hlsl_functionality1
|
||||
#
|
||||
$EXE -H -e main -D -Od -fhlsl_functionality1 hlsl.structbuffer.incdec.frag > \
|
||||
$TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out
|
||||
diff -b $BASEDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out || HASERROR=1
|
||||
|
||||
#
|
||||
# Final checking
|
||||
#
|
||||
|
2
3rdparty/glslang/Test/spv.int64.frag
vendored
2
3rdparty/glslang/Test/spv.int64.frag
vendored
@ -116,6 +116,8 @@ void operators()
|
||||
i64 = i64 % i;
|
||||
|
||||
// Shift
|
||||
u64v = u64v << i;
|
||||
i64 = i64 >> uv.y;
|
||||
u64v <<= i;
|
||||
i64 >>= uv.y;
|
||||
|
||||
|
15
3rdparty/glslang/Test/spv.rankShift.comp
vendored
Normal file
15
3rdparty/glslang/Test/spv.rankShift.comp
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
#version 450
|
||||
#extension GL_ARB_gpu_shader_int64 : require
|
||||
|
||||
layout(local_size_x = 54) in;
|
||||
|
||||
layout(location=4) uniform int64_t arg0;
|
||||
layout(location=5) uniform uint arg1;
|
||||
|
||||
void main()
|
||||
{
|
||||
uint64_t result = arg0 << arg1;
|
||||
result = arg0 >> arg1;
|
||||
result <<= arg1;
|
||||
result >>= arg1;
|
||||
}
|
34
3rdparty/glslang/glslang/Include/Common.h
vendored
34
3rdparty/glslang/glslang/Include/Common.h
vendored
@ -37,20 +37,8 @@
|
||||
#ifndef _COMMON_INCLUDED_
|
||||
#define _COMMON_INCLUDED_
|
||||
|
||||
#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API
|
||||
#include <basetsd.h>
|
||||
#define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args))
|
||||
#elif defined (solaris)
|
||||
#define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
|
||||
#include <sys/int_types.h>
|
||||
#define UINT_PTR uintptr_t
|
||||
#else
|
||||
#define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
|
||||
#include <stdint.h>
|
||||
#define UINT_PTR uintptr_t
|
||||
#endif
|
||||
|
||||
#if defined(__ANDROID__) || (defined(_MSC_VER) && _MSC_VER < 1700)
|
||||
#if defined(__ANDROID__) || _MSC_VER < 1700
|
||||
#include <sstream>
|
||||
namespace std {
|
||||
template<typename T>
|
||||
@ -62,6 +50,22 @@ std::string to_string(const T& val) {
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API
|
||||
#include <basetsd.h>
|
||||
#ifndef snprintf
|
||||
#define snprintf sprintf_s
|
||||
#endif
|
||||
#define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args))
|
||||
#elif defined (solaris)
|
||||
#define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
|
||||
#include <sys/int_types.h>
|
||||
#define UINT_PTR uintptr_t
|
||||
#else
|
||||
#define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args))
|
||||
#include <stdint.h>
|
||||
#define UINT_PTR uintptr_t
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER < 1800
|
||||
inline long long int strtoll (const char* str, char** endptr, int base)
|
||||
{
|
||||
@ -99,10 +103,6 @@ inline long long int atoll (const char* str)
|
||||
#include <cstdio>
|
||||
#include <cassert>
|
||||
|
||||
#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API
|
||||
#define snprintf sprintf_s
|
||||
#endif
|
||||
|
||||
#include "PoolAlloc.h"
|
||||
|
||||
//
|
||||
|
2
3rdparty/glslang/glslang/Include/revision.h
vendored
2
3rdparty/glslang/glslang/Include/revision.h
vendored
@ -1,3 +1,3 @@
|
||||
// This header is generated by the make-revision script.
|
||||
|
||||
#define GLSLANG_PATCH_LEVEL 2604
|
||||
#define GLSLANG_PATCH_LEVEL 2629
|
||||
|
@ -475,7 +475,7 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const
|
||||
|
||||
// This is 'mechanism' here, it does any conversion told.
|
||||
// It is about basic type, not about shape.
|
||||
// The policy comes from the shader or the above code.
|
||||
// The policy comes from the shader or the calling code.
|
||||
TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const
|
||||
{
|
||||
//
|
||||
@ -488,44 +488,44 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
||||
switch (convertTo) {
|
||||
case EbtDouble:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToDouble; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToDouble; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToDouble; break;
|
||||
case EbtUint16:newOp = EOpConvUint16ToDouble;break;
|
||||
case EbtInt: newOp = EOpConvIntToDouble; break;
|
||||
case EbtUint: newOp = EOpConvUintToDouble; break;
|
||||
case EbtBool: newOp = EOpConvBoolToDouble; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToDouble; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToDouble; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToDouble; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToDouble; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToDouble; break;
|
||||
case EbtInt: newOp = EOpConvIntToDouble; break;
|
||||
case EbtUint: newOp = EOpConvUintToDouble; break;
|
||||
case EbtBool: newOp = EOpConvBoolToDouble; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToDouble; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToDouble; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToDouble; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToDouble; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToDouble; break;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
case EbtFloat:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToFloat; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToFloat; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToFloat; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToFloat; break;
|
||||
case EbtInt: newOp = EOpConvIntToFloat; break;
|
||||
case EbtUint: newOp = EOpConvUintToFloat; break;
|
||||
case EbtBool: newOp = EOpConvBoolToFloat; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToFloat; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToFloat; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToFloat; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToFloat; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToFloat; break;
|
||||
case EbtInt: newOp = EOpConvIntToFloat; break;
|
||||
case EbtUint: newOp = EOpConvUintToFloat; break;
|
||||
case EbtBool: newOp = EOpConvBoolToFloat; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToFloat; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToFloat; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToFloat; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToFloat; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToFloat; break;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
case EbtFloat16:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToFloat16; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToFloat16; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToFloat16; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToFloat16; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToFloat16; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToFloat16; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToFloat16; break;
|
||||
case EbtInt: newOp = EOpConvIntToFloat16; break;
|
||||
case EbtUint: newOp = EOpConvUintToFloat16; break;
|
||||
case EbtBool: newOp = EOpConvBoolToFloat16; break;
|
||||
@ -539,33 +539,33 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
||||
break;
|
||||
case EbtBool:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToBool; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToBool; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToBool; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToBool; break;
|
||||
case EbtInt: newOp = EOpConvIntToBool; break;
|
||||
case EbtUint: newOp = EOpConvUintToBool; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToBool; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToBool; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToBool; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToBool; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToBool; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToBool; break;
|
||||
case EbtInt: newOp = EOpConvIntToBool; break;
|
||||
case EbtUint: newOp = EOpConvUintToBool; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToBool; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToBool; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToBool; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToBool; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToBool; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToBool; break;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
case EbtInt8:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtUint8: newOp = EOpConvUint8ToInt8; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToInt8; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToInt8; break;
|
||||
case EbtInt: newOp = EOpConvIntToInt8; break;
|
||||
case EbtUint: newOp = EOpConvUintToInt8; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToInt8; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToInt8; break;
|
||||
case EbtBool: newOp = EOpConvBoolToInt8; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToInt8; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToInt8; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToInt8; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToInt8; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToInt8; break;
|
||||
case EbtInt: newOp = EOpConvIntToInt8; break;
|
||||
case EbtUint: newOp = EOpConvUintToInt8; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToInt8; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToInt8; break;
|
||||
case EbtBool: newOp = EOpConvBoolToInt8; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToInt8; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToInt8; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToInt8; break;
|
||||
default:
|
||||
return nullptr;
|
||||
@ -573,16 +573,16 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
||||
break;
|
||||
case EbtUint8:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToUint8; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToUint8; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToUint8; break;
|
||||
case EbtInt: newOp = EOpConvIntToUint8; break;
|
||||
case EbtUint: newOp = EOpConvUintToUint8; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToUint8; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToUint8; break;
|
||||
case EbtBool: newOp = EOpConvBoolToUint8; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToUint8; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToUint8; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToUint8; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToUint8; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToUint8; break;
|
||||
case EbtInt: newOp = EOpConvIntToUint8; break;
|
||||
case EbtUint: newOp = EOpConvUintToUint8; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToUint8; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToUint8; break;
|
||||
case EbtBool: newOp = EOpConvBoolToUint8; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToUint8; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToUint8; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToUint8; break;
|
||||
default:
|
||||
return nullptr;
|
||||
@ -591,16 +591,16 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
||||
|
||||
case EbtInt16:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtUint8: newOp = EOpConvUint8ToInt16; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToInt16; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToInt16; break;
|
||||
case EbtInt: newOp = EOpConvIntToInt16; break;
|
||||
case EbtUint: newOp = EOpConvUintToInt16; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToInt16; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToInt16; break;
|
||||
case EbtBool: newOp = EOpConvBoolToInt16; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToInt16; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToInt16; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToInt16; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToInt16; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToInt16; break;
|
||||
case EbtInt: newOp = EOpConvIntToInt16; break;
|
||||
case EbtUint: newOp = EOpConvUintToInt16; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToInt16; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToInt16; break;
|
||||
case EbtBool: newOp = EOpConvBoolToInt16; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToInt16; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToInt16; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToInt16; break;
|
||||
default:
|
||||
return nullptr;
|
||||
@ -608,16 +608,16 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
||||
break;
|
||||
case EbtUint16:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToUint16; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToUint16; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToUint16; break;
|
||||
case EbtInt: newOp = EOpConvIntToUint16; break;
|
||||
case EbtUint: newOp = EOpConvUintToUint16; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToUint16; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToUint16; break;
|
||||
case EbtBool: newOp = EOpConvBoolToUint16; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToUint16; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToUint16; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToUint16; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToUint16; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToUint16; break;
|
||||
case EbtInt: newOp = EOpConvIntToUint16; break;
|
||||
case EbtUint: newOp = EOpConvUintToUint16; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToUint16; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToUint16; break;
|
||||
case EbtBool: newOp = EOpConvBoolToUint16; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToUint16; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToUint16; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToUint16; break;
|
||||
default:
|
||||
return nullptr;
|
||||
@ -626,68 +626,68 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
||||
|
||||
case EbtInt:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToInt; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToInt; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToInt; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToInt; break;
|
||||
case EbtUint: newOp = EOpConvUintToInt; break;
|
||||
case EbtBool: newOp = EOpConvBoolToInt; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToInt; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToInt; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToInt; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToInt; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToInt; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToInt; break;
|
||||
case EbtUint: newOp = EOpConvUintToInt; break;
|
||||
case EbtBool: newOp = EOpConvBoolToInt; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToInt; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToInt; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToInt; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToInt; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToInt; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToInt; break;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
case EbtUint:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToUint; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToUint; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToUint; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToUint; break;
|
||||
case EbtInt: newOp = EOpConvIntToUint; break;
|
||||
case EbtBool: newOp = EOpConvBoolToUint; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToUint; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToUint; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToUint; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToUint; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToUint; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToUint; break;
|
||||
case EbtInt: newOp = EOpConvIntToUint; break;
|
||||
case EbtBool: newOp = EOpConvBoolToUint; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToUint; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToUint; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToUint; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToUint; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToUint; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToUint; break;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
case EbtInt64:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToInt64; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToInt64; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToInt64; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToInt64; break;
|
||||
case EbtInt: newOp = EOpConvIntToInt64; break;
|
||||
case EbtUint: newOp = EOpConvUintToInt64; break;
|
||||
case EbtBool: newOp = EOpConvBoolToInt64; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToInt64; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToInt64; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToInt64; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToInt64; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToInt64; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToInt64; break;
|
||||
case EbtInt: newOp = EOpConvIntToInt64; break;
|
||||
case EbtUint: newOp = EOpConvUintToInt64; break;
|
||||
case EbtBool: newOp = EOpConvBoolToInt64; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToInt64; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToInt64; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToInt64; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToInt64; break;
|
||||
case EbtUint64: newOp = EOpConvUint64ToInt64; break;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
case EbtUint64:
|
||||
switch (node->getBasicType()) {
|
||||
case EbtInt8: newOp = EOpConvInt8ToUint64; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToUint64; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToUint64; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToUint64; break;
|
||||
case EbtInt: newOp = EOpConvIntToUint64; break;
|
||||
case EbtUint: newOp = EOpConvUintToUint64; break;
|
||||
case EbtBool: newOp = EOpConvBoolToUint64; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToUint64; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToUint64; break;
|
||||
case EbtInt8: newOp = EOpConvInt8ToUint64; break;
|
||||
case EbtUint8: newOp = EOpConvUint8ToUint64; break;
|
||||
case EbtInt16: newOp = EOpConvInt16ToUint64; break;
|
||||
case EbtUint16: newOp = EOpConvUint16ToUint64; break;
|
||||
case EbtInt: newOp = EOpConvIntToUint64; break;
|
||||
case EbtUint: newOp = EOpConvUintToUint64; break;
|
||||
case EbtBool: newOp = EOpConvBoolToUint64; break;
|
||||
case EbtFloat: newOp = EOpConvFloatToUint64; break;
|
||||
case EbtDouble: newOp = EOpConvDoubleToUint64; break;
|
||||
case EbtFloat16: newOp = EOpConvFloat16ToUint64; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToUint64; break;
|
||||
case EbtInt64: newOp = EOpConvInt64ToUint64; break;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
@ -714,30 +714,36 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped
|
||||
return newNode;
|
||||
}
|
||||
|
||||
// For converting a pair of operands to a binary operation to compatible
|
||||
// types with each other, relative to the operation in 'op'.
|
||||
// This does not cover assignment operations, which is asymmetric in that the
|
||||
// left type is not changeable.
|
||||
// See addConversion(op, type, node) for assignments and unary operation
|
||||
// conversions.
|
||||
//
|
||||
// Generally, this is focused on basic type conversion, not shape conversion.
|
||||
// See addShapeConversion() for shape conversions.
|
||||
//
|
||||
// Returns the converted pair of nodes.
|
||||
// Returns <nullptr, nullptr> when there is no conversion.
|
||||
std::tuple<TIntermTyped*, TIntermTyped*>
|
||||
TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const
|
||||
{
|
||||
if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1)) {
|
||||
if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1))
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
|
||||
if (node0->getType() != node1->getType()) {
|
||||
// If differing structure, then no conversions.
|
||||
if (node0->isStruct() || node1->isStruct())
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
|
||||
// If differing arrays, then no conversions.
|
||||
if (node0->getType().isArray() || node1->getType().isArray())
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
}
|
||||
|
||||
// If types are identical, no problem
|
||||
if (node0->getType() == node1->getType())
|
||||
return std::make_tuple(node0, node1);
|
||||
|
||||
// If one's a structure, then no conversions.
|
||||
if (node0->isStruct() || node1->isStruct())
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
|
||||
// If one's an array, then no conversions.
|
||||
if (node0->getType().isArray() || node1->getType().isArray())
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
|
||||
auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes);
|
||||
|
||||
TBasicType type0 = node0->getType().getBasicType();
|
||||
TBasicType type1 = node1->getType().getBasicType();
|
||||
|
||||
switch (op) {
|
||||
//
|
||||
// List all the binary ops that can implicitly convert one operand to the other's type;
|
||||
@ -764,80 +770,52 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
|
||||
case EOpAnd:
|
||||
case EOpInclusiveOr:
|
||||
case EOpExclusiveOr:
|
||||
case EOpAndAssign:
|
||||
case EOpInclusiveOrAssign:
|
||||
case EOpExclusiveOrAssign:
|
||||
case EOpLogicalNot:
|
||||
case EOpLogicalAnd:
|
||||
case EOpLogicalOr:
|
||||
case EOpLogicalXor:
|
||||
|
||||
case EOpFunctionCall:
|
||||
case EOpReturn:
|
||||
case EOpAssign:
|
||||
case EOpAddAssign:
|
||||
case EOpSubAssign:
|
||||
case EOpMulAssign:
|
||||
case EOpVectorTimesScalarAssign:
|
||||
case EOpMatrixTimesScalarAssign:
|
||||
case EOpDivAssign:
|
||||
case EOpModAssign:
|
||||
case EOpSequence: // used by ?:
|
||||
|
||||
case EOpAtan:
|
||||
case EOpClamp:
|
||||
case EOpCross:
|
||||
case EOpDistance:
|
||||
case EOpDot:
|
||||
case EOpDst:
|
||||
case EOpFaceForward:
|
||||
case EOpFma:
|
||||
case EOpFrexp:
|
||||
case EOpLdexp:
|
||||
case EOpMix:
|
||||
case EOpLit:
|
||||
case EOpMax:
|
||||
case EOpMin:
|
||||
case EOpModf:
|
||||
case EOpPow:
|
||||
case EOpReflect:
|
||||
case EOpRefract:
|
||||
case EOpSmoothStep:
|
||||
case EOpStep:
|
||||
|
||||
case EOpSequence:
|
||||
case EOpConstructStruct:
|
||||
|
||||
if (type0 == type1)
|
||||
if (node0->getBasicType() == node1->getBasicType())
|
||||
return std::make_tuple(node0, node1);
|
||||
|
||||
promoteTo = getConversionDestinatonType(type0, type1, op);
|
||||
promoteTo = getConversionDestinatonType(node0->getBasicType(), node1->getBasicType(), op);
|
||||
if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
|
||||
break;
|
||||
|
||||
// Shifts can have mixed types as long as they are integer and of the same rank,
|
||||
// without converting.
|
||||
// It's the left operand's type that determines the resulting type, so no issue
|
||||
// with assign shift ops either.
|
||||
case EOpLogicalAnd:
|
||||
case EOpLogicalOr:
|
||||
case EOpLogicalXor:
|
||||
if (source == EShSourceHlsl)
|
||||
promoteTo = std::make_tuple(EbtBool, EbtBool);
|
||||
else
|
||||
return std::make_tuple(node0, node1);
|
||||
break;
|
||||
|
||||
// There are no conversions needed for GLSL; the shift amount just needs to be an
|
||||
// integer type, as does the base.
|
||||
// HLSL can promote bools to ints to make this work.
|
||||
case EOpLeftShift:
|
||||
case EOpRightShift:
|
||||
case EOpLeftShiftAssign:
|
||||
case EOpRightShiftAssign:
|
||||
|
||||
if (isTypeInt(type0) && isTypeInt(type1)) {
|
||||
if (getTypeRank(type0) == getTypeRank(type1)) {
|
||||
if (source == EShSourceHlsl) {
|
||||
TBasicType node0BasicType = node0->getBasicType();
|
||||
if (node0BasicType == EbtBool)
|
||||
node0BasicType = EbtInt;
|
||||
if (node1->getBasicType() == EbtBool)
|
||||
promoteTo = std::make_tuple(node0BasicType, EbtInt);
|
||||
else
|
||||
promoteTo = std::make_tuple(node0BasicType, node1->getBasicType());
|
||||
} else {
|
||||
if (isTypeInt(node0->getBasicType()) && isTypeInt(node1->getBasicType()))
|
||||
return std::make_tuple(node0, node1);
|
||||
} else {
|
||||
promoteTo = getConversionDestinatonType(type0, type1, op);
|
||||
if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
}
|
||||
} else
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
else
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
if (node0->getType() == node1->getType())
|
||||
return std::make_tuple(node0, node1);
|
||||
|
||||
return std::make_tuple(nullptr, nullptr);
|
||||
}
|
||||
|
||||
@ -868,11 +846,13 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no
|
||||
// For implicit conversions, 'op' is not the requested conversion, it is the explicit
|
||||
// operation requiring the implicit conversion.
|
||||
//
|
||||
// Binary operation conversions should be handled by addConversion(op, node, node), not here.
|
||||
//
|
||||
// Returns a node representing the conversion, which could be the same
|
||||
// node passed in if no conversion was needed.
|
||||
//
|
||||
// Generally, this is focused on basic type conversion, not shape conversion.
|
||||
// See addShapeConversion().
|
||||
// See addShapeConversion() for shape conversions.
|
||||
//
|
||||
// Return nullptr if a conversion can't be done.
|
||||
//
|
||||
@ -939,40 +919,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
|
||||
promoteTo = EbtUint64;
|
||||
break;
|
||||
|
||||
//
|
||||
// List all the binary ops that can implicitly convert one operand to the other's type;
|
||||
// This implements the 'policy' for implicit type conversion.
|
||||
//
|
||||
case EOpLessThan:
|
||||
case EOpGreaterThan:
|
||||
case EOpLessThanEqual:
|
||||
case EOpGreaterThanEqual:
|
||||
case EOpEqual:
|
||||
case EOpNotEqual:
|
||||
|
||||
case EOpAdd:
|
||||
case EOpSub:
|
||||
case EOpMul:
|
||||
case EOpDiv:
|
||||
case EOpMod:
|
||||
|
||||
case EOpVectorTimesScalar:
|
||||
case EOpVectorTimesMatrix:
|
||||
case EOpMatrixTimesVector:
|
||||
case EOpMatrixTimesScalar:
|
||||
|
||||
case EOpAnd:
|
||||
case EOpInclusiveOr:
|
||||
case EOpExclusiveOr:
|
||||
case EOpAndAssign:
|
||||
case EOpInclusiveOrAssign:
|
||||
case EOpExclusiveOrAssign:
|
||||
case EOpLogicalNot:
|
||||
case EOpLogicalAnd:
|
||||
case EOpLogicalOr:
|
||||
case EOpLogicalXor:
|
||||
|
||||
case EOpFunctionCall:
|
||||
|
||||
case EOpReturn:
|
||||
case EOpAssign:
|
||||
case EOpAddAssign:
|
||||
@ -982,6 +932,9 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
|
||||
case EOpMatrixTimesScalarAssign:
|
||||
case EOpDivAssign:
|
||||
case EOpModAssign:
|
||||
case EOpAndAssign:
|
||||
case EOpInclusiveOrAssign:
|
||||
case EOpExclusiveOrAssign:
|
||||
|
||||
case EOpAtan:
|
||||
case EOpClamp:
|
||||
@ -1010,37 +963,24 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt
|
||||
if (type.getBasicType() == node->getType().getBasicType())
|
||||
return node;
|
||||
|
||||
if (canImplicitlyPromote(node->getType().getBasicType(), type.getBasicType(), op))
|
||||
if (canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op))
|
||||
promoteTo = type.getBasicType();
|
||||
else
|
||||
return nullptr;
|
||||
break;
|
||||
|
||||
// Shifts can have mixed types as long as they are integer and of the same rank,
|
||||
// without converting.
|
||||
// It's the left operand's type that determines the resulting type, so no issue
|
||||
// with assign shift ops either.
|
||||
case EOpLeftShift:
|
||||
case EOpRightShift:
|
||||
// For GLSL, there are no conversions needed; the shift amount just needs to be an
|
||||
// integer type, as do the base/result.
|
||||
// HLSL can convert the shift from a bool to an int.
|
||||
case EOpLeftShiftAssign:
|
||||
case EOpRightShiftAssign:
|
||||
{
|
||||
TBasicType type0 = type.getBasicType();
|
||||
TBasicType type1 = node->getType().getBasicType();
|
||||
|
||||
if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool) {
|
||||
promoteTo = type0;
|
||||
} else {
|
||||
if (isTypeInt(type0) && isTypeInt(type1)) {
|
||||
if (getTypeRank(type0) == getTypeRank(type1)) {
|
||||
return node;
|
||||
} else {
|
||||
if (canImplicitlyPromote(type1, type0, op))
|
||||
promoteTo = type0;
|
||||
else
|
||||
return nullptr;
|
||||
}
|
||||
} else
|
||||
if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool)
|
||||
promoteTo = type.getBasicType();
|
||||
else {
|
||||
if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType()))
|
||||
return node;
|
||||
else
|
||||
return nullptr;
|
||||
}
|
||||
break;
|
||||
@ -1485,9 +1425,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat
|
||||
extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float32) ||
|
||||
extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float64);
|
||||
|
||||
if(explicitTypesEnabled)
|
||||
{
|
||||
|
||||
if(explicitTypesEnabled) {
|
||||
// integral promotions
|
||||
if (isIntegralPromotion(from, to)) {
|
||||
return true;
|
||||
@ -2952,7 +2890,7 @@ bool TIntermediate::promoteUnary(TIntermUnary& node)
|
||||
// Convert operand to a boolean type
|
||||
if (operand->getBasicType() != EbtBool) {
|
||||
// Add constructor to boolean type. If that fails, we can't do it, so return false.
|
||||
TIntermTyped* converted = convertToBasicType(op, EbtBool, operand);
|
||||
TIntermTyped* converted = addConversion(op, TType(EbtBool), operand);
|
||||
if (converted == nullptr)
|
||||
return false;
|
||||
|
||||
@ -2997,24 +2935,6 @@ void TIntermUnary::updatePrecision()
|
||||
}
|
||||
}
|
||||
|
||||
// If it is not already, convert this node to the given basic type.
|
||||
TIntermTyped* TIntermediate::convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const
|
||||
{
|
||||
if (node == nullptr)
|
||||
return nullptr;
|
||||
|
||||
// It's already this basic type: nothing needs to be done, so use the node directly.
|
||||
if (node->getBasicType() == basicType)
|
||||
return node;
|
||||
|
||||
const TType& type = node->getType();
|
||||
const TType newType(basicType, type.getQualifier().storage,
|
||||
type.getVectorSize(), type.getMatrixCols(), type.getMatrixRows(), type.isVector());
|
||||
|
||||
// Add constructor to the right vectorness of the right type. If that fails, we can't do it, so return nullptr.
|
||||
return addConversion(op, newType, node);
|
||||
}
|
||||
|
||||
//
|
||||
// See TIntermediate::promote
|
||||
//
|
||||
@ -3087,8 +3007,10 @@ bool TIntermediate::promoteBinary(TIntermBinary& node)
|
||||
case EOpSub:
|
||||
case EOpDiv:
|
||||
case EOpMul:
|
||||
left = addConversion(op, TType(EbtInt, EvqTemporary, left->getVectorSize()), left);
|
||||
right = addConversion(op, TType(EbtInt, EvqTemporary, right->getVectorSize()), right);
|
||||
if (left->getBasicType() == EbtBool)
|
||||
left = createConversion(EbtInt, left);
|
||||
if (right->getBasicType() == EbtBool)
|
||||
right = createConversion(EbtInt, right);
|
||||
if (left == nullptr || right == nullptr)
|
||||
return false;
|
||||
node.setLeft(left);
|
||||
@ -3139,21 +3061,17 @@ bool TIntermediate::promoteBinary(TIntermBinary& node)
|
||||
case EOpLogicalAnd:
|
||||
case EOpLogicalOr:
|
||||
case EOpLogicalXor:
|
||||
if (getSource() == EShSourceHlsl) {
|
||||
TIntermTyped* convertedL = convertToBasicType(op, EbtBool, left);
|
||||
TIntermTyped* convertedR = convertToBasicType(op, EbtBool, right);
|
||||
if (convertedL == nullptr || convertedR == nullptr)
|
||||
// logical ops operate only on Booleans or vectors of Booleans.
|
||||
if (left->getBasicType() != EbtBool || left->isMatrix())
|
||||
return false;
|
||||
node.setLeft(left = convertedL); // also updates stack variable
|
||||
node.setRight(right = convertedR); // also updates stack variable
|
||||
} else {
|
||||
|
||||
if (getSource() == EShSourceGlsl) {
|
||||
// logical ops operate only on scalar Booleans and will promote to scalar Boolean.
|
||||
if (left->getBasicType() != EbtBool || left->isVector() || left->isMatrix())
|
||||
if (left->isVector())
|
||||
return false;
|
||||
}
|
||||
|
||||
node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
|
||||
|
||||
break;
|
||||
|
||||
case EOpRightShift:
|
||||
|
@ -228,6 +228,7 @@ void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op,
|
||||
// must still be valid.
|
||||
// It is okay if the symbol's type will be subsequently edited;
|
||||
// the modifications will be tracked.
|
||||
// Order is preserved, to avoid creating novel forward references.
|
||||
void TParseContextBase::trackLinkage(TSymbol& symbol)
|
||||
{
|
||||
if (!parsingBuiltins)
|
||||
@ -602,7 +603,7 @@ void TParseContextBase::finish()
|
||||
if (parsingBuiltins)
|
||||
return;
|
||||
|
||||
// Transfer the linkage symbols to AST nodes
|
||||
// Transfer the linkage symbols to AST nodes, preserving order.
|
||||
TIntermAggregate* linkage = new TIntermAggregate;
|
||||
for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i)
|
||||
intermediate.addSymbolLinkageNode(linkage, **i);
|
||||
|
@ -187,7 +187,7 @@ protected:
|
||||
TParseContextBase& operator=(TParseContextBase&);
|
||||
|
||||
const bool parsingBuiltins; // true if parsing built-in symbols/functions
|
||||
TVector<TSymbol*> linkageSymbols; // these need to be transferred to 'linkage', after all editing is done
|
||||
TVector<TSymbol*> linkageSymbols; // will be transferred to 'linkage', after all editing is done, order preserving
|
||||
TScanContext* scanContext;
|
||||
TPpContext* ppContext;
|
||||
TBuiltInResource resources;
|
||||
|
@ -962,7 +962,7 @@ int TScanContext::tokenizeIdentifier()
|
||||
case PATCH:
|
||||
if (parseContext.symbolTable.atBuiltInLevel() ||
|
||||
(parseContext.profile == EEsProfile &&
|
||||
(parseContext.version >= 320 ||
|
||||
(parseContext.version >= 320 ||
|
||||
parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))) ||
|
||||
(parseContext.profile != EEsProfile && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
|
||||
return keyword;
|
||||
@ -1450,6 +1450,11 @@ int TScanContext::tokenizeIdentifier()
|
||||
#endif
|
||||
|
||||
case NOPERSPECTIVE:
|
||||
#ifdef NV_EXTENSIONS
|
||||
if (parseContext.profile == EEsProfile && parseContext.version >= 300 &&
|
||||
parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
|
||||
return keyword;
|
||||
#endif
|
||||
return es30ReservedFromGLSL(130);
|
||||
|
||||
case SMOOTH:
|
||||
|
@ -768,6 +768,8 @@ bool ProcessDeferred(
|
||||
SpvVersion spvVersion;
|
||||
EShLanguage stage = compiler->getLanguage();
|
||||
TranslateEnvironment(environment, messages, source, stage, spvVersion);
|
||||
if (environment != nullptr && environment->target.hlslFunctionality1)
|
||||
intermediate.setHlslFunctionality1();
|
||||
|
||||
// First, without using the preprocessor or parser, find the #version, so we know what
|
||||
// symbol tables, processing rules, etc. to set up. This does not need the extra strings
|
||||
@ -1629,6 +1631,7 @@ TShader::TShader(EShLanguage s)
|
||||
environment.input.dialect = EShClientNone;
|
||||
environment.client.client = EShClientNone;
|
||||
environment.target.language = EShTargetNone;
|
||||
environment.target.hlslFunctionality1 = false;
|
||||
}
|
||||
|
||||
TShader::~TShader()
|
||||
|
@ -225,6 +225,7 @@ void TParseVersions::initializeExtensionBehavior()
|
||||
extensionBehavior[E_GL_NVX_multiview_per_view_attributes] = EBhDisable;
|
||||
extensionBehavior[E_GL_NV_shader_atomic_int64] = EBhDisable;
|
||||
extensionBehavior[E_GL_NV_conservative_raster_underestimation] = EBhDisable;
|
||||
extensionBehavior[E_GL_NV_shader_noperspective_interpolation] = EBhDisable;
|
||||
#endif
|
||||
|
||||
// AEP
|
||||
@ -319,6 +320,13 @@ void TParseVersions::getPreamble(std::string& preamble)
|
||||
"#define GL_OES_texture_cube_map_array 1\n"
|
||||
"#define GL_EXT_shader_non_constant_global_initializers 1\n"
|
||||
;
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
if (profile == EEsProfile && version >= 300) {
|
||||
preamble += "#define GL_NV_shader_noperspective_interpolation 1\n";
|
||||
}
|
||||
#endif
|
||||
|
||||
} else {
|
||||
preamble =
|
||||
"#define GL_FRAGMENT_PRECISION_HIGH 1\n"
|
||||
|
@ -196,6 +196,7 @@ const char* const E_GL_NV_stereo_view_rendering = "GL_NV_stereo_
|
||||
const char* const E_GL_NVX_multiview_per_view_attributes = "GL_NVX_multiview_per_view_attributes";
|
||||
const char* const E_GL_NV_shader_atomic_int64 = "GL_NV_shader_atomic_int64";
|
||||
const char* const E_GL_NV_conservative_raster_underestimation = "GL_NV_conservative_raster_underestimation";
|
||||
const char* const E_GL_NV_shader_noperspective_interpolation = "GL_NV_shader_noperspective_interpolation";
|
||||
|
||||
// Arrays of extensions for the above viewportEXTs duplications
|
||||
|
||||
|
@ -82,7 +82,7 @@ const TConstUnion* TAttributeArgs::getConstUnion(TBasicType basicType, int argNu
|
||||
if (args == nullptr)
|
||||
return nullptr;
|
||||
|
||||
if (argNum >= args->getSequence().size())
|
||||
if (argNum >= (int)args->getSequence().size())
|
||||
return nullptr;
|
||||
|
||||
const TConstUnion* constVal = &args->getSequence()[argNum]->getAsConstantUnion()->getConstArray()[0];
|
||||
|
@ -1117,7 +1117,11 @@ interpolation_qualifier
|
||||
}
|
||||
| NOPERSPECTIVE {
|
||||
parseContext.globalCheck($1.loc, "noperspective");
|
||||
#ifdef NV_EXTENSIONS
|
||||
parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
|
||||
#else
|
||||
parseContext.requireProfile($1.loc, ~EEsProfile, "noperspective");
|
||||
#endif
|
||||
parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective");
|
||||
$$.init($1.loc);
|
||||
$$.qualifier.nopersp = true;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,8 @@
|
||||
/* A Bison parser, made by GNU Bison 3.0. */
|
||||
/* A Bison parser, made by GNU Bison 3.0.4. */
|
||||
|
||||
/* Bison interface for Yacc-like parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
|
||||
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -437,7 +437,7 @@ extern int yydebug;
|
||||
|
||||
/* Value type. */
|
||||
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
|
||||
typedef union YYSTYPE YYSTYPE;
|
||||
|
||||
union YYSTYPE
|
||||
{
|
||||
#line 70 "MachineIndependent/glslang.y" /* yacc.c:1909 */
|
||||
@ -477,6 +477,8 @@ union YYSTYPE
|
||||
|
||||
#line 479 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */
|
||||
};
|
||||
|
||||
typedef union YYSTYPE YYSTYPE;
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
# define YYSTYPE_IS_DECLARED 1
|
||||
#endif
|
||||
|
@ -598,7 +598,7 @@ protected:
|
||||
/********************************************************************************
|
||||
The following IO resolver maps types in HLSL register space, as follows:
|
||||
|
||||
t – for shader resource views (SRV)
|
||||
t - for shader resource views (SRV)
|
||||
TEXTURE1D
|
||||
TEXTURE1DARRAY
|
||||
TEXTURE2D
|
||||
@ -613,7 +613,7 @@ t – for shader resource views (SRV)
|
||||
BUFFER
|
||||
TBUFFER
|
||||
|
||||
s – for samplers
|
||||
s - for samplers
|
||||
SAMPLER
|
||||
SAMPLER1D
|
||||
SAMPLER2D
|
||||
@ -622,7 +622,7 @@ s – for samplers
|
||||
SAMPLERSTATE
|
||||
SAMPLERCOMPARISONSTATE
|
||||
|
||||
u – for unordered access views (UAV)
|
||||
u - for unordered access views (UAV)
|
||||
RWBYTEADDRESSBUFFER
|
||||
RWSTRUCTUREDBUFFER
|
||||
APPENDSTRUCTUREDBUFFER
|
||||
@ -634,7 +634,7 @@ u – for unordered access views (UAV)
|
||||
RWTEXTURE2DARRAY
|
||||
RWTEXTURE3D
|
||||
|
||||
b – for constant buffer views (CBV)
|
||||
b - for constant buffer views (CBV)
|
||||
CBUFFER
|
||||
CONSTANTBUFFER
|
||||
********************************************************************************/
|
||||
|
@ -210,7 +210,7 @@ class TVariable;
|
||||
class TIntermediate {
|
||||
public:
|
||||
explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) :
|
||||
implicitThisName("@this"),
|
||||
implicitThisName("@this"), implicitCounterName("@count"),
|
||||
language(l), source(EShSourceNone), profile(p), version(v), treeRoot(0),
|
||||
numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
|
||||
invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet),
|
||||
@ -218,6 +218,7 @@ public:
|
||||
pixelCenterInteger(false), originUpperLeft(false),
|
||||
vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false),
|
||||
postDepthCoverage(false), depthLayout(EldNone), depthReplacing(false),
|
||||
hlslFunctionality1(false),
|
||||
blendEquations(0), xfbMode(false), multiStream(false),
|
||||
#ifdef NV_EXTENSIONS
|
||||
layoutOverrideCoverage(false),
|
||||
@ -362,6 +363,13 @@ public:
|
||||
}
|
||||
bool usingHlslIoMapping() { return hlslIoMapping; }
|
||||
|
||||
template<class T> T addCounterBufferName(const T& name) const { return name + implicitCounterName; }
|
||||
bool hasCounterBufferName(const TString& name) const {
|
||||
size_t len = strlen(implicitCounterName);
|
||||
return name.size() > len &&
|
||||
name.compare(name.size() - len, len, implicitCounterName) == 0;
|
||||
}
|
||||
|
||||
void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; }
|
||||
|
||||
void setVersion(int v) { version = v; }
|
||||
@ -459,9 +467,6 @@ public:
|
||||
TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc) const;
|
||||
TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc, const TType&) const;
|
||||
|
||||
// Add conversion from node's type to given basic type.
|
||||
TIntermTyped* convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const;
|
||||
|
||||
// Constant folding (in Constant.cpp)
|
||||
TIntermTyped* fold(TIntermAggregate* aggrNode);
|
||||
TIntermTyped* foldConstructor(TIntermAggregate* aggrNode);
|
||||
@ -567,6 +572,9 @@ public:
|
||||
void setDepthReplacing() { depthReplacing = true; }
|
||||
bool isDepthReplacing() const { return depthReplacing; }
|
||||
|
||||
void setHlslFunctionality1() { hlslFunctionality1 = true; }
|
||||
bool getHlslFunctionality1() const { return hlslFunctionality1; }
|
||||
|
||||
void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); }
|
||||
unsigned int getBlendEquations() const { return blendEquations; }
|
||||
|
||||
@ -626,6 +634,7 @@ public:
|
||||
bool needsLegalization() const { return needToLegalize; }
|
||||
|
||||
const char* const implicitThisName;
|
||||
const char* const implicitCounterName;
|
||||
|
||||
protected:
|
||||
TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
|
||||
@ -685,6 +694,7 @@ protected:
|
||||
bool postDepthCoverage;
|
||||
TLayoutDepth depthLayout;
|
||||
bool depthReplacing;
|
||||
bool hlslFunctionality1;
|
||||
int blendEquations; // an 'or'ing of masks of shifts of TBlendEquationShift
|
||||
bool xfbMode;
|
||||
bool multiStream;
|
||||
|
@ -174,16 +174,22 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
|
||||
// Suffix:
|
||||
bool isFloat16 = false;
|
||||
if (ch == 'l' || ch == 'L') {
|
||||
parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
|
||||
if (parseContext.intermediate.getSource() == EShSourceGlsl)
|
||||
parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
|
||||
if (! HasDecimalOrExponent)
|
||||
parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
|
||||
int ch2 = getChar();
|
||||
if (ch2 != 'f' && ch2 != 'F') {
|
||||
ungetChar();
|
||||
ungetChar();
|
||||
} else {
|
||||
if (parseContext.intermediate.getSource() == EShSourceGlsl) {
|
||||
int ch2 = getChar();
|
||||
if (ch2 != 'f' && ch2 != 'F') {
|
||||
ungetChar();
|
||||
ungetChar();
|
||||
} else {
|
||||
saveName(ch);
|
||||
saveName(ch2);
|
||||
isDouble = 1;
|
||||
}
|
||||
} else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
|
||||
saveName(ch);
|
||||
saveName(ch2);
|
||||
isDouble = 1;
|
||||
}
|
||||
} else if (ch == 'h' || ch == 'H') {
|
||||
@ -201,9 +207,9 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken)
|
||||
saveName(ch2);
|
||||
isFloat16 = true;
|
||||
}
|
||||
} else {
|
||||
} else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
|
||||
saveName(ch);
|
||||
isFloat16 = false;
|
||||
isFloat16 = true;
|
||||
}
|
||||
} else if (ch == 'f' || ch == 'F') {
|
||||
parseContext.profileRequires(ppToken->loc, EEsProfile, 300, nullptr, "floating-point suffix");
|
||||
|
@ -766,11 +766,11 @@ void TReflection::buildAttributeReflection(EShLanguage stage, const TIntermediat
|
||||
}
|
||||
|
||||
// build counter block index associations for buffers
|
||||
void TReflection::buildCounterIndices()
|
||||
void TReflection::buildCounterIndices(const TIntermediate& intermediate)
|
||||
{
|
||||
// search for ones that have counters
|
||||
for (int i = 0; i < int(indexToUniformBlock.size()); ++i) {
|
||||
const TString counterName(indexToUniformBlock[i].name + "@count");
|
||||
const TString counterName(intermediate.addCounterBufferName(indexToUniformBlock[i].name));
|
||||
const int index = getIndex(counterName);
|
||||
|
||||
if (index >= 0)
|
||||
@ -802,7 +802,7 @@ bool TReflection::addStage(EShLanguage stage, const TIntermediate& intermediate)
|
||||
function->traverse(&it);
|
||||
}
|
||||
|
||||
buildCounterIndices();
|
||||
buildCounterIndices(intermediate);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -156,7 +156,7 @@ public:
|
||||
protected:
|
||||
friend class glslang::TReflectionTraverser;
|
||||
|
||||
void buildCounterIndices();
|
||||
void buildCounterIndices(const TIntermediate&);
|
||||
void buildAttributeReflection(EShLanguage, const TIntermediate&);
|
||||
|
||||
// Need a TString hash: typedef std::unordered_map<TString, int> TNameToIndex;
|
||||
|
5
3rdparty/glslang/glslang/Public/ShaderLang.h
vendored
5
3rdparty/glslang/glslang/Public/ShaderLang.h
vendored
@ -70,7 +70,7 @@
|
||||
// This should always increase, as some paths to do not consume
|
||||
// a more major number.
|
||||
// It should increment by one when new functionality is added.
|
||||
#define GLSLANG_MINOR_VERSION 3
|
||||
#define GLSLANG_MINOR_VERSION 5
|
||||
|
||||
//
|
||||
// Call before doing any other compiler/linker operations.
|
||||
@ -154,6 +154,7 @@ struct TClient {
|
||||
struct TTarget {
|
||||
EShTargetLanguage language;
|
||||
EShTargetLanguageVersion version; // version to target, if SPIR-V, defined by "word 1" of the SPIR-V header
|
||||
bool hlslFunctionality1; // can target hlsl_functionality1 extension(s)
|
||||
};
|
||||
|
||||
// All source/client/target versions and settings.
|
||||
@ -420,6 +421,8 @@ public:
|
||||
environment.target.language = lang;
|
||||
environment.target.version = version;
|
||||
}
|
||||
void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }
|
||||
bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; }
|
||||
|
||||
// Interface to #include handlers.
|
||||
//
|
||||
|
24
3rdparty/glslang/gtests/AST.FromFile.cpp
vendored
24
3rdparty/glslang/gtests/AST.FromFile.cpp
vendored
@ -41,6 +41,10 @@ namespace {
|
||||
|
||||
using CompileToAstTest = GlslangTest<::testing::TestWithParam<std::string>>;
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
using CompileToAstTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
|
||||
#endif
|
||||
|
||||
TEST_P(CompileToAstTest, FromFile)
|
||||
{
|
||||
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
|
||||
@ -48,6 +52,16 @@ TEST_P(CompileToAstTest, FromFile)
|
||||
Target::AST);
|
||||
}
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
// Compiling GLSL to SPIR-V under OpenGL semantics (NV extensions enabled).
|
||||
TEST_P(CompileToAstTestNV, FromFile)
|
||||
{
|
||||
loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
|
||||
Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0,
|
||||
Target::AST);
|
||||
}
|
||||
#endif
|
||||
|
||||
// clang-format off
|
||||
INSTANTIATE_TEST_CASE_P(
|
||||
Glsl, CompileToAstTest,
|
||||
@ -214,6 +228,16 @@ INSTANTIATE_TEST_CASE_P(
|
||||
})),
|
||||
FileNameAsCustomTestSuffix
|
||||
);
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
INSTANTIATE_TEST_CASE_P(
|
||||
Glsl, CompileToAstTestNV,
|
||||
::testing::ValuesIn(std::vector<std::string>({
|
||||
"nvShaderNoperspectiveInterpolation.frag",
|
||||
})),
|
||||
FileNameAsCustomTestSuffix
|
||||
);
|
||||
#endif
|
||||
// clang-format on
|
||||
|
||||
} // anonymous namespace
|
||||
|
3
3rdparty/glslang/gtests/Spv.FromFile.cpp
vendored
3
3rdparty/glslang/gtests/Spv.FromFile.cpp
vendored
@ -171,7 +171,7 @@ TEST_P(CompileVulkanToSpirvTestAMD, FromFile)
|
||||
#endif
|
||||
|
||||
#ifdef NV_EXTENSIONS
|
||||
// Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled).
|
||||
// Compiling GLSL to SPIR-V under Vulkan semantics (NV extensions enabled).
|
||||
// Expected to successfully generate SPIR-V.
|
||||
TEST_P(CompileVulkanToSpirvTestNV, FromFile)
|
||||
{
|
||||
@ -416,6 +416,7 @@ INSTANTIATE_TEST_CASE_P(
|
||||
"spv.460.comp",
|
||||
"spv.atomic.comp",
|
||||
"spv.glFragColor.frag",
|
||||
"spv.rankShift.comp",
|
||||
"spv.specConst.vert",
|
||||
"spv.OVR_multiview.vert",
|
||||
})),
|
||||
|
3
3rdparty/glslang/hlsl/hlslGrammar.cpp
vendored
3
3rdparty/glslang/hlsl/hlslGrammar.cpp
vendored
@ -3283,6 +3283,9 @@ bool HlslGrammar::acceptLiteral(TIntermTyped*& node)
|
||||
case EHTokUintConstant:
|
||||
node = intermediate.addConstantUnion(token.u, token.loc, true);
|
||||
break;
|
||||
case EHTokFloat16Constant:
|
||||
node = intermediate.addConstantUnion(token.d, EbtFloat16, token.loc, true);
|
||||
break;
|
||||
case EHTokFloatConstant:
|
||||
node = intermediate.addConstantUnion(token.d, EbtFloat, token.loc, true);
|
||||
break;
|
||||
|
61
3rdparty/glslang/hlsl/hlslParseHelper.cpp
vendored
61
3rdparty/glslang/hlsl/hlslParseHelper.cpp
vendored
@ -65,10 +65,10 @@ HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& int
|
||||
entryPointFunction(nullptr),
|
||||
entryPointFunctionBody(nullptr),
|
||||
gsStreamOutput(nullptr),
|
||||
clipDistanceInput(nullptr),
|
||||
cullDistanceInput(nullptr),
|
||||
clipDistanceOutput(nullptr),
|
||||
cullDistanceOutput(nullptr)
|
||||
cullDistanceOutput(nullptr),
|
||||
clipDistanceInput(nullptr),
|
||||
cullDistanceInput(nullptr)
|
||||
{
|
||||
globalUniformDefaults.clear();
|
||||
globalUniformDefaults.layoutMatrix = ElmRowMajor;
|
||||
@ -1608,7 +1608,7 @@ void HlslParseContext::addStructBufferHiddenCounterParam(const TSourceLoc& loc,
|
||||
if (! hasStructBuffCounter(*param.type))
|
||||
return;
|
||||
|
||||
const TString counterBlockName(getStructBuffCounterName(*param.name));
|
||||
const TString counterBlockName(intermediate.addCounterBufferName(*param.name));
|
||||
|
||||
TType counterType;
|
||||
counterBufferType(loc, counterType);
|
||||
@ -3163,7 +3163,7 @@ void HlslParseContext::counterBufferType(const TSourceLoc& loc, TType& type)
|
||||
{
|
||||
// Counter type
|
||||
TType* counterType = new TType(EbtInt, EvqBuffer);
|
||||
counterType->setFieldName("@count");
|
||||
counterType->setFieldName(intermediate.implicitCounterName);
|
||||
|
||||
TTypeList* blockStruct = new TTypeList;
|
||||
TTypeLoc member = { counterType, loc };
|
||||
@ -3176,12 +3176,6 @@ void HlslParseContext::counterBufferType(const TSourceLoc& loc, TType& type)
|
||||
shareStructBufferType(type);
|
||||
}
|
||||
|
||||
// knowledge of how to construct block name, in one place instead of N places.
|
||||
TString HlslParseContext::getStructBuffCounterName(const TString& blockName) const
|
||||
{
|
||||
return blockName + "@count";
|
||||
}
|
||||
|
||||
// declare counter for a structured buffer type
|
||||
void HlslParseContext::declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name)
|
||||
{
|
||||
@ -3195,9 +3189,9 @@ void HlslParseContext::declareStructBufferCounter(const TSourceLoc& loc, const T
|
||||
TType blockType;
|
||||
counterBufferType(loc, blockType);
|
||||
|
||||
TString* blockName = new TString(getStructBuffCounterName(name));
|
||||
TString* blockName = new TString(intermediate.addCounterBufferName(name));
|
||||
|
||||
// Counter buffer does not have its own counter buffer. TODO: there should be a better way to track this.
|
||||
// Counter buffer is not yet in use
|
||||
structBufferCounter[*blockName] = false;
|
||||
|
||||
shareStructBufferType(blockType);
|
||||
@ -3211,7 +3205,7 @@ TIntermTyped* HlslParseContext::getStructBufferCounter(const TSourceLoc& loc, TI
|
||||
if (buffer == nullptr || ! isStructBufferType(buffer->getType()))
|
||||
return nullptr;
|
||||
|
||||
const TString counterBlockName(getStructBuffCounterName(buffer->getAsSymbolNode()->getName()));
|
||||
const TString counterBlockName(intermediate.addCounterBufferName(buffer->getAsSymbolNode()->getName()));
|
||||
|
||||
// Mark the counter as being used
|
||||
structBufferCounter[counterBlockName] = true;
|
||||
@ -3224,7 +3218,6 @@ TIntermTyped* HlslParseContext::getStructBufferCounter(const TSourceLoc& loc, TI
|
||||
return counterMember;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Decompose structure buffer methods into AST
|
||||
//
|
||||
@ -5743,12 +5736,11 @@ void HlslParseContext::addStructBuffArguments(const TSourceLoc& loc, TIntermAggr
|
||||
TType counterType;
|
||||
counterBufferType(loc, counterType);
|
||||
|
||||
const TString counterBlockName(getStructBuffCounterName(blockSym->getName()));
|
||||
const TString counterBlockName(intermediate.addCounterBufferName(blockSym->getName()));
|
||||
|
||||
TVariable* variable = makeInternalVariable(counterBlockName, counterType);
|
||||
|
||||
// Mark this buffer as requiring a counter block. TODO: there should be a better
|
||||
// way to track it.
|
||||
// Mark this buffer's counter block as being in use
|
||||
structBufferCounter[counterBlockName] = true;
|
||||
|
||||
TIntermSymbol* sym = intermediate.addSymbol(*variable, loc);
|
||||
@ -8320,6 +8312,22 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
|
||||
// First, convert types as needed.
|
||||
//
|
||||
switch (op) {
|
||||
case EOpConstructF16Vec2:
|
||||
case EOpConstructF16Vec3:
|
||||
case EOpConstructF16Vec4:
|
||||
case EOpConstructF16Mat2x2:
|
||||
case EOpConstructF16Mat2x3:
|
||||
case EOpConstructF16Mat2x4:
|
||||
case EOpConstructF16Mat3x2:
|
||||
case EOpConstructF16Mat3x3:
|
||||
case EOpConstructF16Mat3x4:
|
||||
case EOpConstructF16Mat4x2:
|
||||
case EOpConstructF16Mat4x3:
|
||||
case EOpConstructF16Mat4x4:
|
||||
case EOpConstructFloat16:
|
||||
basicOp = EOpConstructFloat16;
|
||||
break;
|
||||
|
||||
case EOpConstructVec2:
|
||||
case EOpConstructVec3:
|
||||
case EOpConstructVec4:
|
||||
@ -8352,6 +8360,13 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
|
||||
basicOp = EOpConstructDouble;
|
||||
break;
|
||||
|
||||
case EOpConstructI16Vec2:
|
||||
case EOpConstructI16Vec3:
|
||||
case EOpConstructI16Vec4:
|
||||
case EOpConstructInt16:
|
||||
basicOp = EOpConstructInt16;
|
||||
break;
|
||||
|
||||
case EOpConstructIVec2:
|
||||
case EOpConstructIVec3:
|
||||
case EOpConstructIVec4:
|
||||
@ -8368,6 +8383,13 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
|
||||
basicOp = EOpConstructInt;
|
||||
break;
|
||||
|
||||
case EOpConstructU16Vec2:
|
||||
case EOpConstructU16Vec3:
|
||||
case EOpConstructU16Vec4:
|
||||
case EOpConstructUint16:
|
||||
basicOp = EOpConstructUint16;
|
||||
break;
|
||||
|
||||
case EOpConstructUVec2:
|
||||
case EOpConstructUVec3:
|
||||
case EOpConstructUVec4:
|
||||
@ -9914,7 +9936,8 @@ void HlslParseContext::addPatchConstantInvocation()
|
||||
}
|
||||
|
||||
// Finalization step: remove unused buffer blocks from linkage (we don't know until the
|
||||
// shader is entirely compiled)
|
||||
// shader is entirely compiled).
|
||||
// Preserve order of remaining symbols.
|
||||
void HlslParseContext::removeUnusedStructBufferCounters()
|
||||
{
|
||||
const auto endIt = std::remove_if(linkageSymbols.begin(), linkageSymbols.end(),
|
||||
|
2
3rdparty/glslang/hlsl/hlslParseHelper.h
vendored
2
3rdparty/glslang/hlsl/hlslParseHelper.h
vendored
@ -405,7 +405,7 @@ protected:
|
||||
// may fit in TSampler::structReturnIndex.
|
||||
TVector<TTypeList*> textureReturnStruct;
|
||||
|
||||
TMap<TString, bool> structBufferCounter;
|
||||
TMap<TString, bool> structBufferCounter; // true if counter buffer is in use
|
||||
|
||||
// The built-in interstage IO map considers e.g, EvqPosition on input and output separately, so that we
|
||||
// can build the linkage correctly if position appears on both sides. Otherwise, multiple positions
|
||||
|
1
3rdparty/glslang/hlsl/hlslScanContext.cpp
vendored
1
3rdparty/glslang/hlsl/hlslScanContext.cpp
vendored
@ -550,6 +550,7 @@ EHlslTokenClass HlslScanContext::tokenizeClass(HlslToken& token)
|
||||
|
||||
case PpAtomConstInt: parserToken->i = ppToken.ival; return EHTokIntConstant;
|
||||
case PpAtomConstUint: parserToken->i = ppToken.ival; return EHTokUintConstant;
|
||||
case PpAtomConstFloat16: parserToken->d = ppToken.dval; return EHTokFloat16Constant;
|
||||
case PpAtomConstFloat: parserToken->d = ppToken.dval; return EHTokFloatConstant;
|
||||
case PpAtomConstDouble: parserToken->d = ppToken.dval; return EHTokDoubleConstant;
|
||||
case PpAtomIdentifier:
|
||||
|
1
3rdparty/glslang/hlsl/hlslTokens.h
vendored
1
3rdparty/glslang/hlsl/hlslTokens.h
vendored
@ -298,6 +298,7 @@ enum EHlslTokenClass {
|
||||
EHTokConstantBuffer,
|
||||
|
||||
// constant
|
||||
EHTokFloat16Constant,
|
||||
EHTokFloatConstant,
|
||||
EHTokDoubleConstant,
|
||||
EHTokIntConstant,
|
||||
|
4
3rdparty/glslang/known_good.json
vendored
4
3rdparty/glslang/known_good.json
vendored
@ -5,14 +5,14 @@
|
||||
"site" : "github",
|
||||
"subrepo" : "KhronosGroup/SPIRV-Tools",
|
||||
"subdir" : "External/spirv-tools",
|
||||
"commit" : "46a9ec9d2312bc8f2a87810614d06c721ea3121c"
|
||||
"commit" : "8d8a71278bf9e83dd0fb30d5474386d30870b74d"
|
||||
},
|
||||
{
|
||||
"name" : "spirv-tools/external/spirv-headers",
|
||||
"site" : "github",
|
||||
"subrepo" : "KhronosGroup/SPIRV-Headers",
|
||||
"subdir" : "External/spirv-tools/external/spirv-headers",
|
||||
"commit" : "ce309203d7eceaf908bea8862c27f3e0749f7d00"
|
||||
"commit" : "02ffc719aa9f9c1dce5ce05743fb1afe6cbf17ea"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user