diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..daf87985 --- /dev/null +++ b/.clang-format @@ -0,0 +1,12 @@ +Language: Cpp +IndentWidth: 4 +BreakBeforeBraces: Custom +BraceWrapping: { AfterFunction: true, AfterControlStatement: true } +IndentCaseLabels: false +ReflowComments: false +ColumnLimit: 120 +AccessModifierOffset: -4 +AlignTrailingComments: true +AllowShortBlocksOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false diff --git a/CMakeLists.txt b/CMakeLists.txt index a3722bac..f2f23559 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "prefix") project(glslang) if(WIN32) + set(CMAKE_DEBUG_POSTFIX "d") include(ChooseMSVCCRT.cmake) add_definitions(-DGLSLANG_OSINCLUDE_WIN32) elseif(UNIX) @@ -23,6 +24,17 @@ elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang") add_definitions(-std=c++11) endif() +function(glslang_set_link_args TARGET) + # For MinGW compiles, statically link against the GCC and C++ runtimes. + # This avoids the need to ship those runtimes as DLLs. + if(WIN32) + if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") + set_target_properties(${TARGET} PROPERTIES + LINK_FLAGS "-static -static-libgcc -static-libstdc++") + endif() + endif(WIN32) +endfunction(glslang_set_link_args) + # We depend on these for later projects, so they should come first. add_subdirectory(External) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 0ca7d6dd..f64066ee 100755 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1,5 +1,5 @@ // -//Copyright (C) 2014-2015 LunarG, Inc. +//Copyright (C) 2014-2016 LunarG, Inc. //Copyright (C) 2015-2016 Google, Inc. // //All rights reserved. @@ -111,7 +111,7 @@ public: protected: spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier); - spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool member); + spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration); spv::ImageFormat TranslateImageFormat(const glslang::TType& type); spv::Id createSpvVariable(const glslang::TIntermSymbol*); spv::Id getSampledType(const glslang::TSampler&); @@ -124,7 +124,7 @@ protected: 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 declareClipCullCapability(const glslang::TTypeList& members, int member); + void declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember); bool isShaderEntrypoint(const glslang::TIntermAggregate* node); void makeFunctions(const glslang::TIntermSequence&); @@ -229,16 +229,18 @@ spv::StorageClass TranslateStorageClass(const glslang::TType& type) return spv::StorageClassInput; else if (type.getQualifier().isPipeOutput()) return spv::StorageClassOutput; + else if (type.getBasicType() == glslang::EbtSampler) + return spv::StorageClassUniformConstant; + else if (type.getBasicType() == glslang::EbtAtomicUint) + return spv::StorageClassAtomicCounter; else if (type.getQualifier().isUniformOrBuffer()) { if (type.getQualifier().layoutPushConstant) return spv::StorageClassPushConstant; if (type.getBasicType() == glslang::EbtBlock) return spv::StorageClassUniform; - else if (type.getBasicType() == glslang::EbtAtomicUint) - return spv::StorageClassAtomicCounter; else return spv::StorageClassUniformConstant; - // TODO: how are we distuingishing between default and non-default non-writable uniforms? Do default uniforms even exist? + // TODO: how are we distinguishing between default and non-default non-writable uniforms? Do default uniforms even exist? } else { switch (type.getQualifier().storage) { case glslang::EvqShared: return spv::StorageClassWorkgroup; break; @@ -403,21 +405,28 @@ spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qual return (spv::Decoration)spv::BadValue; } -// Translate glslang built-in variable to SPIR-V built in decoration. -spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltInVariable builtIn, bool member) +// Translate a glslang built-in variable to a SPIR-V built in decoration. Also generate +// associated capabilities when required. For some built-in variables, a capability +// is generated only when using the variable in an executable instruction, but not when +// just declaring a struct member variable with it. This is true for PointSize, +// ClipDistance, and CullDistance. +spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltInVariable builtIn, bool memberDeclaration) { switch (builtIn) { case glslang::EbvPointSize: - switch (glslangIntermediate->getStage()) { - case EShLangGeometry: - builder.addCapability(spv::CapabilityGeometryPointSize); - break; - case EShLangTessControl: - case EShLangTessEvaluation: - builder.addCapability(spv::CapabilityTessellationPointSize); - break; - default: - break; + // Defer adding the capability until the built-in is actually used. + if (!memberDeclaration) { + switch (glslangIntermediate->getStage()) { + case EShLangGeometry: + builder.addCapability(spv::CapabilityGeometryPointSize); + break; + case EShLangTessControl: + case EShLangTessEvaluation: + builder.addCapability(spv::CapabilityTessellationPointSize); + break; + default: + break; + } } return spv::BuiltInPointSize; @@ -428,13 +437,13 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI // use needed is to trigger the capability. // case glslang::EbvClipDistance: - if (! member) - builder.addCapability(spv::CapabilityClipDistance); + if (!memberDeclaration) + builder.addCapability(spv::CapabilityClipDistance); return spv::BuiltInClipDistance; case glslang::EbvCullDistance: - if (! member) - builder.addCapability(spv::CapabilityCullDistance); + if (!memberDeclaration) + builder.addCapability(spv::CapabilityCullDistance); return spv::BuiltInCullDistance; case glslang::EbvViewportIndex: @@ -636,9 +645,9 @@ bool HasNonLayoutQualifiers(const glslang::TQualifier& qualifier) { // This should list qualifiers that simultaneous satisfy: // - struct members can inherit from a struct declaration - // - effect decorations on the struct members (note smooth does not, and expecting something like volatile to effect the whole object) + // - affect decorations on the struct members (note smooth does not, and expecting something like volatile to effect the whole object) // - are not part of the offset/st430/etc or row/column-major layout - return qualifier.invariant || qualifier.nopersp || qualifier.flat || qualifier.centroid || qualifier.patch || qualifier.sample || qualifier.hasLocation(); + return qualifier.invariant || qualifier.hasLocation(); } // @@ -925,30 +934,34 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T // Add the next element in the chain - int index = node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst(); - if (node->getLeft()->getBasicType() == glslang::EbtBlock && node->getOp() == glslang::EOpIndexDirectStruct) { - // This may be, e.g., an anonymous block-member selection, which generally need - // index remapping due to hidden members in anonymous blocks. - std::vector& remapper = memberRemapper[node->getLeft()->getType().getStruct()]; - assert(remapper.size() > 0); - index = remapper[index]; - } - + const int glslangIndex = node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst(); if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector() && node->getOp() == glslang::EOpIndexDirect) { // This is essentially a hard-coded vector swizzle of size 1, // so short circuit the access-chain stuff with a swizzle. std::vector swizzle; - swizzle.push_back(node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst()); + swizzle.push_back(glslangIndex); builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType())); } else { - // normal case for indexing array or structure or block - builder.accessChainPush(builder.makeIntConstant(index)); + int spvIndex = glslangIndex; + if (node->getLeft()->getBasicType() == glslang::EbtBlock && + node->getOp() == glslang::EOpIndexDirectStruct) + { + // This may be, e.g., an anonymous block-member selection, which generally need + // index remapping due to hidden members in anonymous blocks. + std::vector& remapper = memberRemapper[node->getLeft()->getType().getStruct()]; + assert(remapper.size() > 0); + spvIndex = remapper[glslangIndex]; + } - // Add capabilities here for accessing clip/cull distance + // normal case for indexing array or structure or block + builder.accessChainPush(builder.makeIntConstant(spvIndex)); + + // Add capabilities here for accessing PointSize and clip/cull distance. + // We have deferred generation of associated capabilities until now. if (node->getLeft()->getType().isStruct() && ! node->getLeft()->getType().isArray()) - declareClipCullCapability(*node->getLeft()->getType().getStruct(), index); + declareUseOfStructMember(*(node->getLeft()->getType().getStruct()), glslangIndex); } } return false; @@ -1394,6 +1407,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpMemoryBarrierImage: case glslang::EOpMemoryBarrierShared: case glslang::EOpGroupMemoryBarrier: + case glslang::EOpAllMemoryBarrierWithGroupSync: + case glslang::EOpGroupMemoryBarrierWithGroupSync: + case glslang::EOpWorkgroupMemoryBarrier: + case glslang::EOpWorkgroupMemoryBarrierWithGroupSync: noReturnValue = true; // These all have 0 operands and will naturally finish up in the code below for 0 operands break; @@ -1902,8 +1919,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangType)); // 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) { - addMemberDecoration(spvType, member, TranslateInterpolationDecoration(subQualifier)); - addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(subQualifier)); + if (type.getBasicType() == glslang::EbtBlock) { + addMemberDecoration(spvType, member, TranslateInterpolationDecoration(subQualifier)); + addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(subQualifier)); + } } addMemberDecoration(spvType, member, TranslateInvariantDecoration(subQualifier)); @@ -2205,12 +2224,23 @@ void TGlslangToSpvTraverser::updateMemberOffset(const glslang::TType& /*structTy nextOffset = currentOffset + memberSize; } -void TGlslangToSpvTraverser::declareClipCullCapability(const glslang::TTypeList& members, int member) +void TGlslangToSpvTraverser::declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember) { - if (members[member].type->getQualifier().builtIn == glslang::EbvClipDistance) - builder.addCapability(spv::CapabilityClipDistance); - if (members[member].type->getQualifier().builtIn == glslang::EbvCullDistance) - builder.addCapability(spv::CapabilityCullDistance); + const glslang::TBuiltInVariable glslangBuiltIn = members[glslangMember].type->getQualifier().builtIn; + switch (glslangBuiltIn) + { + case glslang::EbvClipDistance: + case glslang::EbvCullDistance: + case glslang::EbvPointSize: + // Generate the associated capability. Delegate to TranslateBuiltInDecoration. + // Alternately, we could just call this for any glslang built-in, since the + // capability already guards against duplicates. + TranslateBuiltInDecoration(glslangBuiltIn, false); + break; + default: + // Capabilities were already generated when the struct was declared. + break; + } } bool TGlslangToSpvTraverser::isShaderEntrypoint(const glslang::TIntermAggregate* node) @@ -2250,7 +2280,9 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF for (int p = 0; p < (int)parameters.size(); ++p) { const glslang::TType& paramType = parameters[p]->getAsTyped()->getType(); spv::Id typeId = convertGlslangToSpvType(paramType); - if (paramType.getQualifier().storage != glslang::EvqConstReadOnly) + if (paramType.isOpaque()) + typeId = builder.makePointer(TranslateStorageClass(paramType), typeId); + else if (paramType.getQualifier().storage != glslang::EvqConstReadOnly) typeId = builder.makePointer(spv::StorageClassFunction, typeId); else constReadOnlyParameters.insert(parameters[p]->getAsSymbolNode()->getId()); @@ -2560,6 +2592,13 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO bias = true; } + // See if the sampler param should really be just the SPV image part + if (cracked.fetch) { + // a fetch needs to have the image extracted first + if (builder.isSampledImage(params.sampler)) + params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler); + } + // set the rest of the arguments params.coords = arguments[1]; @@ -2575,14 +2614,16 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO ++extraArgs; } else if (sampler.shadow) { std::vector indexes; - int comp; + int dRefComp; if (cracked.proj) - comp = 2; // "The resulting 3rd component of P in the shadow forms is used as Dref" + dRefComp = 2; // "The resulting 3rd component of P in the shadow forms is used as Dref" else - comp = builder.getNumComponents(params.coords) - 1; - indexes.push_back(comp); + dRefComp = builder.getNumComponents(params.coords) - 1; + indexes.push_back(dRefComp); params.Dref = builder.createCompositeExtract(params.coords, builder.getScalarTypeId(builder.getTypeId(params.coords)), indexes); } + + // lod if (cracked.lod) { params.lod = arguments[2]; ++extraArgs; @@ -2590,15 +2631,21 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO // we need to invent the default lod for an explicit lod instruction for a non-fragment stage noImplicitLod = true; } + + // multisample if (sampler.ms) { params.sample = arguments[2]; // For MS, "sample" should be specified ++extraArgs; } + + // gradient if (cracked.grad) { params.gradX = arguments[2 + extraArgs]; params.gradY = arguments[3 + extraArgs]; extraArgs += 2; } + + // offset and offsets if (cracked.offset) { params.offset = arguments[2 + extraArgs]; ++extraArgs; @@ -2606,25 +2653,57 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO params.offsets = arguments[2 + extraArgs]; ++extraArgs; } + + // lod clamp if (cracked.lodClamp) { params.lodClamp = arguments[2 + extraArgs]; ++extraArgs; } + + // sparse if (sparse) { params.texelOut = arguments[2 + extraArgs]; ++extraArgs; } + + // bias if (bias) { params.bias = arguments[2 + extraArgs]; ++extraArgs; } + + // gather component if (cracked.gather && ! sampler.shadow) { // default component is 0, if missing, otherwise an argument if (2 + extraArgs < (int)arguments.size()) { - params.comp = arguments[2 + extraArgs]; + params.component = arguments[2 + extraArgs]; ++extraArgs; } else { - params.comp = builder.makeIntConstant(0); + params.component = builder.makeIntConstant(0); + } + } + + // projective component (might not to move) + // GLSL: "The texture coordinates consumed from P, not including the last component of P, + // are divided by the last component of P." + // SPIR-V: "... (u [, v] [, w], q)... It may be a vector larger than needed, but all + // unused components will appear after all used components." + if (cracked.proj) { + int projSourceComp = builder.getNumComponents(params.coords) - 1; + int projTargetComp; + switch (sampler.dim) { + case glslang::Esd1D: projTargetComp = 1; break; + case glslang::Esd2D: projTargetComp = 2; break; + case glslang::EsdRect: projTargetComp = 2; break; + default: projTargetComp = projSourceComp; break; + } + // copy the projective coordinate if we have to + if (projTargetComp != projSourceComp) { + spv::Id projComp = builder.createCompositeExtract(params.coords, + builder.getScalarTypeId(builder.getTypeId(params.coords)), + projSourceComp); + params.coords = builder.createCompositeInsert(projComp, params.coords, + builder.getTypeId(params.coords), projTargetComp); } } @@ -2659,8 +2738,8 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg builder.clearAccessChain(); glslangArgs[a]->traverse(this); argTypes.push_back(¶mType); - // keep outputs as and samplers l-values, evaluate input-only as r-values - if (qualifiers[a] != glslang::EvqConstReadOnly || paramType.getBasicType() == glslang::EbtSampler) { + // keep outputs as and opaque objects l-values, evaluate input-only as r-values + if (qualifiers[a] != glslang::EvqConstReadOnly || paramType.isOpaque()) { // save l-value lValues.push_back(builder.getAccessChain()); } else { @@ -2679,7 +2758,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg for (int a = 0; a < (int)glslangArgs.size(); ++a) { const glslang::TType& paramType = glslangArgs[a]->getAsTyped()->getType(); spv::Id arg; - if (paramType.getBasicType() == glslang::EbtSampler) { + if (paramType.isOpaque()) { builder.setAccessChain(lValues[lValueCount]); arg = builder.accessChainGetLValue(); ++lValueCount; @@ -3001,7 +3080,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec return builder.setPrecision(result, precision); } - // Handle component-wise +, -, *, and / for all combinations of type. + // Handle component-wise +, -, *, %, and / for all combinations of type. // The result type of all of them is the same type as the (a) matrix operand. // The algorithm is to: // - break the matrix(es) into vectors @@ -3012,6 +3091,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec case spv::OpFAdd: case spv::OpFSub: case spv::OpFDiv: + case spv::OpFMod: case spv::OpFMul: { // one time set up... @@ -3178,6 +3258,9 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv: case glslang::EOpIsInf: unaryOp = spv::OpIsInf; break; + case glslang::EOpIsFinite: + unaryOp = spv::OpIsFinite; + break; case glslang::EOpFloatBitsToInt: case glslang::EOpFloatBitsToUint: @@ -3889,8 +3972,6 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op) builder.createNoResultOp(spv::OpEndPrimitive); return 0; case glslang::EOpBarrier: - if (glslangIntermediate->getProfile() != EEsProfile) - builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsAllMemory); builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsMaskNone); return 0; case glslang::EOpMemoryBarrier: @@ -3911,6 +3992,21 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op) case glslang::EOpGroupMemoryBarrier: builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask); return 0; + case glslang::EOpAllMemoryBarrierWithGroupSync: + // Control barrier with non-"None" semantic is also a memory barrier. + builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsAllMemory); + return 0; + case glslang::EOpGroupMemoryBarrierWithGroupSync: + // Control barrier with non-"None" semantic is also a memory barrier. + builder.createControlBarrier(spv::ScopeDevice, spv::ScopeDevice, spv::MemorySemanticsCrossWorkgroupMemoryMask); + return 0; + case glslang::EOpWorkgroupMemoryBarrier: + builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask); + return 0; + case glslang::EOpWorkgroupMemoryBarrierWithGroupSync: + // Control barrier with non-"None" semantic is also a memory barrier. + builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask); + return 0; default: logger->missingFunctionality("unknown operation with no arguments"); return 0; @@ -4044,7 +4140,7 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n // We now know we have a specialization constant to build - // gl_WorkgroupSize is a special case until the front-end handles hierarchical specialization constants, + // gl_WorkGroupSize is a special case until the front-end handles hierarchical specialization constants, // even then, it's specialization ids are handled by special case syntax in GLSL: layout(local_size_x = ... if (node.getType().getQualifier().builtIn == glslang::EbvWorkGroupSize) { std::vector dimConstId; diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index 35dda17b..1bbd5892 100755 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -926,8 +926,17 @@ namespace spv { // Count function variable use process( [&](spv::Op opCode, unsigned start) { - if (opCode == spv::OpVariable) { ++varUseCount[asId(start+2)]; return true; } - return false; + if (opCode == spv::OpVariable) { + ++varUseCount[asId(start+2)]; + return true; + } else if (opCode == spv::OpEntryPoint) { + const int wordCount = asWordCount(start); + for (int i = 4; i < wordCount; i++) { + ++varUseCount[asId(start+i)]; + } + return true; + } else + return false; }, [&](spv::Id& id) { if (varUseCount[id]) ++varUseCount[id]; } diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index a08e5488..ee9642b4 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -1430,10 +1430,10 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, bool explicitLod = false; texArgs[numArgs++] = parameters.sampler; texArgs[numArgs++] = parameters.coords; - if (parameters.Dref) + if (parameters.Dref != NoResult) texArgs[numArgs++] = parameters.Dref; - if (parameters.comp) - texArgs[numArgs++] = parameters.comp; + if (parameters.component != NoResult) + texArgs[numArgs++] = parameters.component; // // Set up the optional arguments @@ -1830,6 +1830,9 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& int numCols = getTypeNumColumns(resultTypeId); int numRows = getTypeNumRows(resultTypeId); + Instruction* instr = module.getInstruction(componentTypeId); + Id bitCount = instr->getIdOperand(0); + // Will use a two step process // 1. make a compile-time 2D array of values // 2. construct a matrix from that array @@ -1838,8 +1841,8 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& // initialize the array to the identity matrix Id ids[maxMatrixSize][maxMatrixSize]; - Id one = makeFloatConstant(1.0); - Id zero = makeFloatConstant(0.0); + Id one = (bitCount == 64 ? makeDoubleConstant(1.0) : makeFloatConstant(1.0)); + Id zero = (bitCount == 64 ? makeDoubleConstant(0.0) : makeFloatConstant(0.0)); for (int col = 0; col < 4; ++col) { for (int row = 0; row < 4; ++row) { if (col == row) diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 01cd6038..4ae28356 100755 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -321,7 +321,7 @@ public: Id gradX; Id gradY; Id sample; - Id comp; + Id component; Id texelOut; Id lodClamp; }; diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index 7c9fb987..42c054a4 100755 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -67,10 +67,7 @@ const Id NoType = 0; const unsigned int BadValue = 0xFFFFFFFF; const Decoration NoPrecision = (Decoration)BadValue; const MemorySemanticsMask MemorySemanticsAllMemory = - (MemorySemanticsMask)(MemorySemanticsAcquireMask | - MemorySemanticsReleaseMask | - MemorySemanticsAcquireReleaseMask | - MemorySemanticsSequentiallyConsistentMask | + (MemorySemanticsMask)(MemorySemanticsSequentiallyConsistentMask | MemorySemanticsUniformMemoryMask | MemorySemanticsSubgroupMemoryMask | MemorySemanticsWorkgroupMemoryMask | diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index e2e884a5..d69351ef 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -15,6 +15,8 @@ add_executable(glslangValidator ${SOURCES}) add_executable(spirv-remap ${REMAPPER_SOURCES}) set_property(TARGET glslangValidator PROPERTY FOLDER tools) set_property(TARGET spirv-remap PROPERTY FOLDER tools) +glslang_set_link_args(glslangValidator) +glslang_set_link_args(spirv-remap) set(LIBRARIES glslang diff --git a/Test/100.frag b/Test/100.frag index ce6a6eec..4f0c69b5 100644 --- a/Test/100.frag +++ b/Test/100.frag @@ -213,6 +213,12 @@ float fooinit() int init1 = gl_FrontFacing ? 1 : 2; // ERROR, non-const initializer +#ifdef GL_EXT_shader_non_constant_global_initializers +#extension GL_EXT_shader_non_constant_global_initializers : enable +#endif + +int init2 = gl_FrontFacing ? 1 : 2; + #pragma STDGL invariant(all) #line 3000 diff --git a/Test/310.comp b/Test/310.comp index d6b2c97d..3252728c 100644 --- a/Test/310.comp +++ b/Test/310.comp @@ -78,8 +78,8 @@ uniform writeonly iimage2DArray ii2da; layout(r32i) uniform iimage2D iimg2D; layout(rgba32i) uniform readonly iimage2D iimg2Drgba; -layout(rgba32f) uniform readonly image2D img2Drgba; -layout(r32ui) uniform uimage2D uimg2D; +layout(rgba32f) uniform readonly image2D img2Drgba; // ERROR, no default +layout(r32ui) uniform uimage2D uimg2D; // ERROR, no default void qux() { @@ -111,9 +111,9 @@ void passrc() passr(iimg2D); } -layout(rg8i) uniform readonly uimage2D i1bad; // ERROR, type mismatch -layout(rgba32i) uniform readonly image2D i2bad; // ERROR, type mismatch -layout(rgba32f) uniform readonly uimage2D i3bad; // ERROR, type mismatch +highp layout(rg8i) uniform readonly uimage2D i1bad; // ERROR, type mismatch +highp layout(rgba32i) uniform readonly image2D i2bad; // ERROR, type mismatch +highp layout(rgba32f) uniform readonly uimage2D i3bad; // ERROR, type mismatch layout(r8_snorm) uniform readonly iimage2D i4bad; // ERROR, type mismatch layout(rgba32ui) uniform readonly iimage2D i5bad; // ERROR, type mismatch layout(r8ui) uniform readonly iimage2D i6bad; // ERROR, type mismatch @@ -170,17 +170,17 @@ precise int pfoo; // ERROR, reserved dmat2x4 dm; // ERROR uniform samplerCubeArray sca; // ERROR uniform iimage2DRect i2dr; // ERROR -uniform image2DMS i2dms; // ERROR +highp uniform image2DMS i2dms; // ERROR uniform uimage2DMSArray u2dmsa; // ERROR -layout(r32f) coherent volatile restrict readonly writeonly uniform image2D okay1; -layout(r32i) coherent volatile restrict readonly uniform iimage2D okay2; -layout(r32ui) coherent volatile restrict writeonly uniform uimage2D okay3; -layout(r32f) coherent volatile restrict uniform image2D okay4; +highp layout(r32f) coherent volatile restrict readonly writeonly uniform image2D okay1; + layout(r32i) coherent volatile restrict readonly uniform iimage2D okay2; +highp layout(r32ui) coherent volatile restrict writeonly uniform uimage2D okay3; +highp layout(r32f) coherent volatile restrict uniform image2D okay4; -layout(rgba32f) coherent volatile restrict uniform image2D badQ1; // ERROR, bad qualifiers -layout(rgba8i) coherent volatile restrict uniform iimage2D badQ2; // ERROR, bad qualifiers -layout(rgba16ui) coherent volatile restrict uniform uimage2D badQ3; // ERROR, bad qualifiers +highp layout(rgba32f) coherent volatile restrict uniform image2D badQ1; // ERROR, bad qualifiers + layout(rgba8i) coherent volatile restrict uniform iimage2D badQ2; // ERROR, bad qualifiers +highp layout(rgba16ui) coherent volatile restrict uniform uimage2D badQ3; // ERROR, bad qualifiers writeonly buffer woblock { diff --git a/Test/310.frag b/Test/310.frag index b08391a5..e9f03950 100644 --- a/Test/310.frag +++ b/Test/310.frag @@ -62,11 +62,11 @@ void foo23() layout(binding=3) uniform sampler2D s1; layout(binding=3) uniform sampler2D s2; // ERROR: overlapping bindings? Don't see that in the 310 spec. -layout(binding=2) uniform writeonly image2D i2D; -layout(binding=4) uniform readonly image3D i3D; -layout(binding=5) uniform imageCube iCube; -layout(binding=6) uniform image2DArray i2DA; -layout(binding=6) uniform coherent volatile restrict image2D i2Dqualified; +highp layout(binding=2) uniform writeonly image2D i2D; + layout(binding=4) uniform readonly image3D i3D; // ERROR, no default precision + layout(binding=5) uniform imageCube iCube; // ERROR, no default precision + layout(binding=6) uniform image2DArray i2DA; // ERROR, no default precision + layout(binding=6) uniform coherent volatile restrict image2D i2Dqualified; // ERROR, no default precision layout(binding = 1) uniform bb { int foo; @@ -93,7 +93,7 @@ layout(shared) uniform bshar { in smooth vec4 smoothIn; in flat int flatIn; -uniform sampler2DMS s2dms; +uniform sampler2DMS s2dms; // ERROR, no default precision qualifier void foots() { @@ -108,7 +108,7 @@ void foots() } out bool bout; // ERROR -out image2D imageOut; // ERROR +highp out image2D imageOut; // ERROR out mat2x3 mout; // ERROR in bool inb; // ERROR @@ -201,7 +201,7 @@ uniform int sIndex; layout(binding = 0) uniform atomic_uint auArray[2]; uniform ubName { int i; } ubInst[4]; buffer bbName { int i; } bbInst[4]; -uniform writeonly image2D iArray[5]; +highp uniform writeonly image2D iArray[5]; const ivec2 constOffsets[4] = ivec2[4](ivec2(0.1), ivec2(0.2), ivec2(0.3), ivec2(0.4)); void pfooBad() diff --git a/Test/310.vert b/Test/310.vert index 58ed7480..92a50e2e 100644 --- a/Test/310.vert +++ b/Test/310.vert @@ -147,7 +147,7 @@ uniform int sIndex; layout(binding = 0) uniform atomic_uint auArray[2]; uniform ubName { int i; } ubInst[4]; buffer bbName { int i; } bbInst[4]; -uniform writeonly image2D iArray[5]; +highp uniform writeonly image2D iArray[5]; const ivec2 constOffsets[4] = ivec2[4](ivec2(0.1), ivec2(0.2), ivec2(0.3), ivec2(0.4)); void pfooBad() @@ -158,10 +158,10 @@ void pfooBad() auArray[sIndex + 1]; ubInst[1]; bbInst[2]; - ubInst[sIndex + 1]; // ERRRO, not supported - bbInst[sIndex]; // ERRRO, not supported + ubInst[sIndex + 1]; // ERROR, not supported + bbInst[sIndex]; // ERROR, not supported iArray[2]; - iArray[sIndex * 2]; // ERRRO, not supported + iArray[sIndex * 2]; // ERROR, not supported textureGatherOffset(sArray[0], vec2(0.1), ivec2(inf)); // ERROR, offset not constant textureGatherOffsets(sArray[0], vec2(0.1), constOffsets); // ERROR, not available } diff --git a/Test/330.frag b/Test/330.frag index 57736b0c..9afa8f82 100644 --- a/Test/330.frag +++ b/Test/330.frag @@ -148,3 +148,5 @@ void fooKeyMem() { KeyMem.precise; } + +layout(location=28, index=2) out vec4 outIndex2; // ERROR index out of range \ No newline at end of file diff --git a/Test/400.vert b/Test/400.vert new file mode 100644 index 00000000..2c3dd042 --- /dev/null +++ b/Test/400.vert @@ -0,0 +1,9 @@ +#version 400 core + +in double d; // ERROR, no doubles +in dvec3 d3; // ERROR, no doubles +in dmat4 dm4; // ERROR, no doubles + +void main() +{ +} diff --git a/Test/410.vert b/Test/410.vert new file mode 100644 index 00000000..0ecf4768 --- /dev/null +++ b/Test/410.vert @@ -0,0 +1,9 @@ +#version 410 core + +in double d; +in dvec3 d3; +in dmat4 dm4; + +void main() +{ +} diff --git a/Test/420.comp b/Test/420.comp new file mode 100755 index 00000000..d92e6f0d --- /dev/null +++ b/Test/420.comp @@ -0,0 +1,30 @@ +#version 420 + +layout(local_size_x = 2) in; // ERROR, no compute + +#extension GL_ARB_compute_shader : enable + +layout(local_size_x = 2, local_size_y = 4, local_size_z = 6) in; + +shared vec3 sfoo; + +void main() +{ + sfoo = vec3(gl_WorkGroupSize.x, gl_WorkGroupSize.y, gl_WorkGroupSize.z); + sfoo += gl_WorkGroupSize + gl_NumWorkGroups + gl_WorkGroupID + gl_LocalInvocationID + gl_GlobalInvocationID; + sfoo *= gl_LocalInvocationIndex; + sfoo += gl_MaxComputeWorkGroupCount + gl_MaxComputeWorkGroupSize; + sfoo *= gl_MaxComputeUniformComponents + + gl_MaxComputeTextureImageUnits + + gl_MaxComputeImageUniforms + + gl_MaxComputeAtomicCounters + + gl_MaxComputeAtomicCounterBuffers; + + barrier(); + memoryBarrier(); + memoryBarrierAtomicCounter(); + memoryBarrierBuffer(); + memoryBarrierImage(); + memoryBarrierShared(); + groupMemoryBarrier(); +} \ No newline at end of file diff --git a/Test/baseResults/100.frag.out b/Test/baseResults/100.frag.out index 7af716d8..70b89349 100644 --- a/Test/baseResults/100.frag.out +++ b/Test/baseResults/100.frag.out @@ -82,7 +82,7 @@ ERROR: 0:192: '.' : cannot apply to an array: nothing ERROR: 0:193: '.length' : not supported for this version or the enabled extensions ERROR: 0:194: '.' : cannot apply to an array: method ERROR: 0:194: 'a' : can't use function syntax on variable -ERROR: 0:214: 'non-constant global initializer' : not supported with this profile: es +ERROR: 0:214: 'non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)' : not supported for this version or the enabled extensions ERROR: 0:3000: '#error' : line of this error should be 3000 ERROR: 0:3002: '' : syntax error ERROR: 77 compilation errors. No code generated. @@ -90,6 +90,7 @@ ERROR: 77 compilation errors. No code generated. Shader version: 100 Requested GL_EXT_frag_depth +Requested GL_EXT_shader_non_constant_global_initializers Requested GL_EXT_shader_texture_lod Requested GL_OES_EGL_image_external Requested GL_OES_standard_derivatives @@ -376,6 +377,18 @@ ERROR: node is still EOpNull! 0:214 false case 0:214 Constant: 0:214 2 (const int) +0:220 Sequence +0:220 move second child to first child (temp mediump int) +0:220 'init2' (global mediump int) +0:220 Test condition and select (temp mediump int) +0:220 Condition +0:220 'gl_FrontFacing' (gl_FrontFacing bool Face) +0:220 true case +0:220 Constant: +0:220 1 (const int) +0:220 false case +0:220 Constant: +0:220 2 (const int) 0:? Linker Objects 0:? 'a' (global 3-element array of mediump int) 0:? 'uint' (global mediump int) @@ -407,6 +420,7 @@ ERROR: node is still EOpNull! 0:? 'fi3' (const mediump float) 0:? 5.000000 0:? 'init1' (global mediump int) +0:? 'init2' (global mediump int) Linked fragment stage: @@ -414,6 +428,7 @@ Linked fragment stage: Shader version: 100 Requested GL_EXT_frag_depth +Requested GL_EXT_shader_non_constant_global_initializers Requested GL_EXT_shader_texture_lod Requested GL_OES_EGL_image_external Requested GL_OES_standard_derivatives @@ -700,6 +715,18 @@ ERROR: node is still EOpNull! 0:214 false case 0:214 Constant: 0:214 2 (const int) +0:220 Sequence +0:220 move second child to first child (temp mediump int) +0:220 'init2' (global mediump int) +0:220 Test condition and select (temp mediump int) +0:220 Condition +0:220 'gl_FrontFacing' (gl_FrontFacing bool Face) +0:220 true case +0:220 Constant: +0:220 1 (const int) +0:220 false case +0:220 Constant: +0:220 2 (const int) 0:? Linker Objects 0:? 'a' (global 3-element array of mediump int) 0:? 'uint' (global mediump int) @@ -731,4 +758,5 @@ ERROR: node is still EOpNull! 0:? 'fi3' (const mediump float) 0:? 5.000000 0:? 'init1' (global mediump int) +0:? 'init2' (global mediump int) diff --git a/Test/baseResults/300BuiltIns.frag.out b/Test/baseResults/300BuiltIns.frag.out index 2bb4cf5e..edcae462 100644 --- a/Test/baseResults/300BuiltIns.frag.out +++ b/Test/baseResults/300BuiltIns.frag.out @@ -136,24 +136,24 @@ ERROR: node is still EOpNull! 0:53 isinf (global 4-component vector of bool) 0:53 'v4' (global mediump 4-component vector of float) 0:56 Sequence -0:56 move second child to first child (temp mediump int) +0:56 move second child to first child (temp highp int) 0:56 'i' (temp mediump int) -0:56 floatBitsToInt (global mediump int) +0:56 floatBitsToInt (global highp int) 0:56 'f' (global mediump float) 0:57 Sequence -0:57 move second child to first child (temp mediump 4-component vector of uint) +0:57 move second child to first child (temp highp 4-component vector of uint) 0:57 'uv11' (temp mediump 4-component vector of uint) -0:57 floatBitsToUint (global mediump 4-component vector of uint) +0:57 floatBitsToUint (global highp 4-component vector of uint) 0:57 'v4' (global mediump 4-component vector of float) 0:58 Sequence -0:58 move second child to first child (temp mediump 4-component vector of float) +0:58 move second child to first child (temp highp 4-component vector of float) 0:58 'v14' (temp mediump 4-component vector of float) -0:58 intBitsToFloat (global mediump 4-component vector of float) +0:58 intBitsToFloat (global highp 4-component vector of float) 0:58 'iv4a' (global mediump 4-component vector of int) 0:59 Sequence -0:59 move second child to first child (temp mediump 2-component vector of float) +0:59 move second child to first child (temp highp 2-component vector of float) 0:59 'v15' (temp mediump 2-component vector of float) -0:59 uintBitsToFloat (global mediump 2-component vector of float) +0:59 uintBitsToFloat (global highp 2-component vector of float) 0:59 'uv2c' (global mediump 2-component vector of uint) 0:62 Sequence 0:62 move second child to first child (temp highp uint) @@ -343,24 +343,24 @@ ERROR: node is still EOpNull! 0:53 isinf (global 4-component vector of bool) 0:53 'v4' (global mediump 4-component vector of float) 0:56 Sequence -0:56 move second child to first child (temp mediump int) +0:56 move second child to first child (temp highp int) 0:56 'i' (temp mediump int) -0:56 floatBitsToInt (global mediump int) +0:56 floatBitsToInt (global highp int) 0:56 'f' (global mediump float) 0:57 Sequence -0:57 move second child to first child (temp mediump 4-component vector of uint) +0:57 move second child to first child (temp highp 4-component vector of uint) 0:57 'uv11' (temp mediump 4-component vector of uint) -0:57 floatBitsToUint (global mediump 4-component vector of uint) +0:57 floatBitsToUint (global highp 4-component vector of uint) 0:57 'v4' (global mediump 4-component vector of float) 0:58 Sequence -0:58 move second child to first child (temp mediump 4-component vector of float) +0:58 move second child to first child (temp highp 4-component vector of float) 0:58 'v14' (temp mediump 4-component vector of float) -0:58 intBitsToFloat (global mediump 4-component vector of float) +0:58 intBitsToFloat (global highp 4-component vector of float) 0:58 'iv4a' (global mediump 4-component vector of int) 0:59 Sequence -0:59 move second child to first child (temp mediump 2-component vector of float) +0:59 move second child to first child (temp highp 2-component vector of float) 0:59 'v15' (temp mediump 2-component vector of float) -0:59 uintBitsToFloat (global mediump 2-component vector of float) +0:59 uintBitsToFloat (global highp 2-component vector of float) 0:59 'uv2c' (global mediump 2-component vector of uint) 0:62 Sequence 0:62 move second child to first child (temp highp uint) diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out index 67129d1d..b56f0702 100644 --- a/Test/baseResults/310.comp.out +++ b/Test/baseResults/310.comp.out @@ -17,6 +17,8 @@ ERROR: 0:61: 'assign' : l-value required "ro" (can't modify a readonly buffer) ERROR: 0:66: 'buffer' : buffers can be declared only as blocks ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:76: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:81: 'sampler/image' : type requires declaration of default precision qualifier +ERROR: 0:82: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:87: 'imageAtomicCompSwap' : required extension not requested: GL_OES_shader_image_atomic ERROR: 0:88: 'imageAtomicAdd' : required extension not requested: GL_OES_shader_image_atomic ERROR: 0:89: 'imageAtomicMin' : required extension not requested: GL_OES_shader_image_atomic @@ -79,7 +81,7 @@ ERROR: 0:227: 'input block' : not supported in this stage: compute ERROR: 0:231: 'output block' : not supported in this stage: compute WARNING: 0:235: 't__' : identifiers containing consecutive underscores ("__") are reserved WARNING: 0:238: '#define' : names containing consecutive underscores are reserved: __D -ERROR: 77 compilation errors. No code generated. +ERROR: 79 compilation errors. No code generated. Shader version: 310 @@ -143,7 +145,7 @@ ERROR: node is still EOpNull! 0:87 'i' (temp highp int) 0:87 'i' (temp highp int) 0:88 imageAtomicAdd (global highp uint) -0:88 'uimg2D' (layout(r32ui ) uniform highp uimage2D) +0:88 'uimg2D' (layout(r32ui ) uniform mediump uimage2D) 0:88 Construct ivec2 (temp highp 2-component vector of int) 0:88 'i' (temp highp int) 0:88 'i' (temp highp int) @@ -177,7 +179,7 @@ ERROR: node is still EOpNull! 0:92 0 (const int) 0:92 0 (const int) 0:93 imageLoad (global highp 4-component vector of float) -0:93 'img2Drgba' (layout(rgba32f ) readonly uniform lowp image2D) +0:93 'img2Drgba' (layout(rgba32f ) readonly uniform mediump image2D) 0:93 Construct ivec2 (temp highp 2-component vector of int) 0:93 'i' (temp highp int) 0:93 'i' (temp highp int) @@ -467,14 +469,14 @@ ERROR: node is still EOpNull! 0:? 'ii2da' (writeonly uniform highp iimage2DArray) 0:? 'iimg2D' (layout(r32i ) uniform highp iimage2D) 0:? 'iimg2Drgba' (layout(rgba32i ) readonly uniform highp iimage2D) -0:? 'img2Drgba' (layout(rgba32f ) readonly uniform lowp image2D) -0:? 'uimg2D' (layout(r32ui ) uniform highp uimage2D) +0:? 'img2Drgba' (layout(rgba32f ) readonly uniform mediump image2D) +0:? 'uimg2D' (layout(r32ui ) uniform mediump uimage2D) 0:? 'vol' (volatile temp highp float) 0:? 'vol2' (readonly temp highp int) 0:? 'qualim1' (layout(r32i ) coherent readonly uniform highp iimage2D) 0:? 'qualim2' (layout(r32i ) coherent restrict readonly uniform highp iimage2D) 0:? 'i1bad' (layout(rg8i ) readonly uniform highp uimage2D) -0:? 'i2bad' (layout(rgba32i ) readonly uniform lowp image2D) +0:? 'i2bad' (layout(rgba32i ) readonly uniform highp image2D) 0:? 'i3bad' (layout(rgba32f ) readonly uniform highp uimage2D) 0:? 'i4bad' (layout(r8_snorm ) readonly uniform highp iimage2D) 0:? 'i5bad' (layout(rgba32ui ) readonly uniform highp iimage2D) @@ -489,13 +491,13 @@ ERROR: node is still EOpNull! 0:? 'dm' (global 2X4 matrix of double) 0:? 'sca' (uniform mediump samplerCubeArray) 0:? 'i2dr' (uniform mediump iimage2DRect) -0:? 'i2dms' (uniform lowp image2DMS) +0:? 'i2dms' (uniform highp image2DMS) 0:? 'u2dmsa' (uniform mediump uimage2DMSArray) -0:? 'okay1' (layout(r32f ) coherent volatile restrict readonly writeonly uniform lowp image2D) +0:? 'okay1' (layout(r32f ) coherent volatile restrict readonly writeonly uniform highp image2D) 0:? 'okay2' (layout(r32i ) coherent volatile restrict readonly uniform highp iimage2D) 0:? 'okay3' (layout(r32ui ) coherent volatile restrict writeonly uniform highp uimage2D) -0:? 'okay4' (layout(r32f ) coherent volatile restrict uniform lowp image2D) -0:? 'badQ1' (layout(rgba32f ) coherent volatile restrict uniform lowp image2D) +0:? 'okay4' (layout(r32f ) coherent volatile restrict uniform highp image2D) +0:? 'badQ1' (layout(rgba32f ) coherent volatile restrict uniform highp image2D) 0:? 'badQ2' (layout(rgba8i ) coherent volatile restrict uniform highp iimage2D) 0:? 'badQ3' (layout(rgba16ui ) coherent volatile restrict uniform highp uimage2D) 0:? 'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values}) @@ -570,7 +572,7 @@ ERROR: node is still EOpNull! 0:87 'i' (temp highp int) 0:87 'i' (temp highp int) 0:88 imageAtomicAdd (global highp uint) -0:88 'uimg2D' (layout(r32ui ) uniform highp uimage2D) +0:88 'uimg2D' (layout(r32ui ) uniform mediump uimage2D) 0:88 Construct ivec2 (temp highp 2-component vector of int) 0:88 'i' (temp highp int) 0:88 'i' (temp highp int) @@ -604,7 +606,7 @@ ERROR: node is still EOpNull! 0:92 0 (const int) 0:92 0 (const int) 0:93 imageLoad (global highp 4-component vector of float) -0:93 'img2Drgba' (layout(rgba32f ) readonly uniform lowp image2D) +0:93 'img2Drgba' (layout(rgba32f ) readonly uniform mediump image2D) 0:93 Construct ivec2 (temp highp 2-component vector of int) 0:93 'i' (temp highp int) 0:93 'i' (temp highp int) @@ -894,14 +896,14 @@ ERROR: node is still EOpNull! 0:? 'ii2da' (writeonly uniform highp iimage2DArray) 0:? 'iimg2D' (layout(r32i ) uniform highp iimage2D) 0:? 'iimg2Drgba' (layout(rgba32i ) readonly uniform highp iimage2D) -0:? 'img2Drgba' (layout(rgba32f ) readonly uniform lowp image2D) -0:? 'uimg2D' (layout(r32ui ) uniform highp uimage2D) +0:? 'img2Drgba' (layout(rgba32f ) readonly uniform mediump image2D) +0:? 'uimg2D' (layout(r32ui ) uniform mediump uimage2D) 0:? 'vol' (volatile temp highp float) 0:? 'vol2' (readonly temp highp int) 0:? 'qualim1' (layout(r32i ) coherent readonly uniform highp iimage2D) 0:? 'qualim2' (layout(r32i ) coherent restrict readonly uniform highp iimage2D) 0:? 'i1bad' (layout(rg8i ) readonly uniform highp uimage2D) -0:? 'i2bad' (layout(rgba32i ) readonly uniform lowp image2D) +0:? 'i2bad' (layout(rgba32i ) readonly uniform highp image2D) 0:? 'i3bad' (layout(rgba32f ) readonly uniform highp uimage2D) 0:? 'i4bad' (layout(r8_snorm ) readonly uniform highp iimage2D) 0:? 'i5bad' (layout(rgba32ui ) readonly uniform highp iimage2D) @@ -916,13 +918,13 @@ ERROR: node is still EOpNull! 0:? 'dm' (global 2X4 matrix of double) 0:? 'sca' (uniform mediump samplerCubeArray) 0:? 'i2dr' (uniform mediump iimage2DRect) -0:? 'i2dms' (uniform lowp image2DMS) +0:? 'i2dms' (uniform highp image2DMS) 0:? 'u2dmsa' (uniform mediump uimage2DMSArray) -0:? 'okay1' (layout(r32f ) coherent volatile restrict readonly writeonly uniform lowp image2D) +0:? 'okay1' (layout(r32f ) coherent volatile restrict readonly writeonly uniform highp image2D) 0:? 'okay2' (layout(r32i ) coherent volatile restrict readonly uniform highp iimage2D) 0:? 'okay3' (layout(r32ui ) coherent volatile restrict writeonly uniform highp uimage2D) -0:? 'okay4' (layout(r32f ) coherent volatile restrict uniform lowp image2D) -0:? 'badQ1' (layout(rgba32f ) coherent volatile restrict uniform lowp image2D) +0:? 'okay4' (layout(r32f ) coherent volatile restrict uniform highp image2D) +0:? 'badQ1' (layout(rgba32f ) coherent volatile restrict uniform highp image2D) 0:? 'badQ2' (layout(rgba8i ) coherent volatile restrict uniform highp iimage2D) 0:? 'badQ3' (layout(rgba16ui ) coherent volatile restrict uniform highp uimage2D) 0:? 'wo' (layout(column_major shared ) writeonly buffer block{layout(column_major shared ) buffer highp int value, layout(column_major shared ) buffer implicitly-sized array of highp float values}) diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out index 0d2ad8d0..905a9ca9 100644 --- a/Test/baseResults/310.frag.out +++ b/Test/baseResults/310.frag.out @@ -20,9 +20,11 @@ ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, ERROR: 0:45: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset] ERROR: 0:66: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:66: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:67: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:67: '' : image variables not declared 'writeonly' must have a format layout qualifier ERROR: 0:68: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:68: '' : image variables not declared 'writeonly' must have a format layout qualifier +ERROR: 0:69: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:69: '' : image variables not declared 'writeonly' must have a format layout qualifier ERROR: 0:73: 'binding' : requires block, or sampler/image, or atomic-counter type ERROR: 0:77: 'location' : location is too large @@ -31,6 +33,7 @@ ERROR: 0:82: 'location' : too large for fragment output ERROR: 0:82: 'location' : overlapping use of location 40 ERROR: 0:83: 'non-literal layout-id value' : not supported with this profile: es ERROR: 0:83: 'layout-id value' : cannot be negative +ERROR: 0:96: 'sampler/image' : type requires declaration of default precision qualifier ERROR: 0:110: 'out' : cannot be bool ERROR: 0:111: 'image2D' : sampler/image types can only be used in uniform variables or function parameters: imageOut ERROR: 0:111: '' : image variables not declared 'writeonly' must have a format layout qualifier @@ -130,7 +133,7 @@ ERROR: 0:427: 'blend equation' : can only apply to a standalone qualifier ERROR: 0:428: 'blend equation' : can only apply to a standalone qualifier ERROR: 0:429: 'blend_support' : unknown blend equation ERROR: 0:431: 'fragment-shader array-of-array output' : not supported with this profile: es -ERROR: 122 compilation errors. No code generated. +ERROR: 125 compilation errors. No code generated. Shader version: 310 @@ -351,7 +354,7 @@ ERROR: node is still EOpNull! 0:102 move second child to first child (temp highp 2-component vector of int) 0:102 'v2' (temp highp 2-component vector of int) 0:102 textureSize (global highp 2-component vector of int) -0:102 's2dms' (uniform highp sampler2DMS) +0:102 's2dms' (uniform mediump sampler2DMS) 0:103 move second child to first child (temp highp 2-component vector of int) 0:103 'v2' (temp highp 2-component vector of int) 0:103 imageQuerySize (global highp 2-component vector of int) @@ -363,7 +366,7 @@ ERROR: node is still EOpNull! 0:105 move second child to first child (temp highp 2-component vector of int) 0:105 'v2' (temp highp 2-component vector of int) 0:105 imageQuerySize (global highp 2-component vector of int) -0:105 'iCube' (layout(binding=5 ) uniform lowp imageCube) +0:105 'iCube' (layout(binding=5 ) uniform mediump imageCube) 0:106 move second child to first child (temp highp 3-component vector of int) 0:106 'v3' (temp highp 3-component vector of int) 0:106 imageQuerySize (global highp 3-component vector of int) @@ -371,7 +374,7 @@ ERROR: node is still EOpNull! 0:107 move second child to first child (temp highp 2-component vector of int) 0:107 'v2' (temp highp 2-component vector of int) 0:107 imageQuerySize (global highp 2-component vector of int) -0:107 'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform highp image2D) +0:107 'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform mediump image2D) 0:165 Function Definition: fooIO( (global void) 0:165 Function Parameters: 0:167 Sequence @@ -928,9 +931,9 @@ ERROR: node is still EOpNull! 0:? 's2' (layout(binding=3 ) uniform highp sampler2D) 0:? 'i2D' (layout(binding=2 ) writeonly uniform highp image2D) 0:? 'i3D' (layout(binding=4 ) readonly uniform mediump image3D) -0:? 'iCube' (layout(binding=5 ) uniform lowp imageCube) +0:? 'iCube' (layout(binding=5 ) uniform mediump imageCube) 0:? 'i2DA' (layout(binding=6 ) uniform mediump image2DArray) -0:? 'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform highp image2D) +0:? 'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform mediump image2D) 0:? 'bbi' (layout(binding=1 column_major shared ) uniform block{layout(column_major shared ) uniform mediump int foo, layout(binding=2 column_major shared ) uniform mediump float f}) 0:? 'centroidIn' (centroid smooth in mediump 4-component vector of float) 0:? 'bigl' (uniform mediump 4-component vector of float) @@ -941,7 +944,7 @@ ERROR: node is still EOpNull! 0:? 'bshari' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform mediump int i}) 0:? 'smoothIn' (smooth in mediump 4-component vector of float) 0:? 'flatIn' (flat in mediump int) -0:? 's2dms' (uniform highp sampler2DMS) +0:? 's2dms' (uniform mediump sampler2DMS) 0:? 'bout' (out bool) 0:? 'imageOut' (out highp image2D) 0:? 'mout' (out mediump 2X3 matrix of float) @@ -1232,7 +1235,7 @@ ERROR: node is still EOpNull! 0:102 move second child to first child (temp highp 2-component vector of int) 0:102 'v2' (temp highp 2-component vector of int) 0:102 textureSize (global highp 2-component vector of int) -0:102 's2dms' (uniform highp sampler2DMS) +0:102 's2dms' (uniform mediump sampler2DMS) 0:103 move second child to first child (temp highp 2-component vector of int) 0:103 'v2' (temp highp 2-component vector of int) 0:103 imageQuerySize (global highp 2-component vector of int) @@ -1244,7 +1247,7 @@ ERROR: node is still EOpNull! 0:105 move second child to first child (temp highp 2-component vector of int) 0:105 'v2' (temp highp 2-component vector of int) 0:105 imageQuerySize (global highp 2-component vector of int) -0:105 'iCube' (layout(binding=5 ) uniform lowp imageCube) +0:105 'iCube' (layout(binding=5 ) uniform mediump imageCube) 0:106 move second child to first child (temp highp 3-component vector of int) 0:106 'v3' (temp highp 3-component vector of int) 0:106 imageQuerySize (global highp 3-component vector of int) @@ -1252,7 +1255,7 @@ ERROR: node is still EOpNull! 0:107 move second child to first child (temp highp 2-component vector of int) 0:107 'v2' (temp highp 2-component vector of int) 0:107 imageQuerySize (global highp 2-component vector of int) -0:107 'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform highp image2D) +0:107 'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform mediump image2D) 0:165 Function Definition: fooIO( (global void) 0:165 Function Parameters: 0:167 Sequence @@ -1809,9 +1812,9 @@ ERROR: node is still EOpNull! 0:? 's2' (layout(binding=3 ) uniform highp sampler2D) 0:? 'i2D' (layout(binding=2 ) writeonly uniform highp image2D) 0:? 'i3D' (layout(binding=4 ) readonly uniform mediump image3D) -0:? 'iCube' (layout(binding=5 ) uniform lowp imageCube) +0:? 'iCube' (layout(binding=5 ) uniform mediump imageCube) 0:? 'i2DA' (layout(binding=6 ) uniform mediump image2DArray) -0:? 'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform highp image2D) +0:? 'i2Dqualified' (layout(binding=6 ) coherent volatile restrict uniform mediump image2D) 0:? 'bbi' (layout(binding=1 column_major shared ) uniform block{layout(column_major shared ) uniform mediump int foo, layout(binding=2 column_major shared ) uniform mediump float f}) 0:? 'centroidIn' (centroid smooth in mediump 4-component vector of float) 0:? 'bigl' (uniform mediump 4-component vector of float) @@ -1822,7 +1825,7 @@ ERROR: node is still EOpNull! 0:? 'bshari' (layout(column_major shared ) uniform block{layout(column_major shared ) uniform mediump int i}) 0:? 'smoothIn' (smooth in mediump 4-component vector of float) 0:? 'flatIn' (flat in mediump int) -0:? 's2dms' (uniform highp sampler2DMS) +0:? 's2dms' (uniform mediump sampler2DMS) 0:? 'bout' (out bool) 0:? 'imageOut' (out highp image2D) 0:? 'mout' (out mediump 2X3 matrix of float) diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out index 9ce13f44..b8b39f59 100644 --- a/Test/baseResults/310.vert.out +++ b/Test/baseResults/310.vert.out @@ -291,8 +291,8 @@ ERROR: node is still EOpNull! 0:156 'inf' (in highp 2-component vector of float) 0:156 'ing' (in highp 2-component vector of float) 0:156 'h' (noContraction temp highp 2-component vector of float) -0:157 indirect index (temp highp sampler2D) -0:157 'sArray' (uniform 4-element array of highp sampler2D) +0:157 indirect index (temp lowp sampler2D) +0:157 'sArray' (uniform 4-element array of lowp sampler2D) 0:157 add (temp highp int) 0:157 'sIndex' (uniform highp int) 0:157 Constant: @@ -330,19 +330,19 @@ ERROR: node is still EOpNull! 0:164 'sIndex' (uniform highp int) 0:164 Constant: 0:164 2 (const int) -0:165 textureGatherOffset (global highp 4-component vector of float) -0:165 direct index (temp highp sampler2D) -0:165 'sArray' (uniform 4-element array of highp sampler2D) +0:165 textureGatherOffset (global lowp 4-component vector of float) +0:165 direct index (temp lowp sampler2D) +0:165 'sArray' (uniform 4-element array of lowp sampler2D) 0:165 Constant: 0:165 0 (const int) 0:165 Constant: 0:165 0.100000 0:165 0.100000 -0:165 Convert float to int (temp highp 2-component vector of int) +0:165 Convert float to int (temp lowp 2-component vector of int) 0:165 'inf' (in highp 2-component vector of float) -0:166 textureGatherOffsets (global highp 4-component vector of float) -0:166 direct index (temp highp sampler2D) -0:166 'sArray' (uniform 4-element array of highp sampler2D) +0:166 textureGatherOffsets (global lowp 4-component vector of float) +0:166 direct index (temp lowp sampler2D) +0:166 'sArray' (uniform 4-element array of lowp sampler2D) 0:166 Constant: 0:166 0 (const int) 0:166 Constant: @@ -366,8 +366,8 @@ ERROR: node is still EOpNull! 0:174 'inf' (in highp 2-component vector of float) 0:174 'ing' (in highp 2-component vector of float) 0:174 'h' (noContraction temp highp 2-component vector of float) -0:175 indirect index (temp highp sampler2D) -0:175 'sArray' (uniform 4-element array of highp sampler2D) +0:175 indirect index (temp lowp sampler2D) +0:175 'sArray' (uniform 4-element array of lowp sampler2D) 0:175 add (temp highp int) 0:175 'sIndex' (uniform highp int) 0:175 Constant: @@ -394,19 +394,19 @@ ERROR: node is still EOpNull! 0:179 'sIndex' (uniform highp int) 0:179 Constant: 0:179 2 (const int) -0:180 textureGatherOffset (global highp 4-component vector of float) -0:180 direct index (temp highp sampler2D) -0:180 'sArray' (uniform 4-element array of highp sampler2D) +0:180 textureGatherOffset (global lowp 4-component vector of float) +0:180 direct index (temp lowp sampler2D) +0:180 'sArray' (uniform 4-element array of lowp sampler2D) 0:180 Constant: 0:180 0 (const int) 0:180 Constant: 0:180 0.100000 0:180 0.100000 -0:180 Convert float to int (temp highp 2-component vector of int) +0:180 Convert float to int (temp lowp 2-component vector of int) 0:180 'inf' (in highp 2-component vector of float) -0:181 textureGatherOffsets (global highp 4-component vector of float) -0:181 direct index (temp highp sampler2D) -0:181 'sArray' (uniform 4-element array of highp sampler2D) +0:181 textureGatherOffsets (global lowp 4-component vector of float) +0:181 direct index (temp lowp sampler2D) +0:181 'sArray' (uniform 4-element array of lowp sampler2D) 0:181 Constant: 0:181 0 (const int) 0:181 Constant: @@ -421,9 +421,9 @@ ERROR: node is still EOpNull! 0:181 0 (const int) 0:181 0 (const int) 0:181 0 (const int) -0:182 textureGatherOffsets (global highp 4-component vector of float) -0:182 direct index (temp highp sampler2D) -0:182 'sArray' (uniform 4-element array of highp sampler2D) +0:182 textureGatherOffsets (global lowp 4-component vector of float) +0:182 direct index (temp lowp sampler2D) +0:182 'sArray' (uniform 4-element array of lowp sampler2D) 0:182 Constant: 0:182 0 (const int) 0:182 Constant: @@ -927,7 +927,7 @@ ERROR: node is still EOpNull! 0:? 'us2dms' (uniform highp usampler2DMS) 0:? 'us2dmsa' (uniform mediump usampler2DMSArray) 0:? 'outb' (smooth out bool) -0:? 'outo' (smooth out highp sampler2D) +0:? 'outo' (smooth out lowp sampler2D) 0:? 'outa' (smooth out 4-element array of highp float) 0:? 'outaa' (smooth out 4-element array of 2-element array of highp float) 0:? 'outs' (smooth out structure{global highp float f}) @@ -949,7 +949,7 @@ ERROR: node is still EOpNull! 0:? 'inf' (in highp 2-component vector of float) 0:? 'ing' (in highp 2-component vector of float) 0:? 'offsets' (uniform 4-element array of highp 2-component vector of int) -0:? 'sArray' (uniform 4-element array of highp sampler2D) +0:? 'sArray' (uniform 4-element array of lowp sampler2D) 0:? 'sIndex' (uniform highp int) 0:? 'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint) 0:? 'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i}) @@ -1222,8 +1222,8 @@ ERROR: node is still EOpNull! 0:156 'inf' (in highp 2-component vector of float) 0:156 'ing' (in highp 2-component vector of float) 0:156 'h' (noContraction temp highp 2-component vector of float) -0:157 indirect index (temp highp sampler2D) -0:157 'sArray' (uniform 4-element array of highp sampler2D) +0:157 indirect index (temp lowp sampler2D) +0:157 'sArray' (uniform 4-element array of lowp sampler2D) 0:157 add (temp highp int) 0:157 'sIndex' (uniform highp int) 0:157 Constant: @@ -1261,19 +1261,19 @@ ERROR: node is still EOpNull! 0:164 'sIndex' (uniform highp int) 0:164 Constant: 0:164 2 (const int) -0:165 textureGatherOffset (global highp 4-component vector of float) -0:165 direct index (temp highp sampler2D) -0:165 'sArray' (uniform 4-element array of highp sampler2D) +0:165 textureGatherOffset (global lowp 4-component vector of float) +0:165 direct index (temp lowp sampler2D) +0:165 'sArray' (uniform 4-element array of lowp sampler2D) 0:165 Constant: 0:165 0 (const int) 0:165 Constant: 0:165 0.100000 0:165 0.100000 -0:165 Convert float to int (temp highp 2-component vector of int) +0:165 Convert float to int (temp lowp 2-component vector of int) 0:165 'inf' (in highp 2-component vector of float) -0:166 textureGatherOffsets (global highp 4-component vector of float) -0:166 direct index (temp highp sampler2D) -0:166 'sArray' (uniform 4-element array of highp sampler2D) +0:166 textureGatherOffsets (global lowp 4-component vector of float) +0:166 direct index (temp lowp sampler2D) +0:166 'sArray' (uniform 4-element array of lowp sampler2D) 0:166 Constant: 0:166 0 (const int) 0:166 Constant: @@ -1297,8 +1297,8 @@ ERROR: node is still EOpNull! 0:174 'inf' (in highp 2-component vector of float) 0:174 'ing' (in highp 2-component vector of float) 0:174 'h' (noContraction temp highp 2-component vector of float) -0:175 indirect index (temp highp sampler2D) -0:175 'sArray' (uniform 4-element array of highp sampler2D) +0:175 indirect index (temp lowp sampler2D) +0:175 'sArray' (uniform 4-element array of lowp sampler2D) 0:175 add (temp highp int) 0:175 'sIndex' (uniform highp int) 0:175 Constant: @@ -1325,19 +1325,19 @@ ERROR: node is still EOpNull! 0:179 'sIndex' (uniform highp int) 0:179 Constant: 0:179 2 (const int) -0:180 textureGatherOffset (global highp 4-component vector of float) -0:180 direct index (temp highp sampler2D) -0:180 'sArray' (uniform 4-element array of highp sampler2D) +0:180 textureGatherOffset (global lowp 4-component vector of float) +0:180 direct index (temp lowp sampler2D) +0:180 'sArray' (uniform 4-element array of lowp sampler2D) 0:180 Constant: 0:180 0 (const int) 0:180 Constant: 0:180 0.100000 0:180 0.100000 -0:180 Convert float to int (temp highp 2-component vector of int) +0:180 Convert float to int (temp lowp 2-component vector of int) 0:180 'inf' (in highp 2-component vector of float) -0:181 textureGatherOffsets (global highp 4-component vector of float) -0:181 direct index (temp highp sampler2D) -0:181 'sArray' (uniform 4-element array of highp sampler2D) +0:181 textureGatherOffsets (global lowp 4-component vector of float) +0:181 direct index (temp lowp sampler2D) +0:181 'sArray' (uniform 4-element array of lowp sampler2D) 0:181 Constant: 0:181 0 (const int) 0:181 Constant: @@ -1352,9 +1352,9 @@ ERROR: node is still EOpNull! 0:181 0 (const int) 0:181 0 (const int) 0:181 0 (const int) -0:182 textureGatherOffsets (global highp 4-component vector of float) -0:182 direct index (temp highp sampler2D) -0:182 'sArray' (uniform 4-element array of highp sampler2D) +0:182 textureGatherOffsets (global lowp 4-component vector of float) +0:182 direct index (temp lowp sampler2D) +0:182 'sArray' (uniform 4-element array of lowp sampler2D) 0:182 Constant: 0:182 0 (const int) 0:182 Constant: @@ -1858,7 +1858,7 @@ ERROR: node is still EOpNull! 0:? 'us2dms' (uniform highp usampler2DMS) 0:? 'us2dmsa' (uniform mediump usampler2DMSArray) 0:? 'outb' (smooth out bool) -0:? 'outo' (smooth out highp sampler2D) +0:? 'outo' (smooth out lowp sampler2D) 0:? 'outa' (smooth out 4-element array of highp float) 0:? 'outaa' (smooth out 4-element array of 2-element array of highp float) 0:? 'outs' (smooth out structure{global highp float f}) @@ -1880,7 +1880,7 @@ ERROR: node is still EOpNull! 0:? 'inf' (in highp 2-component vector of float) 0:? 'ing' (in highp 2-component vector of float) 0:? 'offsets' (uniform 4-element array of highp 2-component vector of int) -0:? 'sArray' (uniform 4-element array of highp sampler2D) +0:? 'sArray' (uniform 4-element array of lowp sampler2D) 0:? 'sIndex' (uniform highp int) 0:? 'auArray' (layout(binding=0 offset=0 ) uniform 2-element array of highp atomic_uint) 0:? 'ubInst' (layout(column_major shared ) uniform 4-element array of block{layout(column_major shared ) uniform highp int i}) diff --git a/Test/baseResults/330.frag.out b/Test/baseResults/330.frag.out index 5d145efd..904ad3ed 100644 --- a/Test/baseResults/330.frag.out +++ b/Test/baseResults/330.frag.out @@ -37,7 +37,8 @@ ERROR: 0:140: 'textureQueryLod' : no matching overloaded function found ERROR: 0:140: 'assign' : cannot convert from 'const float' to 'temp 2-component vector of float' ERROR: 0:141: 'textureQueryLod' : no matching overloaded function found ERROR: 0:141: 'assign' : cannot convert from 'const float' to 'temp 2-component vector of float' -ERROR: 38 compilation errors. No code generated. +ERROR: 0:152: 'index' : value must be 0 or 1 +ERROR: 39 compilation errors. No code generated. Shader version: 330 @@ -122,6 +123,7 @@ ERROR: node is still EOpNull! 0:? 'samp2Ds' (uniform sampler2DShadow) 0:? 'precise' (global int) 0:? 'KeyMem' (global structure{global int precise}) +0:? 'outIndex2' (layout(location=28 index=0 ) out 4-component vector of float) Linked fragment stage: @@ -211,4 +213,5 @@ ERROR: node is still EOpNull! 0:? 'samp2Ds' (uniform sampler2DShadow) 0:? 'precise' (global int) 0:? 'KeyMem' (global structure{global int precise}) +0:? 'outIndex2' (layout(location=28 index=0 ) out 4-component vector of float) diff --git a/Test/baseResults/400.vert.out b/Test/baseResults/400.vert.out new file mode 100755 index 00000000..946f21d5 --- /dev/null +++ b/Test/baseResults/400.vert.out @@ -0,0 +1,34 @@ +400.vert +Warning, version 400 is not yet complete; most version-specific features are present, but some are missing. +ERROR: 0:3: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions +ERROR: 0:4: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions +ERROR: 0:5: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions +ERROR: 3 compilation errors. No code generated. + + +Shader version: 400 +ERROR: node is still EOpNull! +0:7 Function Definition: main( (global void) +0:7 Function Parameters: +0:? Linker Objects +0:? 'd' (in double) +0:? 'd3' (in 3-component vector of double) +0:? 'dm4' (in 4X4 matrix of double) +0:? 'gl_VertexID' (gl_VertexId int VertexId) +0:? 'gl_InstanceID' (gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 400 +ERROR: node is still EOpNull! +0:7 Function Definition: main( (global void) +0:7 Function Parameters: +0:? Linker Objects +0:? 'd' (in double) +0:? 'd3' (in 3-component vector of double) +0:? 'dm4' (in 4X4 matrix of double) +0:? 'gl_VertexID' (gl_VertexId int VertexId) +0:? 'gl_InstanceID' (gl_InstanceId int InstanceId) + diff --git a/Test/baseResults/410.vert.out b/Test/baseResults/410.vert.out new file mode 100755 index 00000000..eb4f43a2 --- /dev/null +++ b/Test/baseResults/410.vert.out @@ -0,0 +1,29 @@ +410.vert +Warning, version 410 is not yet complete; most version-specific features are present, but some are missing. + +Shader version: 410 +0:? Sequence +0:7 Function Definition: main( (global void) +0:7 Function Parameters: +0:? Linker Objects +0:? 'd' (in double) +0:? 'd3' (in 3-component vector of double) +0:? 'dm4' (in 4X4 matrix of double) +0:? 'gl_VertexID' (gl_VertexId int VertexId) +0:? 'gl_InstanceID' (gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 410 +0:? Sequence +0:7 Function Definition: main( (global void) +0:7 Function Parameters: +0:? Linker Objects +0:? 'd' (in double) +0:? 'd3' (in 3-component vector of double) +0:? 'dm4' (in 4X4 matrix of double) +0:? 'gl_VertexID' (gl_VertexId int VertexId) +0:? 'gl_InstanceID' (gl_InstanceId int InstanceId) + diff --git a/Test/baseResults/420.comp.out b/Test/baseResults/420.comp.out new file mode 100755 index 00000000..a2311d5a --- /dev/null +++ b/Test/baseResults/420.comp.out @@ -0,0 +1,122 @@ +420.comp +Warning, version 420 is not yet complete; most version-specific features are present, but some are missing. +ERROR: 0:3: 'gl_WorkGroupSize' : not supported for this version or the enabled extensions +ERROR: 1 compilation errors. No code generated. + + +Shader version: 420 +Requested GL_ARB_compute_shader +local_size = (2, 4, 6) +ERROR: node is still EOpNull! +0:11 Function Definition: main( (global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child (temp 3-component vector of float) +0:13 'sfoo' (shared 3-component vector of float) +0:13 Constant: +0:13 2.000000 +0:13 4.000000 +0:13 6.000000 +0:14 add second child into first child (temp 3-component vector of float) +0:14 'sfoo' (shared 3-component vector of float) +0:14 Convert uint to float (temp 3-component vector of float) +0:14 add (temp 3-component vector of uint) +0:14 add (temp 3-component vector of uint) +0:14 add (temp 3-component vector of uint) +0:14 add (temp 3-component vector of uint) +0:14 Constant: +0:14 2 (const uint) +0:14 4 (const uint) +0:14 6 (const uint) +0:14 'gl_NumWorkGroups' (in 3-component vector of uint NumWorkGroups) +0:14 'gl_WorkGroupID' (in 3-component vector of uint WorkGroupID) +0:14 'gl_LocalInvocationID' (in 3-component vector of uint LocalInvocationID) +0:14 'gl_GlobalInvocationID' (in 3-component vector of uint GlobalInvocationID) +0:15 vector scale second child into first child (temp 3-component vector of float) +0:15 'sfoo' (shared 3-component vector of float) +0:15 Convert uint to float (temp float) +0:15 'gl_LocalInvocationIndex' (in uint LocalInvocationIndex) +0:16 add second child into first child (temp 3-component vector of float) +0:16 'sfoo' (shared 3-component vector of float) +0:16 Constant: +0:16 66559.000000 +0:16 66559.000000 +0:16 65599.000000 +0:17 vector scale second child into first child (temp 3-component vector of float) +0:17 'sfoo' (shared 3-component vector of float) +0:17 Constant: +0:17 1057.000000 +0:23 Barrier (global void) +0:24 MemoryBarrier (global void) +0:25 MemoryBarrierAtomicCounter (global void) +0:26 MemoryBarrierBuffer (global void) +0:27 MemoryBarrierImage (global void) +0:28 MemoryBarrierShared (global void) +0:29 GroupMemoryBarrier (global void) +0:? Linker Objects +0:? 'gl_WorkGroupSize' (const 3-component vector of uint WorkGroupSize) +0:? 2 (const uint) +0:? 4 (const uint) +0:? 6 (const uint) +0:? 'sfoo' (shared 3-component vector of float) + + +Linked compute stage: + + +Shader version: 420 +Requested GL_ARB_compute_shader +local_size = (2, 4, 6) +ERROR: node is still EOpNull! +0:11 Function Definition: main( (global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child (temp 3-component vector of float) +0:13 'sfoo' (shared 3-component vector of float) +0:13 Constant: +0:13 2.000000 +0:13 4.000000 +0:13 6.000000 +0:14 add second child into first child (temp 3-component vector of float) +0:14 'sfoo' (shared 3-component vector of float) +0:14 Convert uint to float (temp 3-component vector of float) +0:14 add (temp 3-component vector of uint) +0:14 add (temp 3-component vector of uint) +0:14 add (temp 3-component vector of uint) +0:14 add (temp 3-component vector of uint) +0:14 Constant: +0:14 2 (const uint) +0:14 4 (const uint) +0:14 6 (const uint) +0:14 'gl_NumWorkGroups' (in 3-component vector of uint NumWorkGroups) +0:14 'gl_WorkGroupID' (in 3-component vector of uint WorkGroupID) +0:14 'gl_LocalInvocationID' (in 3-component vector of uint LocalInvocationID) +0:14 'gl_GlobalInvocationID' (in 3-component vector of uint GlobalInvocationID) +0:15 vector scale second child into first child (temp 3-component vector of float) +0:15 'sfoo' (shared 3-component vector of float) +0:15 Convert uint to float (temp float) +0:15 'gl_LocalInvocationIndex' (in uint LocalInvocationIndex) +0:16 add second child into first child (temp 3-component vector of float) +0:16 'sfoo' (shared 3-component vector of float) +0:16 Constant: +0:16 66559.000000 +0:16 66559.000000 +0:16 65599.000000 +0:17 vector scale second child into first child (temp 3-component vector of float) +0:17 'sfoo' (shared 3-component vector of float) +0:17 Constant: +0:17 1057.000000 +0:23 Barrier (global void) +0:24 MemoryBarrier (global void) +0:25 MemoryBarrierAtomicCounter (global void) +0:26 MemoryBarrierBuffer (global void) +0:27 MemoryBarrierImage (global void) +0:28 MemoryBarrierShared (global void) +0:29 GroupMemoryBarrier (global void) +0:? Linker Objects +0:? 'gl_WorkGroupSize' (const 3-component vector of uint WorkGroupSize) +0:? 2 (const uint) +0:? 4 (const uint) +0:? 6 (const uint) +0:? 'sfoo' (shared 3-component vector of float) + diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out new file mode 100755 index 00000000..113f1521 --- /dev/null +++ b/Test/baseResults/hlsl.array.frag.out @@ -0,0 +1,181 @@ +hlsl.array.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:11 Function Definition: PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float) +0:8 Function Parameters: +0:8 'i' (in int) +0:8 'input' (in 3-element array of 4-component vector of float) +0:? Sequence +0:10 Branch: Return with expression +0:10 add (temp 4-component vector of float) +0:10 add (temp 4-component vector of float) +0:10 add (temp 4-component vector of float) +0:10 direct index (temp 4-component vector of float) +0:10 'a' (temp 4-element array of 4-component vector of float) +0:10 Constant: +0:10 1 (const int) +0:10 indirect index (temp 4-component vector of float) +0:10 'a' (temp 4-element array of 4-component vector of float) +0:10 'i' (in int) +0:10 add (temp 4-component vector of float) +0:10 direct index (temp 4-component vector of float) +0:10 'input' (in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 2 (const int) +0:10 indirect index (temp 4-component vector of float) +0:10 'input' (in 3-element array of 4-component vector of float) +0:10 'i' (in int) +0:10 add (temp 4-component vector of float) +0:10 add (temp 4-component vector of float) +0:10 direct index (temp 4-component vector of float) +0:10 'b' (temp 10-element array of 4-component vector of float) +0:10 Constant: +0:10 5 (const int) +0:10 indirect index (temp 4-component vector of float) +0:10 'b' (temp 10-element array of 4-component vector of float) +0:10 'i' (in int) +0:10 indirect index (temp 4-component vector of float) +0:10 m: direct index for structure (temp 7-element array of 4-component vector of float) +0:10 indirect index (temp structure{temp 7-element array of 4-component vector of float m}) +0:10 's' (temp 11-element array of structure{temp 7-element array of 4-component vector of float m}) +0:10 'i' (in int) +0:10 Constant: +0:10 0 (const int) +0:10 'i' (in int) +0:? Linker Objects +0:? 'a' (temp 4-element array of 4-component vector of float) +0:? 's' (temp 11-element array of structure{temp 7-element array of 4-component vector of float m}) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:11 Function Definition: PixelShaderFunction(i1;vf4[3]; (temp 4-component vector of float) +0:8 Function Parameters: +0:8 'i' (in int) +0:8 'input' (in 3-element array of 4-component vector of float) +0:? Sequence +0:10 Branch: Return with expression +0:10 add (temp 4-component vector of float) +0:10 add (temp 4-component vector of float) +0:10 add (temp 4-component vector of float) +0:10 direct index (temp 4-component vector of float) +0:10 'a' (temp 4-element array of 4-component vector of float) +0:10 Constant: +0:10 1 (const int) +0:10 indirect index (temp 4-component vector of float) +0:10 'a' (temp 4-element array of 4-component vector of float) +0:10 'i' (in int) +0:10 add (temp 4-component vector of float) +0:10 direct index (temp 4-component vector of float) +0:10 'input' (in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 2 (const int) +0:10 indirect index (temp 4-component vector of float) +0:10 'input' (in 3-element array of 4-component vector of float) +0:10 'i' (in int) +0:10 add (temp 4-component vector of float) +0:10 add (temp 4-component vector of float) +0:10 direct index (temp 4-component vector of float) +0:10 'b' (temp 10-element array of 4-component vector of float) +0:10 Constant: +0:10 5 (const int) +0:10 indirect index (temp 4-component vector of float) +0:10 'b' (temp 10-element array of 4-component vector of float) +0:10 'i' (in int) +0:10 indirect index (temp 4-component vector of float) +0:10 m: direct index for structure (temp 7-element array of 4-component vector of float) +0:10 indirect index (temp structure{temp 7-element array of 4-component vector of float m}) +0:10 's' (temp 11-element array of structure{temp 7-element array of 4-component vector of float m}) +0:10 'i' (in int) +0:10 Constant: +0:10 0 (const int) +0:10 'i' (in int) +0:? Linker Objects +0:? 'a' (temp 4-element array of 4-component vector of float) +0:? 's' (temp 11-element array of structure{temp 7-element array of 4-component vector of float m}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 63 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 19 27 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 12 "a" + Name 19 "i" + Name 27 "input" + Name 40 "b" + Name 50 "" + MemberName 50 0 "m" + Name 54 "s" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 4 + 10: TypeArray 7(fvec4) 9 + 11: TypePointer Function 10 + 13: TypeInt 32 1 + 14: 13(int) Constant 1 + 15: TypePointer Function 7(fvec4) + 18: TypePointer Input 13(int) + 19(i): 18(ptr) Variable Input + 24: 8(int) Constant 3 + 25: TypeArray 7(fvec4) 24 + 26: TypePointer Input 25 + 27(input): 26(ptr) Variable Input + 28: 13(int) Constant 2 + 29: TypePointer Input 7(fvec4) + 37: 8(int) Constant 10 + 38: TypeArray 7(fvec4) 37 + 39: TypePointer Function 38 + 41: 13(int) Constant 5 + 48: 8(int) Constant 7 + 49: TypeArray 7(fvec4) 48 + 50: TypeStruct 49 + 51: 8(int) Constant 11 + 52: TypeArray 50(struct) 51 + 53: TypePointer Function 52 + 56: 13(int) Constant 0 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 12(a): 11(ptr) Variable Function + 40(b): 39(ptr) Variable Function + 54(s): 53(ptr) Variable Function + 16: 15(ptr) AccessChain 12(a) 14 + 17: 7(fvec4) Load 16 + 20: 13(int) Load 19(i) + 21: 15(ptr) AccessChain 12(a) 20 + 22: 7(fvec4) Load 21 + 23: 7(fvec4) FAdd 17 22 + 30: 29(ptr) AccessChain 27(input) 28 + 31: 7(fvec4) Load 30 + 32: 13(int) Load 19(i) + 33: 29(ptr) AccessChain 27(input) 32 + 34: 7(fvec4) Load 33 + 35: 7(fvec4) FAdd 31 34 + 36: 7(fvec4) FAdd 23 35 + 42: 15(ptr) AccessChain 40(b) 41 + 43: 7(fvec4) Load 42 + 44: 13(int) Load 19(i) + 45: 15(ptr) AccessChain 40(b) 44 + 46: 7(fvec4) Load 45 + 47: 7(fvec4) FAdd 43 46 + 55: 13(int) Load 19(i) + 57: 13(int) Load 19(i) + 58: 15(ptr) AccessChain 54(s) 55 56 57 + 59: 7(fvec4) Load 58 + 60: 7(fvec4) FAdd 47 59 + 61: 7(fvec4) FAdd 36 60 + ReturnValue 61 + FunctionEnd diff --git a/Test/baseResults/hlsl.assoc.frag.out b/Test/baseResults/hlsl.assoc.frag.out index 0bba2ee2..bc06bd0c 100755 --- a/Test/baseResults/hlsl.assoc.frag.out +++ b/Test/baseResults/hlsl.assoc.frag.out @@ -1,70 +1,70 @@ hlsl.assoc.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:12 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float) 0:8 Function Parameters: -0:8 'a1' (temp 4-component vector of float) -0:8 'a2' (temp 4-component vector of float) -0:8 'a3' (temp 4-component vector of float) -0:8 'a4' (temp 4-component vector of float) -0:8 'a5' (temp 4-component vector of float) +0:8 'a1' (in 4-component vector of float) +0:8 'a2' (in 4-component vector of float) +0:8 'a3' (in 4-component vector of float) +0:8 'a4' (in 4-component vector of float) +0:8 'a5' (in 4-component vector of float) 0:? Sequence 0:9 move second child to first child (temp 4-component vector of float) -0:9 'a1' (temp 4-component vector of float) +0:9 'a1' (in 4-component vector of float) 0:9 move second child to first child (temp 4-component vector of float) -0:9 'a2' (temp 4-component vector of float) +0:9 'a2' (in 4-component vector of float) 0:9 move second child to first child (temp 4-component vector of float) -0:9 'a3' (temp 4-component vector of float) +0:9 'a3' (in 4-component vector of float) 0:9 move second child to first child (temp 4-component vector of float) -0:9 'a4' (temp 4-component vector of float) -0:9 'a5' (temp 4-component vector of float) +0:9 'a4' (in 4-component vector of float) +0:9 'a5' (in 4-component vector of float) 0:10 Branch: Return with expression 0:10 add (temp 4-component vector of float) 0:10 add (temp 4-component vector of float) 0:10 add (temp 4-component vector of float) -0:10 'a1' (temp 4-component vector of float) -0:10 'a2' (temp 4-component vector of float) +0:10 'a1' (in 4-component vector of float) +0:10 'a2' (in 4-component vector of float) 0:10 add (temp 4-component vector of float) -0:10 'a3' (temp 4-component vector of float) -0:10 'a4' (temp 4-component vector of float) -0:10 'a5' (temp 4-component vector of float) +0:10 'a3' (in 4-component vector of float) +0:10 'a4' (in 4-component vector of float) +0:10 'a5' (in 4-component vector of float) 0:? Linker Objects Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:12 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4;vf4; (temp 4-component vector of float) 0:8 Function Parameters: -0:8 'a1' (temp 4-component vector of float) -0:8 'a2' (temp 4-component vector of float) -0:8 'a3' (temp 4-component vector of float) -0:8 'a4' (temp 4-component vector of float) -0:8 'a5' (temp 4-component vector of float) +0:8 'a1' (in 4-component vector of float) +0:8 'a2' (in 4-component vector of float) +0:8 'a3' (in 4-component vector of float) +0:8 'a4' (in 4-component vector of float) +0:8 'a5' (in 4-component vector of float) 0:? Sequence 0:9 move second child to first child (temp 4-component vector of float) -0:9 'a1' (temp 4-component vector of float) +0:9 'a1' (in 4-component vector of float) 0:9 move second child to first child (temp 4-component vector of float) -0:9 'a2' (temp 4-component vector of float) +0:9 'a2' (in 4-component vector of float) 0:9 move second child to first child (temp 4-component vector of float) -0:9 'a3' (temp 4-component vector of float) +0:9 'a3' (in 4-component vector of float) 0:9 move second child to first child (temp 4-component vector of float) -0:9 'a4' (temp 4-component vector of float) -0:9 'a5' (temp 4-component vector of float) +0:9 'a4' (in 4-component vector of float) +0:9 'a5' (in 4-component vector of float) 0:10 Branch: Return with expression 0:10 add (temp 4-component vector of float) 0:10 add (temp 4-component vector of float) 0:10 add (temp 4-component vector of float) -0:10 'a1' (temp 4-component vector of float) -0:10 'a2' (temp 4-component vector of float) +0:10 'a1' (in 4-component vector of float) +0:10 'a2' (in 4-component vector of float) 0:10 add (temp 4-component vector of float) -0:10 'a3' (temp 4-component vector of float) -0:10 'a4' (temp 4-component vector of float) -0:10 'a5' (temp 4-component vector of float) +0:10 'a3' (in 4-component vector of float) +0:10 'a4' (in 4-component vector of float) +0:10 'a5' (in 4-component vector of float) 0:? Linker Objects // Module Version 10000 @@ -74,9 +74,9 @@ gl_FragCoord origin is upper left Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" + EntryPoint Fragment 4 "PixelShaderFunction" 9 10 11 12 13 ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 9 "a1" Name 10 "a2" @@ -87,14 +87,14 @@ gl_FragCoord origin is upper left 3: TypeFunction 2 6: TypeFloat 32 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) + 8: TypePointer Input 7(fvec4) + 9(a1): 8(ptr) Variable Input + 10(a2): 8(ptr) Variable Input + 11(a3): 8(ptr) Variable Input + 12(a4): 8(ptr) Variable Input + 13(a5): 8(ptr) Variable Input 4(PixelShaderFunction): 2 Function None 3 5: Label - 9(a1): 8(ptr) Variable Function - 10(a2): 8(ptr) Variable Function - 11(a3): 8(ptr) Variable Function - 12(a4): 8(ptr) Variable Function - 13(a5): 8(ptr) Variable Function 14: 7(fvec4) Load 13(a5) Store 12(a4) 14 Store 11(a3) 14 diff --git a/Test/baseResults/hlsl.attribute.frag.out b/Test/baseResults/hlsl.attribute.frag.out new file mode 100755 index 00000000..3bfbea71 --- /dev/null +++ b/Test/baseResults/hlsl.attribute.frag.out @@ -0,0 +1,57 @@ +hlsl.attribute.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:14 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:11 Test condition and select (temp void) +0:11 Condition +0:11 Constant: +0:11 0 (const int) +0:11 true case is null +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:14 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:11 Test condition and select (temp void) +0:11 Condition +0:11 Constant: +0:11 0 (const int) +0:11 true case is null +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 10 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: 6(int) Constant 0 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + SelectionMerge 9 None + BranchConditional 7 8 9 + 8: Label + Branch 9 + 9: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.cast.frag.out b/Test/baseResults/hlsl.cast.frag.out new file mode 100755 index 00000000..61ca29f5 --- /dev/null +++ b/Test/baseResults/hlsl.cast.frag.out @@ -0,0 +1,86 @@ +hlsl.cast.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:3 Branch: Return with expression +0:3 add (temp 4-component vector of float) +0:3 add (temp 4-component vector of float) +0:3 Construct vec4 (temp 4-component vector of float) +0:3 'input' (in 4-component vector of float) +0:3 Convert int to float (temp 4-component vector of float) +0:3 Convert float to int (temp 4-component vector of int) +0:3 'input' (in 4-component vector of float) +0:3 Constant: +0:3 1.198000 +0:3 1.198000 +0:3 1.198000 +0:3 1.198000 +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:3 Branch: Return with expression +0:3 add (temp 4-component vector of float) +0:3 add (temp 4-component vector of float) +0:3 Construct vec4 (temp 4-component vector of float) +0:3 'input' (in 4-component vector of float) +0:3 Convert int to float (temp 4-component vector of float) +0:3 Convert float to int (temp 4-component vector of int) +0:3 'input' (in 4-component vector of float) +0:3 Constant: +0:3 1.198000 +0:3 1.198000 +0:3 1.198000 +0:3 1.198000 +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 26 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 9 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 9 "input" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Input 7(fvec4) + 9(input): 8(ptr) Variable Input + 17: TypeInt 32 1 + 18: TypeVector 17(int) 4 + 22: 6(float) Constant 1067014160 + 23: 7(fvec4) ConstantComposite 22 22 22 22 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 10: 7(fvec4) Load 9(input) + 11: 6(float) CompositeExtract 10 0 + 12: 6(float) CompositeExtract 10 1 + 13: 6(float) CompositeExtract 10 2 + 14: 6(float) CompositeExtract 10 3 + 15: 7(fvec4) CompositeConstruct 11 12 13 14 + 16: 7(fvec4) Load 9(input) + 19: 18(ivec4) ConvertFToS 16 + 20: 7(fvec4) ConvertSToF 19 + 21: 7(fvec4) FAdd 15 20 + 24: 7(fvec4) FAdd 21 23 + ReturnValue 24 + FunctionEnd diff --git a/Test/baseResults/hlsl.doLoop.frag.out b/Test/baseResults/hlsl.doLoop.frag.out new file mode 100755 index 00000000..1ac86d80 --- /dev/null +++ b/Test/baseResults/hlsl.doLoop.frag.out @@ -0,0 +1,116 @@ +hlsl.doLoop.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:3 Loop with condition not tested first +0:3 Loop Condition +0:3 Constant: +0:3 false (const bool) +0:3 No loop body +0:4 Loop with condition not tested first +0:4 Loop Condition +0:4 Constant: +0:4 false (const bool) +0:4 No loop body +0:5 Loop with condition not tested first +0:5 Loop Condition +0:5 Compare Equal (temp bool) +0:5 'input' (in 4-component vector of float) +0:5 'input' (in 4-component vector of float) +0:5 Loop Body +0:5 Branch: Return with expression +0:5 'input' (in 4-component vector of float) +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:7 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:3 Loop with condition not tested first +0:3 Loop Condition +0:3 Constant: +0:3 false (const bool) +0:3 No loop body +0:4 Loop with condition not tested first +0:4 Loop Condition +0:4 Constant: +0:4 false (const bool) +0:4 No loop body +0:5 Loop with condition not tested first +0:5 Loop Condition +0:5 Compare Equal (temp bool) +0:5 'input' (in 4-component vector of float) +0:5 'input' (in 4-component vector of float) +0:5 Loop Body +0:5 Branch: Return with expression +0:5 'input' (in 4-component vector of float) +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 31 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 23 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 23 "input" + 2: TypeVoid + 3: TypeFunction 2 + 10: TypeBool + 11: 10(bool) ConstantFalse + 20: TypeFloat 32 + 21: TypeVector 20(float) 4 + 22: TypePointer Input 21(fvec4) + 23(input): 22(ptr) Variable Input + 28: TypeVector 10(bool) 4 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Branch 6 + 6: Label + LoopMerge 8 9 None + Branch 7 + 7: Label + Branch 9 + 9: Label + BranchConditional 11 6 8 + 8: Label + Branch 12 + 12: Label + LoopMerge 14 15 None + Branch 13 + 13: Label + Branch 15 + 15: Label + BranchConditional 11 12 14 + 14: Label + Branch 16 + 16: Label + LoopMerge 18 19 None + Branch 17 + 17: Label + 24: 21(fvec4) Load 23(input) + ReturnValue 24 + 19: Label + 26: 21(fvec4) Load 23(input) + 27: 21(fvec4) Load 23(input) + 29: 28(bvec4) FOrdEqual 26 27 + 30: 10(bool) All 29 + BranchConditional 30 16 18 + 18: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.float1.frag.out b/Test/baseResults/hlsl.float1.frag.out index ce6ea59e..c21931d5 100755 --- a/Test/baseResults/hlsl.float1.frag.out +++ b/Test/baseResults/hlsl.float1.frag.out @@ -1,5 +1,5 @@ hlsl.float1.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:1 move second child to first child (temp 1-component vector of float) @@ -12,8 +12,8 @@ gl_FragCoord origin is upper left 0:2 2.000000 0:8 Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float) 0:5 Function Parameters: -0:5 'inFloat1' (temp 1-component vector of float) -0:5 'inScalar' (temp float) +0:5 'inFloat1' (in 1-component vector of float) +0:5 'inScalar' (in float) 0:? Sequence 0:6 Branch: Return with expression 0:6 add (temp 1-component vector of float) @@ -21,8 +21,8 @@ gl_FragCoord origin is upper left 0:6 'f1' (temp 1-component vector of float) 0:6 'scalar' (temp float) 0:6 vector-scale (temp 1-component vector of float) -0:6 'inFloat1' (temp 1-component vector of float) -0:6 'inScalar' (temp float) +0:6 'inFloat1' (in 1-component vector of float) +0:6 'inScalar' (in float) 0:? Linker Objects 0:? 'f1' (temp 1-component vector of float) 0:? 'scalar' (temp float) @@ -31,7 +31,7 @@ gl_FragCoord origin is upper left Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:1 move second child to first child (temp 1-component vector of float) @@ -44,8 +44,8 @@ gl_FragCoord origin is upper left 0:2 2.000000 0:8 Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float) 0:5 Function Parameters: -0:5 'inFloat1' (temp 1-component vector of float) -0:5 'inScalar' (temp float) +0:5 'inFloat1' (in 1-component vector of float) +0:5 'inScalar' (in float) 0:? Sequence 0:6 Branch: Return with expression 0:6 add (temp 1-component vector of float) @@ -53,8 +53,8 @@ gl_FragCoord origin is upper left 0:6 'f1' (temp 1-component vector of float) 0:6 'scalar' (temp float) 0:6 vector-scale (temp 1-component vector of float) -0:6 'inFloat1' (temp 1-component vector of float) -0:6 'inScalar' (temp float) +0:6 'inFloat1' (in 1-component vector of float) +0:6 'inScalar' (in float) 0:? Linker Objects 0:? 'f1' (temp 1-component vector of float) 0:? 'scalar' (temp float) @@ -68,7 +68,7 @@ gl_FragCoord origin is upper left MemoryModel Logical GLSL450 EntryPoint Fragment 4 "PixelShaderFunction" ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 11 "ShaderFunction(vf1;f1;" Name 9 "inFloat1" diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out index c827f4d2..7ad1721d 100755 --- a/Test/baseResults/hlsl.float4.frag.out +++ b/Test/baseResults/hlsl.float4.frag.out @@ -1,5 +1,5 @@ hlsl.float4.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:1 move second child to first child (temp 4-component vector of float) @@ -9,22 +9,26 @@ gl_FragCoord origin is upper left 0:? 0.500000 0:? 0.000000 0:? 1.000000 -0:7 Function Definition: ShaderFunction(vf4; (temp 4-component vector of float) -0:4 Function Parameters: -0:4 'input' (temp 4-component vector of float) +0:12 Function Definition: ShaderFunction(vf4; (temp 4-component vector of float) +0:9 Function Parameters: +0:9 'input' (in 4-component vector of float) 0:? Sequence -0:5 Branch: Return with expression -0:5 component-wise multiply (temp 4-component vector of float) -0:5 'input' (temp 4-component vector of float) -0:5 'AmbientColor' (temp 4-component vector of float) +0:10 Branch: Return with expression +0:10 component-wise multiply (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) +0:10 'AmbientColor' (temp 4-component vector of float) 0:? Linker Objects 0:? 'AmbientColor' (temp 4-component vector of float) +0:? 'ff1' (temp bool Face) +0:? 'ff2' (temp 4-component vector of float) +0:? 'ff3' (temp 4-component vector of float) +0:? 'ff4' (temp 4-component vector of float FragCoord) Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:1 move second child to first child (temp 4-component vector of float) @@ -34,37 +38,49 @@ gl_FragCoord origin is upper left 0:? 0.500000 0:? 0.000000 0:? 1.000000 -0:7 Function Definition: ShaderFunction(vf4; (temp 4-component vector of float) -0:4 Function Parameters: -0:4 'input' (temp 4-component vector of float) +0:12 Function Definition: ShaderFunction(vf4; (temp 4-component vector of float) +0:9 Function Parameters: +0:9 'input' (in 4-component vector of float) 0:? Sequence -0:5 Branch: Return with expression -0:5 component-wise multiply (temp 4-component vector of float) -0:5 'input' (temp 4-component vector of float) -0:5 'AmbientColor' (temp 4-component vector of float) +0:10 Branch: Return with expression +0:10 component-wise multiply (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) +0:10 'AmbientColor' (temp 4-component vector of float) 0:? Linker Objects 0:? 'AmbientColor' (temp 4-component vector of float) +0:? 'ff1' (temp bool Face) +0:? 'ff2' (temp 4-component vector of float) +0:? 'ff3' (temp 4-component vector of float) +0:? 'ff4' (temp 4-component vector of float FragCoord) // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 19 +// Id's are bound by 25 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "PixelShaderFunction" ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 11 "ShaderFunction(vf4;" Name 10 "input" Name 14 "AmbientColor" + Name 21 "ff1" + Name 22 "ff2" + Name 23 "ff3" + Name 24 "ff4" + Decorate 21(ff1) BuiltIn FrontFacing + Decorate 24(ff4) BuiltIn FragCoord 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 7: TypeVector 6(float) 4 8: TypePointer Function 7(fvec4) 9: TypeFunction 7(fvec4) 8(ptr) + 19: TypeBool + 20: TypePointer Function 19(bool) 4(PixelShaderFunction): 2 Function None 3 5: Label FunctionEnd @@ -72,6 +88,10 @@ gl_FragCoord origin is upper left 10(input): 8(ptr) FunctionParameter 12: Label 14(AmbientColor): 8(ptr) Variable Function + 21(ff1): 20(ptr) Variable Function + 22(ff2): 8(ptr) Variable Function + 23(ff3): 8(ptr) Variable Function + 24(ff4): 8(ptr) Variable Function 13: 7(fvec4) Load 10(input) 15: 7(fvec4) Load 14(AmbientColor) 16: 7(fvec4) FMul 13 15 diff --git a/Test/baseResults/hlsl.forLoop.frag.out b/Test/baseResults/hlsl.forLoop.frag.out new file mode 100755 index 00000000..8e2b7922 --- /dev/null +++ b/Test/baseResults/hlsl.forLoop.frag.out @@ -0,0 +1,220 @@ +hlsl.forLoop.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:? Sequence +0:3 Loop with condition tested first +0:3 No loop condition +0:3 No loop body +0:4 Sequence +0:4 Pre-Increment (temp 4-component vector of float) +0:4 'input' (in 4-component vector of float) +0:4 Loop with condition tested first +0:4 No loop condition +0:4 No loop body +0:? Sequence +0:5 Loop with condition tested first +0:5 Loop Condition +0:5 Compare Not Equal (temp bool) +0:5 'input' (in 4-component vector of float) +0:5 'input' (in 4-component vector of float) +0:5 No loop body +0:? Sequence +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Compare Not Equal (temp bool) +0:6 'input' (in 4-component vector of float) +0:6 'input' (in 4-component vector of float) +0:6 Loop Body +0:? Sequence +0:6 Branch: Return with expression +0:6 Negate value (temp 4-component vector of float) +0:6 'input' (in 4-component vector of float) +0:7 Sequence +0:7 Pre-Decrement (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 Loop with condition tested first +0:7 Loop Condition +0:7 Compare Not Equal (temp bool) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 Loop Body +0:? Sequence +0:7 Branch: Return with expression +0:7 Negate value (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 Loop Terminal Expression +0:7 add second child into first child (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 Constant: +0:7 2.000000 +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:9 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:? Sequence +0:3 Loop with condition tested first +0:3 No loop condition +0:3 No loop body +0:4 Sequence +0:4 Pre-Increment (temp 4-component vector of float) +0:4 'input' (in 4-component vector of float) +0:4 Loop with condition tested first +0:4 No loop condition +0:4 No loop body +0:? Sequence +0:5 Loop with condition tested first +0:5 Loop Condition +0:5 Compare Not Equal (temp bool) +0:5 'input' (in 4-component vector of float) +0:5 'input' (in 4-component vector of float) +0:5 No loop body +0:? Sequence +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Compare Not Equal (temp bool) +0:6 'input' (in 4-component vector of float) +0:6 'input' (in 4-component vector of float) +0:6 Loop Body +0:? Sequence +0:6 Branch: Return with expression +0:6 Negate value (temp 4-component vector of float) +0:6 'input' (in 4-component vector of float) +0:7 Sequence +0:7 Pre-Decrement (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 Loop with condition tested first +0:7 Loop Condition +0:7 Compare Not Equal (temp bool) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 Loop Body +0:? Sequence +0:7 Branch: Return with expression +0:7 Negate value (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 Loop Terminal Expression +0:7 add second child into first child (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 Constant: +0:7 2.000000 +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 64 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 13 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 13 "input" + 2: TypeVoid + 3: TypeFunction 2 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Input 11(fvec4) + 13(input): 12(ptr) Variable Input + 15: 10(float) Constant 1065353216 + 29: TypeBool + 30: TypeVector 29(bool) 4 + 60: 10(float) Constant 1073741824 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Branch 6 + 6: Label + LoopMerge 8 9 None + Branch 7 + 7: Label + Branch 9 + 9: Label + Branch 6 + 8: Label + 14: 11(fvec4) Load 13(input) + 16: 11(fvec4) CompositeConstruct 15 15 15 15 + 17: 11(fvec4) FAdd 14 16 + Store 13(input) 17 + Branch 18 + 18: Label + LoopMerge 20 21 None + Branch 19 + 19: Label + Branch 21 + 21: Label + Branch 18 + 20: Label + Branch 22 + 22: Label + LoopMerge 24 25 None + Branch 26 + 26: Label + 27: 11(fvec4) Load 13(input) + 28: 11(fvec4) Load 13(input) + 31: 30(bvec4) FOrdNotEqual 27 28 + 32: 29(bool) Any 31 + BranchConditional 32 23 24 + 23: Label + Branch 25 + 25: Label + Branch 22 + 24: Label + Branch 33 + 33: Label + LoopMerge 35 36 None + Branch 37 + 37: Label + 38: 11(fvec4) Load 13(input) + 39: 11(fvec4) Load 13(input) + 40: 30(bvec4) FOrdNotEqual 38 39 + 41: 29(bool) Any 40 + BranchConditional 41 34 35 + 34: Label + 42: 11(fvec4) Load 13(input) + 43: 11(fvec4) FNegate 42 + ReturnValue 43 + 36: Label + Branch 33 + 35: Label + 45: 11(fvec4) Load 13(input) + 46: 11(fvec4) CompositeConstruct 15 15 15 15 + 47: 11(fvec4) FSub 45 46 + Store 13(input) 47 + Branch 48 + 48: Label + LoopMerge 50 51 None + Branch 52 + 52: Label + 53: 11(fvec4) Load 13(input) + 54: 11(fvec4) Load 13(input) + 55: 30(bvec4) FOrdNotEqual 53 54 + 56: 29(bool) Any 55 + BranchConditional 56 49 50 + 49: Label + 57: 11(fvec4) Load 13(input) + 58: 11(fvec4) FNegate 57 + ReturnValue 58 + 51: Label + 61: 11(fvec4) Load 13(input) + 62: 11(fvec4) CompositeConstruct 60 60 60 60 + 63: 11(fvec4) FAdd 61 62 + Store 13(input) 63 + Branch 48 + 50: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.frag.out b/Test/baseResults/hlsl.frag.out index 3ccbc898..b0e6e4df 100644 --- a/Test/baseResults/hlsl.frag.out +++ b/Test/baseResults/hlsl.frag.out @@ -1,5 +1,5 @@ hlsl.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:1 move second child to first child (temp 4-component vector of float) @@ -15,47 +15,47 @@ gl_FragCoord origin is upper left 0:2 0.100000 0:13 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) 0:5 Function Parameters: -0:5 'input' (temp 4-component vector of float) +0:5 'input' (in 4-component vector of float) 0:? Sequence 0:6 Branch: Return with expression 0:6 add (temp 4-component vector of float) 0:6 vector-scale (temp 4-component vector of float) -0:6 'input' (temp 4-component vector of float) +0:6 'input' (in 4-component vector of float) 0:6 'AmbientIntensity' (temp float) 0:6 'AmbientColor' (temp 4-component vector of float) 0:7 Branch: Return with expression 0:7 add (temp 4-component vector of float) 0:7 component-wise multiply (temp 4-component vector of float) -0:7 'input' (temp 4-component vector of float) -0:7 'input' (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) 0:7 component-wise multiply (temp 4-component vector of float) -0:7 'input' (temp 4-component vector of float) -0:7 'input' (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) 0:8 Branch: Return with expression 0:8 add (temp 4-component vector of float) 0:8 add (temp 4-component vector of float) -0:8 'input' (temp 4-component vector of float) +0:8 'input' (in 4-component vector of float) 0:8 component-wise multiply (temp 4-component vector of float) -0:8 'input' (temp 4-component vector of float) -0:8 'input' (temp 4-component vector of float) -0:8 'input' (temp 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:8 'input' (in 4-component vector of float) 0:9 Branch: Return with expression 0:9 component-wise multiply (temp 4-component vector of float) 0:9 Pre-Increment (temp 4-component vector of float) -0:9 'input' (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) 0:9 Negate value (temp 4-component vector of float) 0:9 Negate value (temp 4-component vector of float) 0:9 Pre-Decrement (temp 4-component vector of float) -0:9 'input' (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) 0:10 Branch: Return with expression 0:10 add (temp 4-component vector of float) 0:10 Post-Increment (temp 4-component vector of float) -0:10 'input' (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) 0:10 Pre-Increment (temp 4-component vector of float) -0:10 'input' (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) 0:11 Branch: Return with expression 0:11 sine (global 4-component vector of float) -0:11 'input' (temp 4-component vector of float) +0:11 'input' (in 4-component vector of float) 0:? Linker Objects 0:? 'AmbientColor' (temp 4-component vector of float) 0:? 'AmbientIntensity' (temp float) @@ -64,7 +64,7 @@ gl_FragCoord origin is upper left Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:1 move second child to first child (temp 4-component vector of float) @@ -80,81 +80,82 @@ gl_FragCoord origin is upper left 0:2 0.100000 0:13 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) 0:5 Function Parameters: -0:5 'input' (temp 4-component vector of float) +0:5 'input' (in 4-component vector of float) 0:? Sequence 0:6 Branch: Return with expression 0:6 add (temp 4-component vector of float) 0:6 vector-scale (temp 4-component vector of float) -0:6 'input' (temp 4-component vector of float) +0:6 'input' (in 4-component vector of float) 0:6 'AmbientIntensity' (temp float) 0:6 'AmbientColor' (temp 4-component vector of float) 0:7 Branch: Return with expression 0:7 add (temp 4-component vector of float) 0:7 component-wise multiply (temp 4-component vector of float) -0:7 'input' (temp 4-component vector of float) -0:7 'input' (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) 0:7 component-wise multiply (temp 4-component vector of float) -0:7 'input' (temp 4-component vector of float) -0:7 'input' (temp 4-component vector of float) +0:7 'input' (in 4-component vector of float) +0:7 'input' (in 4-component vector of float) 0:8 Branch: Return with expression 0:8 add (temp 4-component vector of float) 0:8 add (temp 4-component vector of float) -0:8 'input' (temp 4-component vector of float) +0:8 'input' (in 4-component vector of float) 0:8 component-wise multiply (temp 4-component vector of float) -0:8 'input' (temp 4-component vector of float) -0:8 'input' (temp 4-component vector of float) -0:8 'input' (temp 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:8 'input' (in 4-component vector of float) +0:8 'input' (in 4-component vector of float) 0:9 Branch: Return with expression 0:9 component-wise multiply (temp 4-component vector of float) 0:9 Pre-Increment (temp 4-component vector of float) -0:9 'input' (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) 0:9 Negate value (temp 4-component vector of float) 0:9 Negate value (temp 4-component vector of float) 0:9 Pre-Decrement (temp 4-component vector of float) -0:9 'input' (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) 0:10 Branch: Return with expression 0:10 add (temp 4-component vector of float) 0:10 Post-Increment (temp 4-component vector of float) -0:10 'input' (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) 0:10 Pre-Increment (temp 4-component vector of float) -0:10 'input' (temp 4-component vector of float) +0:10 'input' (in 4-component vector of float) 0:11 Branch: Return with expression 0:11 sine (global 4-component vector of float) -0:11 'input' (temp 4-component vector of float) +0:11 'input' (in 4-component vector of float) 0:? Linker Objects 0:? 'AmbientColor' (temp 4-component vector of float) 0:? 'AmbientIntensity' (temp float) // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 57 +// Id's are bound by 58 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" + EntryPoint Fragment 4 "PixelShaderFunction" 9 ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 9 "input" Name 12 "AmbientIntensity" - Name 15 "AmbientColor" + Name 16 "AmbientColor" 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) + 8: TypePointer Input 7(fvec4) + 9(input): 8(ptr) Variable Input 11: TypePointer Function 6(float) - 36: 6(float) Constant 1065353216 + 15: TypePointer Function 7(fvec4) + 37: 6(float) Constant 1065353216 4(PixelShaderFunction): 2 Function None 3 5: Label - 9(input): 8(ptr) Variable Function 12(AmbientIntensity): 11(ptr) Variable Function -15(AmbientColor): 8(ptr) Variable Function +16(AmbientColor): 15(ptr) Variable Function 10: 7(fvec4) Load 9(input) 13: 6(float) Load 12(AmbientIntensity) 14: 7(fvec4) VectorTimesScalar 10 13 - 16: 7(fvec4) Load 15(AmbientColor) - 17: 7(fvec4) FAdd 14 16 - ReturnValue 17 + 17: 7(fvec4) Load 16(AmbientColor) + 18: 7(fvec4) FAdd 14 17 + ReturnValue 18 FunctionEnd diff --git a/Test/baseResults/hlsl.if.frag.out b/Test/baseResults/hlsl.if.frag.out new file mode 100755 index 00000000..a5a6a67e --- /dev/null +++ b/Test/baseResults/hlsl.if.frag.out @@ -0,0 +1,223 @@ +hlsl.if.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:29 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:3 Test condition and select (temp void) +0:3 Condition +0:3 Compare Equal (temp bool) +0:3 'input' (in 4-component vector of float) +0:3 'input' (in 4-component vector of float) +0:3 true case +0:4 Branch: Return with expression +0:4 'input' (in 4-component vector of float) +0:6 Test condition and select (temp void) +0:6 Condition +0:6 Compare Equal (temp bool) +0:6 'input' (in 4-component vector of float) +0:6 'input' (in 4-component vector of float) +0:6 true case +0:7 Branch: Return with expression +0:7 'input' (in 4-component vector of float) +0:6 false case +0:9 Branch: Return with expression +0:9 Negate value (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) +0:11 Test condition and select (temp void) +0:11 Condition +0:11 Compare Equal (temp bool) +0:11 'input' (in 4-component vector of float) +0:11 'input' (in 4-component vector of float) +0:11 true case is null +0:14 Test condition and select (temp void) +0:14 Condition +0:14 Compare Equal (temp bool) +0:14 'input' (in 4-component vector of float) +0:14 'input' (in 4-component vector of float) +0:14 true case is null +0:19 Test condition and select (temp void) +0:19 Condition +0:19 Compare Equal (temp bool) +0:19 'input' (in 4-component vector of float) +0:19 'input' (in 4-component vector of float) +0:19 true case +0:? Sequence +0:20 Branch: Return with expression +0:20 'input' (in 4-component vector of float) +0:23 Test condition and select (temp void) +0:23 Condition +0:23 Compare Equal (temp bool) +0:23 'input' (in 4-component vector of float) +0:23 'input' (in 4-component vector of float) +0:23 true case +0:? Sequence +0:24 Branch: Return with expression +0:24 'input' (in 4-component vector of float) +0:23 false case +0:? Sequence +0:26 Branch: Return with expression +0:26 Negate value (temp 4-component vector of float) +0:26 'input' (in 4-component vector of float) +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:29 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:3 Test condition and select (temp void) +0:3 Condition +0:3 Compare Equal (temp bool) +0:3 'input' (in 4-component vector of float) +0:3 'input' (in 4-component vector of float) +0:3 true case +0:4 Branch: Return with expression +0:4 'input' (in 4-component vector of float) +0:6 Test condition and select (temp void) +0:6 Condition +0:6 Compare Equal (temp bool) +0:6 'input' (in 4-component vector of float) +0:6 'input' (in 4-component vector of float) +0:6 true case +0:7 Branch: Return with expression +0:7 'input' (in 4-component vector of float) +0:6 false case +0:9 Branch: Return with expression +0:9 Negate value (temp 4-component vector of float) +0:9 'input' (in 4-component vector of float) +0:11 Test condition and select (temp void) +0:11 Condition +0:11 Compare Equal (temp bool) +0:11 'input' (in 4-component vector of float) +0:11 'input' (in 4-component vector of float) +0:11 true case is null +0:14 Test condition and select (temp void) +0:14 Condition +0:14 Compare Equal (temp bool) +0:14 'input' (in 4-component vector of float) +0:14 'input' (in 4-component vector of float) +0:14 true case is null +0:19 Test condition and select (temp void) +0:19 Condition +0:19 Compare Equal (temp bool) +0:19 'input' (in 4-component vector of float) +0:19 'input' (in 4-component vector of float) +0:19 true case +0:? Sequence +0:20 Branch: Return with expression +0:20 'input' (in 4-component vector of float) +0:23 Test condition and select (temp void) +0:23 Condition +0:23 Compare Equal (temp bool) +0:23 'input' (in 4-component vector of float) +0:23 'input' (in 4-component vector of float) +0:23 true case +0:? Sequence +0:24 Branch: Return with expression +0:24 'input' (in 4-component vector of float) +0:23 false case +0:? Sequence +0:26 Branch: Return with expression +0:26 Negate value (temp 4-component vector of float) +0:26 'input' (in 4-component vector of float) +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 64 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 9 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 9 "input" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Input 7(fvec4) + 9(input): 8(ptr) Variable Input + 12: TypeBool + 13: TypeVector 12(bool) 4 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 10: 7(fvec4) Load 9(input) + 11: 7(fvec4) Load 9(input) + 14: 13(bvec4) FOrdEqual 10 11 + 15: 12(bool) All 14 + SelectionMerge 17 None + BranchConditional 15 16 17 + 16: Label + 18: 7(fvec4) Load 9(input) + ReturnValue 18 + 17: Label + 20: 7(fvec4) Load 9(input) + 21: 7(fvec4) Load 9(input) + 22: 13(bvec4) FOrdEqual 20 21 + 23: 12(bool) All 22 + SelectionMerge 25 None + BranchConditional 23 24 28 + 24: Label + 26: 7(fvec4) Load 9(input) + ReturnValue 26 + 28: Label + 29: 7(fvec4) Load 9(input) + 30: 7(fvec4) FNegate 29 + ReturnValue 30 + 25: Label + 32: 7(fvec4) Load 9(input) + 33: 7(fvec4) Load 9(input) + 34: 13(bvec4) FOrdEqual 32 33 + 35: 12(bool) All 34 + SelectionMerge 37 None + BranchConditional 35 36 37 + 36: Label + Branch 37 + 37: Label + 38: 7(fvec4) Load 9(input) + 39: 7(fvec4) Load 9(input) + 40: 13(bvec4) FOrdEqual 38 39 + 41: 12(bool) All 40 + SelectionMerge 43 None + BranchConditional 41 42 43 + 42: Label + Branch 43 + 43: Label + 44: 7(fvec4) Load 9(input) + 45: 7(fvec4) Load 9(input) + 46: 13(bvec4) FOrdEqual 44 45 + 47: 12(bool) All 46 + SelectionMerge 49 None + BranchConditional 47 48 49 + 48: Label + 50: 7(fvec4) Load 9(input) + ReturnValue 50 + 49: Label + 52: 7(fvec4) Load 9(input) + 53: 7(fvec4) Load 9(input) + 54: 13(bvec4) FOrdEqual 52 53 + 55: 12(bool) All 54 + SelectionMerge 57 None + BranchConditional 55 56 60 + 56: Label + 58: 7(fvec4) Load 9(input) + ReturnValue 58 + 60: Label + 61: 7(fvec4) Load 9(input) + 62: 7(fvec4) FNegate 61 + ReturnValue 62 + 57: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out new file mode 100644 index 00000000..ba8a04b6 --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out @@ -0,0 +1,70 @@ +hlsl.intrinsics.barriers.comp +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:14 Function Definition: ComputeShaderFunction( (temp float) +0:3 Function Parameters: +0:? Sequence +0:4 MemoryBarrier (global void) +0:5 AllMemoryBarrierWithGroupSync (global void) +0:6 GroupMemoryBarrier (global void) +0:7 GroupMemoryBarrierWithGroupSync (global void) +0:8 WorkgroupMemoryBarrier (global void) +0:9 WorkgroupMemoryBarrierWithGroupSync (global void) +0:11 Branch: Return with expression +0:11 Constant: +0:11 0.000000 +0:? Linker Objects + + +Linked compute stage: + + +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:14 Function Definition: ComputeShaderFunction( (temp float) +0:3 Function Parameters: +0:? Sequence +0:4 MemoryBarrier (global void) +0:5 AllMemoryBarrierWithGroupSync (global void) +0:6 GroupMemoryBarrier (global void) +0:7 GroupMemoryBarrierWithGroupSync (global void) +0:8 WorkgroupMemoryBarrier (global void) +0:9 WorkgroupMemoryBarrierWithGroupSync (global void) +0:11 Branch: Return with expression +0:11 Constant: +0:11 0.000000 +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 15 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "ComputeShaderFunction" + ExecutionMode 4 LocalSize 1 1 1 + Source HLSL 450 + Name 4 "ComputeShaderFunction" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) Constant 1 + 8: 6(int) Constant 4048 + 9: 6(int) Constant 512 + 10: 6(int) Constant 2 + 11: 6(int) Constant 256 + 12: TypeFloat 32 + 13: 12(float) Constant 0 +4(ComputeShaderFunction): 2 Function None 3 + 5: Label + MemoryBarrier 7 8 + ControlBarrier 7 7 8 + MemoryBarrier 7 9 + ControlBarrier 7 7 9 + MemoryBarrier 10 11 + ControlBarrier 10 10 11 + ReturnValue 13 + FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out new file mode 100644 index 00000000..d6012df9 --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.comp.out @@ -0,0 +1,768 @@ +hlsl.intrinsics.comp +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:44 Function Definition: ComputeShaderFunction(f1;f1;f1;u1;u1; (temp float) +0:17 Function Parameters: +0:17 'inF0' (in float) +0:17 'inF1' (in float) +0:17 'inF2' (in float) +0:17 'inU0' (in uint) +0:17 'inU1' (in uint) +0:? Sequence +0:21 all (global bool) +0:21 'inF0' (in float) +0:24 AtomicAdd (global void) +0:24 'gs_ua' (temp uint) +0:24 'gs_ub' (temp uint) +0:25 move second child to first child (temp uint) +0:25 'out_u1' (temp uint) +0:25 AtomicAdd (temp uint) +0:25 'gs_ua' (temp uint) +0:25 'gs_ub' (temp uint) +0:26 AtomicAnd (global void) +0:26 'gs_ua' (temp uint) +0:26 'gs_ub' (temp uint) +0:27 move second child to first child (temp uint) +0:27 'out_u1' (temp uint) +0:27 AtomicAnd (temp uint) +0:27 'gs_ua' (temp uint) +0:27 'gs_ub' (temp uint) +0:28 move second child to first child (temp uint) +0:28 'out_u1' (temp uint) +0:28 AtomicCompSwap (temp uint) +0:28 'gs_ua' (temp uint) +0:28 'gs_ub' (temp uint) +0:28 'gs_uc' (temp uint) +0:29 move second child to first child (temp uint) +0:29 'out_u1' (temp uint) +0:29 AtomicExchange (temp uint) +0:29 'gs_ua' (temp uint) +0:29 'gs_ub' (temp uint) +0:30 AtomicMax (global void) +0:30 'gs_ua' (temp uint) +0:30 'gs_ub' (temp uint) +0:31 move second child to first child (temp uint) +0:31 'out_u1' (temp uint) +0:31 AtomicMax (temp uint) +0:31 'gs_ua' (temp uint) +0:31 'gs_ub' (temp uint) +0:32 AtomicMin (global void) +0:32 'gs_ua' (temp uint) +0:32 'gs_ub' (temp uint) +0:33 move second child to first child (temp uint) +0:33 'out_u1' (temp uint) +0:33 AtomicMin (temp uint) +0:33 'gs_ua' (temp uint) +0:33 'gs_ub' (temp uint) +0:34 AtomicOr (global void) +0:34 'gs_ua' (temp uint) +0:34 'gs_ub' (temp uint) +0:35 move second child to first child (temp uint) +0:35 'out_u1' (temp uint) +0:35 AtomicOr (temp uint) +0:35 'gs_ua' (temp uint) +0:35 'gs_ub' (temp uint) +0:36 AtomicXor (global void) +0:36 'gs_ua' (temp uint) +0:36 'gs_ub' (temp uint) +0:37 move second child to first child (temp uint) +0:37 'out_u1' (temp uint) +0:37 AtomicXor (temp uint) +0:37 'gs_ua' (temp uint) +0:37 'gs_ub' (temp uint) +0:41 Branch: Return with expression +0:41 Constant: +0:41 0.000000 +0:50 Function Definition: ComputeShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float) +0:45 Function Parameters: +0:45 'inF0' (in 1-component vector of float) +0:45 'inF1' (in 1-component vector of float) +0:45 'inF2' (in 1-component vector of float) +0:? Sequence +0:47 Branch: Return with expression +0:47 Constant: +0:47 0.000000 +0:77 Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float) +0:51 Function Parameters: +0:51 'inF0' (in 2-component vector of float) +0:51 'inF1' (in 2-component vector of float) +0:51 'inF2' (in 2-component vector of float) +0:51 'inU0' (in 2-component vector of uint) +0:51 'inU1' (in 2-component vector of uint) +0:? Sequence +0:55 all (global bool) +0:55 'inF0' (in 2-component vector of float) +0:58 AtomicAdd (global void) +0:58 'gs_ua2' (temp 2-component vector of uint) +0:58 'gs_ub2' (temp 2-component vector of uint) +0:59 move second child to first child (temp 2-component vector of uint) +0:59 'out_u2' (temp 2-component vector of uint) +0:59 AtomicAdd (temp 2-component vector of uint) +0:59 'gs_ua2' (temp 2-component vector of uint) +0:59 'gs_ub2' (temp 2-component vector of uint) +0:60 AtomicAnd (global void) +0:60 'gs_ua2' (temp 2-component vector of uint) +0:60 'gs_ub2' (temp 2-component vector of uint) +0:61 move second child to first child (temp 2-component vector of uint) +0:61 'out_u2' (temp 2-component vector of uint) +0:61 AtomicAnd (temp 2-component vector of uint) +0:61 'gs_ua2' (temp 2-component vector of uint) +0:61 'gs_ub2' (temp 2-component vector of uint) +0:62 move second child to first child (temp 2-component vector of uint) +0:62 'out_u2' (temp 2-component vector of uint) +0:62 AtomicCompSwap (temp 2-component vector of uint) +0:62 'gs_ua2' (temp 2-component vector of uint) +0:62 'gs_ub2' (temp 2-component vector of uint) +0:62 'gs_uc2' (temp 2-component vector of uint) +0:63 move second child to first child (temp 2-component vector of uint) +0:63 'out_u2' (temp 2-component vector of uint) +0:63 AtomicExchange (temp 2-component vector of uint) +0:63 'gs_ua2' (temp 2-component vector of uint) +0:63 'gs_ub2' (temp 2-component vector of uint) +0:64 AtomicMax (global void) +0:64 'gs_ua2' (temp 2-component vector of uint) +0:64 'gs_ub2' (temp 2-component vector of uint) +0:65 move second child to first child (temp 2-component vector of uint) +0:65 'out_u2' (temp 2-component vector of uint) +0:65 AtomicMax (temp 2-component vector of uint) +0:65 'gs_ua2' (temp 2-component vector of uint) +0:65 'gs_ub2' (temp 2-component vector of uint) +0:66 AtomicMin (global void) +0:66 'gs_ua2' (temp 2-component vector of uint) +0:66 'gs_ub2' (temp 2-component vector of uint) +0:67 move second child to first child (temp 2-component vector of uint) +0:67 'out_u2' (temp 2-component vector of uint) +0:67 AtomicMin (temp 2-component vector of uint) +0:67 'gs_ua2' (temp 2-component vector of uint) +0:67 'gs_ub2' (temp 2-component vector of uint) +0:68 AtomicOr (global void) +0:68 'gs_ua2' (temp 2-component vector of uint) +0:68 'gs_ub2' (temp 2-component vector of uint) +0:69 move second child to first child (temp 2-component vector of uint) +0:69 'out_u2' (temp 2-component vector of uint) +0:69 AtomicOr (temp 2-component vector of uint) +0:69 'gs_ua2' (temp 2-component vector of uint) +0:69 'gs_ub2' (temp 2-component vector of uint) +0:70 AtomicXor (global void) +0:70 'gs_ua2' (temp 2-component vector of uint) +0:70 'gs_ub2' (temp 2-component vector of uint) +0:71 move second child to first child (temp 2-component vector of uint) +0:71 'out_u2' (temp 2-component vector of uint) +0:71 AtomicXor (temp 2-component vector of uint) +0:71 'gs_ua2' (temp 2-component vector of uint) +0:71 'gs_ub2' (temp 2-component vector of uint) +0:74 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:104 Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float) +0:78 Function Parameters: +0:78 'inF0' (in 3-component vector of float) +0:78 'inF1' (in 3-component vector of float) +0:78 'inF2' (in 3-component vector of float) +0:78 'inU0' (in 3-component vector of uint) +0:78 'inU1' (in 3-component vector of uint) +0:? Sequence +0:82 all (global bool) +0:82 'inF0' (in 3-component vector of float) +0:85 AtomicAdd (global void) +0:85 'gs_ua3' (temp 3-component vector of uint) +0:85 'gs_ub3' (temp 3-component vector of uint) +0:86 move second child to first child (temp 3-component vector of uint) +0:86 'out_u3' (temp 3-component vector of uint) +0:86 AtomicAdd (temp 3-component vector of uint) +0:86 'gs_ua3' (temp 3-component vector of uint) +0:86 'gs_ub3' (temp 3-component vector of uint) +0:87 AtomicAnd (global void) +0:87 'gs_ua3' (temp 3-component vector of uint) +0:87 'gs_ub3' (temp 3-component vector of uint) +0:88 move second child to first child (temp 3-component vector of uint) +0:88 'out_u3' (temp 3-component vector of uint) +0:88 AtomicAnd (temp 3-component vector of uint) +0:88 'gs_ua3' (temp 3-component vector of uint) +0:88 'gs_ub3' (temp 3-component vector of uint) +0:89 move second child to first child (temp 3-component vector of uint) +0:89 'out_u3' (temp 3-component vector of uint) +0:89 AtomicCompSwap (temp 3-component vector of uint) +0:89 'gs_ua3' (temp 3-component vector of uint) +0:89 'gs_ub3' (temp 3-component vector of uint) +0:89 'gs_uc3' (temp 3-component vector of uint) +0:90 move second child to first child (temp 3-component vector of uint) +0:90 'out_u3' (temp 3-component vector of uint) +0:90 AtomicExchange (temp 3-component vector of uint) +0:90 'gs_ua3' (temp 3-component vector of uint) +0:90 'gs_ub3' (temp 3-component vector of uint) +0:91 AtomicMax (global void) +0:91 'gs_ua3' (temp 3-component vector of uint) +0:91 'gs_ub3' (temp 3-component vector of uint) +0:92 move second child to first child (temp 3-component vector of uint) +0:92 'out_u3' (temp 3-component vector of uint) +0:92 AtomicMax (temp 3-component vector of uint) +0:92 'gs_ua3' (temp 3-component vector of uint) +0:92 'gs_ub3' (temp 3-component vector of uint) +0:93 AtomicMin (global void) +0:93 'gs_ua3' (temp 3-component vector of uint) +0:93 'gs_ub3' (temp 3-component vector of uint) +0:94 move second child to first child (temp 3-component vector of uint) +0:94 'out_u3' (temp 3-component vector of uint) +0:94 AtomicMin (temp 3-component vector of uint) +0:94 'gs_ua3' (temp 3-component vector of uint) +0:94 'gs_ub3' (temp 3-component vector of uint) +0:95 AtomicOr (global void) +0:95 'gs_ua3' (temp 3-component vector of uint) +0:95 'gs_ub3' (temp 3-component vector of uint) +0:96 move second child to first child (temp 3-component vector of uint) +0:96 'out_u3' (temp 3-component vector of uint) +0:96 AtomicOr (temp 3-component vector of uint) +0:96 'gs_ua3' (temp 3-component vector of uint) +0:96 'gs_ub3' (temp 3-component vector of uint) +0:97 AtomicXor (global void) +0:97 'gs_ua3' (temp 3-component vector of uint) +0:97 'gs_ub3' (temp 3-component vector of uint) +0:98 move second child to first child (temp 3-component vector of uint) +0:98 'out_u3' (temp 3-component vector of uint) +0:98 AtomicXor (temp 3-component vector of uint) +0:98 'gs_ua3' (temp 3-component vector of uint) +0:98 'gs_ub3' (temp 3-component vector of uint) +0:101 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:130 Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float) +0:105 Function Parameters: +0:105 'inF0' (in 4-component vector of float) +0:105 'inF1' (in 4-component vector of float) +0:105 'inF2' (in 4-component vector of float) +0:105 'inU0' (in 4-component vector of uint) +0:105 'inU1' (in 4-component vector of uint) +0:? Sequence +0:109 all (global bool) +0:109 'inF0' (in 4-component vector of float) +0:112 AtomicAdd (global void) +0:112 'gs_ua4' (temp 4-component vector of uint) +0:112 'gs_ub4' (temp 4-component vector of uint) +0:113 move second child to first child (temp 4-component vector of uint) +0:113 'out_u4' (temp 4-component vector of uint) +0:113 AtomicAdd (temp 4-component vector of uint) +0:113 'gs_ua4' (temp 4-component vector of uint) +0:113 'gs_ub4' (temp 4-component vector of uint) +0:114 AtomicAnd (global void) +0:114 'gs_ua4' (temp 4-component vector of uint) +0:114 'gs_ub4' (temp 4-component vector of uint) +0:115 move second child to first child (temp 4-component vector of uint) +0:115 'out_u4' (temp 4-component vector of uint) +0:115 AtomicAnd (temp 4-component vector of uint) +0:115 'gs_ua4' (temp 4-component vector of uint) +0:115 'gs_ub4' (temp 4-component vector of uint) +0:116 move second child to first child (temp 4-component vector of uint) +0:116 'out_u4' (temp 4-component vector of uint) +0:116 AtomicCompSwap (temp 4-component vector of uint) +0:116 'gs_ua4' (temp 4-component vector of uint) +0:116 'gs_ub4' (temp 4-component vector of uint) +0:116 'gs_uc4' (temp 4-component vector of uint) +0:117 move second child to first child (temp 4-component vector of uint) +0:117 'out_u4' (temp 4-component vector of uint) +0:117 AtomicExchange (temp 4-component vector of uint) +0:117 'gs_ua4' (temp 4-component vector of uint) +0:117 'gs_ub4' (temp 4-component vector of uint) +0:118 AtomicMax (global void) +0:118 'gs_ua4' (temp 4-component vector of uint) +0:118 'gs_ub4' (temp 4-component vector of uint) +0:119 move second child to first child (temp 4-component vector of uint) +0:119 'out_u4' (temp 4-component vector of uint) +0:119 AtomicMax (temp 4-component vector of uint) +0:119 'gs_ua4' (temp 4-component vector of uint) +0:119 'gs_ub4' (temp 4-component vector of uint) +0:120 AtomicMin (global void) +0:120 'gs_ua4' (temp 4-component vector of uint) +0:120 'gs_ub4' (temp 4-component vector of uint) +0:121 move second child to first child (temp 4-component vector of uint) +0:121 'out_u4' (temp 4-component vector of uint) +0:121 AtomicMin (temp 4-component vector of uint) +0:121 'gs_ua4' (temp 4-component vector of uint) +0:121 'gs_ub4' (temp 4-component vector of uint) +0:122 AtomicOr (global void) +0:122 'gs_ua4' (temp 4-component vector of uint) +0:122 'gs_ub4' (temp 4-component vector of uint) +0:123 move second child to first child (temp 4-component vector of uint) +0:123 'out_u4' (temp 4-component vector of uint) +0:123 AtomicOr (temp 4-component vector of uint) +0:123 'gs_ua4' (temp 4-component vector of uint) +0:123 'gs_ub4' (temp 4-component vector of uint) +0:124 AtomicXor (global void) +0:124 'gs_ua4' (temp 4-component vector of uint) +0:124 'gs_ub4' (temp 4-component vector of uint) +0:125 move second child to first child (temp 4-component vector of uint) +0:125 'out_u4' (temp 4-component vector of uint) +0:125 AtomicXor (temp 4-component vector of uint) +0:125 'gs_ua4' (temp 4-component vector of uint) +0:125 'gs_ub4' (temp 4-component vector of uint) +0:128 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? Linker Objects +0:? 'gs_ua' (temp uint) +0:? 'gs_ub' (temp uint) +0:? 'gs_uc' (temp uint) +0:? 'gs_ua2' (temp 2-component vector of uint) +0:? 'gs_ub2' (temp 2-component vector of uint) +0:? 'gs_uc2' (temp 2-component vector of uint) +0:? 'gs_ua3' (temp 3-component vector of uint) +0:? 'gs_ub3' (temp 3-component vector of uint) +0:? 'gs_uc3' (temp 3-component vector of uint) +0:? 'gs_ua4' (temp 4-component vector of uint) +0:? 'gs_ub4' (temp 4-component vector of uint) +0:? 'gs_uc4' (temp 4-component vector of uint) + + +Linked compute stage: + + +Shader version: 450 +local_size = (1, 1, 1) +0:? Sequence +0:44 Function Definition: ComputeShaderFunction(f1;f1;f1;u1;u1; (temp float) +0:17 Function Parameters: +0:17 'inF0' (in float) +0:17 'inF1' (in float) +0:17 'inF2' (in float) +0:17 'inU0' (in uint) +0:17 'inU1' (in uint) +0:? Sequence +0:21 all (global bool) +0:21 'inF0' (in float) +0:24 AtomicAdd (global void) +0:24 'gs_ua' (temp uint) +0:24 'gs_ub' (temp uint) +0:25 move second child to first child (temp uint) +0:25 'out_u1' (temp uint) +0:25 AtomicAdd (temp uint) +0:25 'gs_ua' (temp uint) +0:25 'gs_ub' (temp uint) +0:26 AtomicAnd (global void) +0:26 'gs_ua' (temp uint) +0:26 'gs_ub' (temp uint) +0:27 move second child to first child (temp uint) +0:27 'out_u1' (temp uint) +0:27 AtomicAnd (temp uint) +0:27 'gs_ua' (temp uint) +0:27 'gs_ub' (temp uint) +0:28 move second child to first child (temp uint) +0:28 'out_u1' (temp uint) +0:28 AtomicCompSwap (temp uint) +0:28 'gs_ua' (temp uint) +0:28 'gs_ub' (temp uint) +0:28 'gs_uc' (temp uint) +0:29 move second child to first child (temp uint) +0:29 'out_u1' (temp uint) +0:29 AtomicExchange (temp uint) +0:29 'gs_ua' (temp uint) +0:29 'gs_ub' (temp uint) +0:30 AtomicMax (global void) +0:30 'gs_ua' (temp uint) +0:30 'gs_ub' (temp uint) +0:31 move second child to first child (temp uint) +0:31 'out_u1' (temp uint) +0:31 AtomicMax (temp uint) +0:31 'gs_ua' (temp uint) +0:31 'gs_ub' (temp uint) +0:32 AtomicMin (global void) +0:32 'gs_ua' (temp uint) +0:32 'gs_ub' (temp uint) +0:33 move second child to first child (temp uint) +0:33 'out_u1' (temp uint) +0:33 AtomicMin (temp uint) +0:33 'gs_ua' (temp uint) +0:33 'gs_ub' (temp uint) +0:34 AtomicOr (global void) +0:34 'gs_ua' (temp uint) +0:34 'gs_ub' (temp uint) +0:35 move second child to first child (temp uint) +0:35 'out_u1' (temp uint) +0:35 AtomicOr (temp uint) +0:35 'gs_ua' (temp uint) +0:35 'gs_ub' (temp uint) +0:36 AtomicXor (global void) +0:36 'gs_ua' (temp uint) +0:36 'gs_ub' (temp uint) +0:37 move second child to first child (temp uint) +0:37 'out_u1' (temp uint) +0:37 AtomicXor (temp uint) +0:37 'gs_ua' (temp uint) +0:37 'gs_ub' (temp uint) +0:41 Branch: Return with expression +0:41 Constant: +0:41 0.000000 +0:50 Function Definition: ComputeShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float) +0:45 Function Parameters: +0:45 'inF0' (in 1-component vector of float) +0:45 'inF1' (in 1-component vector of float) +0:45 'inF2' (in 1-component vector of float) +0:? Sequence +0:47 Branch: Return with expression +0:47 Constant: +0:47 0.000000 +0:77 Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float) +0:51 Function Parameters: +0:51 'inF0' (in 2-component vector of float) +0:51 'inF1' (in 2-component vector of float) +0:51 'inF2' (in 2-component vector of float) +0:51 'inU0' (in 2-component vector of uint) +0:51 'inU1' (in 2-component vector of uint) +0:? Sequence +0:55 all (global bool) +0:55 'inF0' (in 2-component vector of float) +0:58 AtomicAdd (global void) +0:58 'gs_ua2' (temp 2-component vector of uint) +0:58 'gs_ub2' (temp 2-component vector of uint) +0:59 move second child to first child (temp 2-component vector of uint) +0:59 'out_u2' (temp 2-component vector of uint) +0:59 AtomicAdd (temp 2-component vector of uint) +0:59 'gs_ua2' (temp 2-component vector of uint) +0:59 'gs_ub2' (temp 2-component vector of uint) +0:60 AtomicAnd (global void) +0:60 'gs_ua2' (temp 2-component vector of uint) +0:60 'gs_ub2' (temp 2-component vector of uint) +0:61 move second child to first child (temp 2-component vector of uint) +0:61 'out_u2' (temp 2-component vector of uint) +0:61 AtomicAnd (temp 2-component vector of uint) +0:61 'gs_ua2' (temp 2-component vector of uint) +0:61 'gs_ub2' (temp 2-component vector of uint) +0:62 move second child to first child (temp 2-component vector of uint) +0:62 'out_u2' (temp 2-component vector of uint) +0:62 AtomicCompSwap (temp 2-component vector of uint) +0:62 'gs_ua2' (temp 2-component vector of uint) +0:62 'gs_ub2' (temp 2-component vector of uint) +0:62 'gs_uc2' (temp 2-component vector of uint) +0:63 move second child to first child (temp 2-component vector of uint) +0:63 'out_u2' (temp 2-component vector of uint) +0:63 AtomicExchange (temp 2-component vector of uint) +0:63 'gs_ua2' (temp 2-component vector of uint) +0:63 'gs_ub2' (temp 2-component vector of uint) +0:64 AtomicMax (global void) +0:64 'gs_ua2' (temp 2-component vector of uint) +0:64 'gs_ub2' (temp 2-component vector of uint) +0:65 move second child to first child (temp 2-component vector of uint) +0:65 'out_u2' (temp 2-component vector of uint) +0:65 AtomicMax (temp 2-component vector of uint) +0:65 'gs_ua2' (temp 2-component vector of uint) +0:65 'gs_ub2' (temp 2-component vector of uint) +0:66 AtomicMin (global void) +0:66 'gs_ua2' (temp 2-component vector of uint) +0:66 'gs_ub2' (temp 2-component vector of uint) +0:67 move second child to first child (temp 2-component vector of uint) +0:67 'out_u2' (temp 2-component vector of uint) +0:67 AtomicMin (temp 2-component vector of uint) +0:67 'gs_ua2' (temp 2-component vector of uint) +0:67 'gs_ub2' (temp 2-component vector of uint) +0:68 AtomicOr (global void) +0:68 'gs_ua2' (temp 2-component vector of uint) +0:68 'gs_ub2' (temp 2-component vector of uint) +0:69 move second child to first child (temp 2-component vector of uint) +0:69 'out_u2' (temp 2-component vector of uint) +0:69 AtomicOr (temp 2-component vector of uint) +0:69 'gs_ua2' (temp 2-component vector of uint) +0:69 'gs_ub2' (temp 2-component vector of uint) +0:70 AtomicXor (global void) +0:70 'gs_ua2' (temp 2-component vector of uint) +0:70 'gs_ub2' (temp 2-component vector of uint) +0:71 move second child to first child (temp 2-component vector of uint) +0:71 'out_u2' (temp 2-component vector of uint) +0:71 AtomicXor (temp 2-component vector of uint) +0:71 'gs_ua2' (temp 2-component vector of uint) +0:71 'gs_ub2' (temp 2-component vector of uint) +0:74 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:104 Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float) +0:78 Function Parameters: +0:78 'inF0' (in 3-component vector of float) +0:78 'inF1' (in 3-component vector of float) +0:78 'inF2' (in 3-component vector of float) +0:78 'inU0' (in 3-component vector of uint) +0:78 'inU1' (in 3-component vector of uint) +0:? Sequence +0:82 all (global bool) +0:82 'inF0' (in 3-component vector of float) +0:85 AtomicAdd (global void) +0:85 'gs_ua3' (temp 3-component vector of uint) +0:85 'gs_ub3' (temp 3-component vector of uint) +0:86 move second child to first child (temp 3-component vector of uint) +0:86 'out_u3' (temp 3-component vector of uint) +0:86 AtomicAdd (temp 3-component vector of uint) +0:86 'gs_ua3' (temp 3-component vector of uint) +0:86 'gs_ub3' (temp 3-component vector of uint) +0:87 AtomicAnd (global void) +0:87 'gs_ua3' (temp 3-component vector of uint) +0:87 'gs_ub3' (temp 3-component vector of uint) +0:88 move second child to first child (temp 3-component vector of uint) +0:88 'out_u3' (temp 3-component vector of uint) +0:88 AtomicAnd (temp 3-component vector of uint) +0:88 'gs_ua3' (temp 3-component vector of uint) +0:88 'gs_ub3' (temp 3-component vector of uint) +0:89 move second child to first child (temp 3-component vector of uint) +0:89 'out_u3' (temp 3-component vector of uint) +0:89 AtomicCompSwap (temp 3-component vector of uint) +0:89 'gs_ua3' (temp 3-component vector of uint) +0:89 'gs_ub3' (temp 3-component vector of uint) +0:89 'gs_uc3' (temp 3-component vector of uint) +0:90 move second child to first child (temp 3-component vector of uint) +0:90 'out_u3' (temp 3-component vector of uint) +0:90 AtomicExchange (temp 3-component vector of uint) +0:90 'gs_ua3' (temp 3-component vector of uint) +0:90 'gs_ub3' (temp 3-component vector of uint) +0:91 AtomicMax (global void) +0:91 'gs_ua3' (temp 3-component vector of uint) +0:91 'gs_ub3' (temp 3-component vector of uint) +0:92 move second child to first child (temp 3-component vector of uint) +0:92 'out_u3' (temp 3-component vector of uint) +0:92 AtomicMax (temp 3-component vector of uint) +0:92 'gs_ua3' (temp 3-component vector of uint) +0:92 'gs_ub3' (temp 3-component vector of uint) +0:93 AtomicMin (global void) +0:93 'gs_ua3' (temp 3-component vector of uint) +0:93 'gs_ub3' (temp 3-component vector of uint) +0:94 move second child to first child (temp 3-component vector of uint) +0:94 'out_u3' (temp 3-component vector of uint) +0:94 AtomicMin (temp 3-component vector of uint) +0:94 'gs_ua3' (temp 3-component vector of uint) +0:94 'gs_ub3' (temp 3-component vector of uint) +0:95 AtomicOr (global void) +0:95 'gs_ua3' (temp 3-component vector of uint) +0:95 'gs_ub3' (temp 3-component vector of uint) +0:96 move second child to first child (temp 3-component vector of uint) +0:96 'out_u3' (temp 3-component vector of uint) +0:96 AtomicOr (temp 3-component vector of uint) +0:96 'gs_ua3' (temp 3-component vector of uint) +0:96 'gs_ub3' (temp 3-component vector of uint) +0:97 AtomicXor (global void) +0:97 'gs_ua3' (temp 3-component vector of uint) +0:97 'gs_ub3' (temp 3-component vector of uint) +0:98 move second child to first child (temp 3-component vector of uint) +0:98 'out_u3' (temp 3-component vector of uint) +0:98 AtomicXor (temp 3-component vector of uint) +0:98 'gs_ua3' (temp 3-component vector of uint) +0:98 'gs_ub3' (temp 3-component vector of uint) +0:101 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:130 Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float) +0:105 Function Parameters: +0:105 'inF0' (in 4-component vector of float) +0:105 'inF1' (in 4-component vector of float) +0:105 'inF2' (in 4-component vector of float) +0:105 'inU0' (in 4-component vector of uint) +0:105 'inU1' (in 4-component vector of uint) +0:? Sequence +0:109 all (global bool) +0:109 'inF0' (in 4-component vector of float) +0:112 AtomicAdd (global void) +0:112 'gs_ua4' (temp 4-component vector of uint) +0:112 'gs_ub4' (temp 4-component vector of uint) +0:113 move second child to first child (temp 4-component vector of uint) +0:113 'out_u4' (temp 4-component vector of uint) +0:113 AtomicAdd (temp 4-component vector of uint) +0:113 'gs_ua4' (temp 4-component vector of uint) +0:113 'gs_ub4' (temp 4-component vector of uint) +0:114 AtomicAnd (global void) +0:114 'gs_ua4' (temp 4-component vector of uint) +0:114 'gs_ub4' (temp 4-component vector of uint) +0:115 move second child to first child (temp 4-component vector of uint) +0:115 'out_u4' (temp 4-component vector of uint) +0:115 AtomicAnd (temp 4-component vector of uint) +0:115 'gs_ua4' (temp 4-component vector of uint) +0:115 'gs_ub4' (temp 4-component vector of uint) +0:116 move second child to first child (temp 4-component vector of uint) +0:116 'out_u4' (temp 4-component vector of uint) +0:116 AtomicCompSwap (temp 4-component vector of uint) +0:116 'gs_ua4' (temp 4-component vector of uint) +0:116 'gs_ub4' (temp 4-component vector of uint) +0:116 'gs_uc4' (temp 4-component vector of uint) +0:117 move second child to first child (temp 4-component vector of uint) +0:117 'out_u4' (temp 4-component vector of uint) +0:117 AtomicExchange (temp 4-component vector of uint) +0:117 'gs_ua4' (temp 4-component vector of uint) +0:117 'gs_ub4' (temp 4-component vector of uint) +0:118 AtomicMax (global void) +0:118 'gs_ua4' (temp 4-component vector of uint) +0:118 'gs_ub4' (temp 4-component vector of uint) +0:119 move second child to first child (temp 4-component vector of uint) +0:119 'out_u4' (temp 4-component vector of uint) +0:119 AtomicMax (temp 4-component vector of uint) +0:119 'gs_ua4' (temp 4-component vector of uint) +0:119 'gs_ub4' (temp 4-component vector of uint) +0:120 AtomicMin (global void) +0:120 'gs_ua4' (temp 4-component vector of uint) +0:120 'gs_ub4' (temp 4-component vector of uint) +0:121 move second child to first child (temp 4-component vector of uint) +0:121 'out_u4' (temp 4-component vector of uint) +0:121 AtomicMin (temp 4-component vector of uint) +0:121 'gs_ua4' (temp 4-component vector of uint) +0:121 'gs_ub4' (temp 4-component vector of uint) +0:122 AtomicOr (global void) +0:122 'gs_ua4' (temp 4-component vector of uint) +0:122 'gs_ub4' (temp 4-component vector of uint) +0:123 move second child to first child (temp 4-component vector of uint) +0:123 'out_u4' (temp 4-component vector of uint) +0:123 AtomicOr (temp 4-component vector of uint) +0:123 'gs_ua4' (temp 4-component vector of uint) +0:123 'gs_ub4' (temp 4-component vector of uint) +0:124 AtomicXor (global void) +0:124 'gs_ua4' (temp 4-component vector of uint) +0:124 'gs_ub4' (temp 4-component vector of uint) +0:125 move second child to first child (temp 4-component vector of uint) +0:125 'out_u4' (temp 4-component vector of uint) +0:125 AtomicXor (temp 4-component vector of uint) +0:125 'gs_ua4' (temp 4-component vector of uint) +0:125 'gs_ub4' (temp 4-component vector of uint) +0:128 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? Linker Objects +0:? 'gs_ua' (temp uint) +0:? 'gs_ub' (temp uint) +0:? 'gs_uc' (temp uint) +0:? 'gs_ua2' (temp 2-component vector of uint) +0:? 'gs_ub2' (temp 2-component vector of uint) +0:? 'gs_uc2' (temp 2-component vector of uint) +0:? 'gs_ua3' (temp 3-component vector of uint) +0:? 'gs_ub3' (temp 3-component vector of uint) +0:? 'gs_uc3' (temp 3-component vector of uint) +0:? 'gs_ua4' (temp 4-component vector of uint) +0:? 'gs_ub4' (temp 4-component vector of uint) +0:? 'gs_uc4' (temp 4-component vector of uint) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 182 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "ComputeShaderFunction" 8 54 98 141 + ExecutionMode 4 LocalSize 1 1 1 + Source HLSL 450 + Name 4 "ComputeShaderFunction" + Name 8 "inF0" + Name 14 "gs_ua" + Name 15 "gs_ub" + Name 20 "out_u1" + Name 28 "gs_uc" + Name 54 "inF0" + Name 59 "gs_ua2" + Name 60 "gs_ub2" + Name 63 "out_u2" + Name 71 "gs_uc2" + Name 98 "inF0" + Name 103 "gs_ua3" + Name 104 "gs_ub3" + Name 107 "out_u3" + Name 115 "gs_uc3" + Name 141 "inF0" + Name 146 "gs_ua4" + Name 147 "gs_ub4" + Name 150 "out_u4" + Name 158 "gs_uc4" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Input 6(float) + 8(inF0): 7(ptr) Variable Input + 10: TypeBool + 12: TypeInt 32 0 + 13: TypePointer Function 12(int) + 17: 12(int) Constant 1 + 18: 12(int) Constant 0 + 49: 6(float) Constant 0 + 52: TypeVector 6(float) 2 + 53: TypePointer Input 52(fvec2) + 54(inF0): 53(ptr) Variable Input + 57: TypeVector 12(int) 2 + 58: TypePointer Function 57(ivec2) + 92: 6(float) Constant 1065353216 + 93: 6(float) Constant 1073741824 + 94: 52(fvec2) ConstantComposite 92 93 + 96: TypeVector 6(float) 3 + 97: TypePointer Input 96(fvec3) + 98(inF0): 97(ptr) Variable Input + 101: TypeVector 12(int) 3 + 102: TypePointer Function 101(ivec3) + 136: 6(float) Constant 1077936128 + 137: 96(fvec3) ConstantComposite 92 93 136 + 139: TypeVector 6(float) 4 + 140: TypePointer Input 139(fvec4) + 141(inF0): 140(ptr) Variable Input + 144: TypeVector 12(int) 4 + 145: TypePointer Function 144(ivec4) + 179: 6(float) Constant 1082130432 + 180: 139(fvec4) ConstantComposite 92 93 136 179 +4(ComputeShaderFunction): 2 Function None 3 + 5: Label + 14(gs_ua): 13(ptr) Variable Function + 15(gs_ub): 13(ptr) Variable Function + 20(out_u1): 13(ptr) Variable Function + 28(gs_uc): 13(ptr) Variable Function + 59(gs_ua2): 58(ptr) Variable Function + 60(gs_ub2): 58(ptr) Variable Function + 63(out_u2): 58(ptr) Variable Function + 71(gs_uc2): 58(ptr) Variable Function + 103(gs_ua3): 102(ptr) Variable Function + 104(gs_ub3): 102(ptr) Variable Function + 107(out_u3): 102(ptr) Variable Function + 115(gs_uc3): 102(ptr) Variable Function + 146(gs_ua4): 145(ptr) Variable Function + 147(gs_ub4): 145(ptr) Variable Function + 150(out_u4): 145(ptr) Variable Function + 158(gs_uc4): 145(ptr) Variable Function + 9: 6(float) Load 8(inF0) + 11: 10(bool) All 9 + 16: 12(int) Load 15(gs_ub) + 19: 2 AtomicIAdd 14(gs_ua) 17 18 16 + 21: 12(int) Load 15(gs_ub) + 22: 12(int) AtomicIAdd 14(gs_ua) 17 18 21 + Store 20(out_u1) 22 + 23: 12(int) Load 15(gs_ub) + 24: 2 AtomicAnd 14(gs_ua) 17 18 23 + 25: 12(int) Load 15(gs_ub) + 26: 12(int) AtomicAnd 14(gs_ua) 17 18 25 + Store 20(out_u1) 26 + 27: 12(int) Load 15(gs_ub) + 29: 12(int) Load 28(gs_uc) + 30: 12(int) AtomicCompareExchange 14(gs_ua) 17 18 18 29 27 + Store 20(out_u1) 30 + 31: 12(int) Load 15(gs_ub) + 32: 12(int) AtomicExchange 14(gs_ua) 17 18 31 + Store 20(out_u1) 32 + 33: 12(int) Load 15(gs_ub) + 34: 2 AtomicSMax 14(gs_ua) 17 18 33 + 35: 12(int) Load 15(gs_ub) + 36: 12(int) AtomicUMax 14(gs_ua) 17 18 35 + Store 20(out_u1) 36 + 37: 12(int) Load 15(gs_ub) + 38: 2 AtomicSMin 14(gs_ua) 17 18 37 + 39: 12(int) Load 15(gs_ub) + 40: 12(int) AtomicUMin 14(gs_ua) 17 18 39 + Store 20(out_u1) 40 + 41: 12(int) Load 15(gs_ub) + 42: 2 AtomicOr 14(gs_ua) 17 18 41 + 43: 12(int) Load 15(gs_ub) + 44: 12(int) AtomicOr 14(gs_ua) 17 18 43 + Store 20(out_u1) 44 + 45: 12(int) Load 15(gs_ub) + 46: 2 AtomicXor 14(gs_ua) 17 18 45 + 47: 12(int) Load 15(gs_ub) + 48: 12(int) AtomicXor 14(gs_ua) 17 18 47 + Store 20(out_u1) 48 + ReturnValue 49 + FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out new file mode 100644 index 00000000..1c22b25a --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out @@ -0,0 +1,160 @@ +hlsl.intrinsics.evalfns.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:11 Function Definition: main(f1;vf2;vf3;vf4;vi2; (temp void) +0:3 Function Parameters: +0:3 'inF1' (in float) +0:3 'inF2' (in 2-component vector of float) +0:3 'inF3' (in 3-component vector of float) +0:3 'inF4' (in 4-component vector of float) +0:3 'inI2' (in 2-component vector of int) +0:? Sequence +0:4 interpolateAtOffset (temp float) +0:4 'inF1' (in float) +0:? Constant: +0:? -0.500000 +0:? -0.062500 +0:5 interpolateAtOffset (temp 2-component vector of float) +0:5 'inF2' (in 2-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.062500 +0:6 interpolateAtOffset (temp 3-component vector of float) +0:6 'inF3' (in 3-component vector of float) +0:? Constant: +0:? 0.187500 +0:? -0.375000 +0:7 interpolateAtOffset (temp 4-component vector of float) +0:7 'inF4' (in 4-component vector of float) +0:? Constant: +0:? 0.437500 +0:? -0.500000 +0:9 interpolateAtOffset (temp float) +0:9 'inF1' (in float) +0:9 vector-scale (temp 2-component vector of float) +0:9 Convert int to float (temp 2-component vector of float) +0:9 right-shift (temp 2-component vector of int) +0:9 left-shift (temp 2-component vector of int) +0:9 'inI2' (in 2-component vector of int) +0:9 Constant: +0:9 28 (const int) +0:9 Constant: +0:9 28 (const int) +0:9 Constant: +0:9 0.062500 +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:11 Function Definition: main(f1;vf2;vf3;vf4;vi2; (temp void) +0:3 Function Parameters: +0:3 'inF1' (in float) +0:3 'inF2' (in 2-component vector of float) +0:3 'inF3' (in 3-component vector of float) +0:3 'inF4' (in 4-component vector of float) +0:3 'inI2' (in 2-component vector of int) +0:? Sequence +0:4 interpolateAtOffset (temp float) +0:4 'inF1' (in float) +0:? Constant: +0:? -0.500000 +0:? -0.062500 +0:5 interpolateAtOffset (temp 2-component vector of float) +0:5 'inF2' (in 2-component vector of float) +0:? Constant: +0:? 0.000000 +0:? 0.062500 +0:6 interpolateAtOffset (temp 3-component vector of float) +0:6 'inF3' (in 3-component vector of float) +0:? Constant: +0:? 0.187500 +0:? -0.375000 +0:7 interpolateAtOffset (temp 4-component vector of float) +0:7 'inF4' (in 4-component vector of float) +0:? Constant: +0:? 0.437500 +0:? -0.500000 +0:9 interpolateAtOffset (temp float) +0:9 'inF1' (in float) +0:9 vector-scale (temp 2-component vector of float) +0:9 Convert int to float (temp 2-component vector of float) +0:9 right-shift (temp 2-component vector of int) +0:9 left-shift (temp 2-component vector of int) +0:9 'inI2' (in 2-component vector of int) +0:9 Constant: +0:9 28 (const int) +0:9 Constant: +0:9 28 (const int) +0:9 Constant: +0:9 0.062500 +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 46 + + Capability Shader + Capability InterpolationFunction + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 15 22 29 36 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "main" + Name 8 "inF1" + Name 15 "inF2" + Name 22 "inF3" + Name 29 "inF4" + Name 36 "inI2" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Input 6(float) + 8(inF1): 7(ptr) Variable Input + 9: TypeVector 6(float) 2 + 10: 6(float) Constant 3204448256 + 11: 6(float) Constant 3179282432 + 12: 9(fvec2) ConstantComposite 10 11 + 14: TypePointer Input 9(fvec2) + 15(inF2): 14(ptr) Variable Input + 16: 6(float) Constant 0 + 17: 6(float) Constant 1031798784 + 18: 9(fvec2) ConstantComposite 16 17 + 20: TypeVector 6(float) 3 + 21: TypePointer Input 20(fvec3) + 22(inF3): 21(ptr) Variable Input + 23: 6(float) Constant 1044381696 + 24: 6(float) Constant 3200253952 + 25: 9(fvec2) ConstantComposite 23 24 + 27: TypeVector 6(float) 4 + 28: TypePointer Input 27(fvec4) + 29(inF4): 28(ptr) Variable Input + 30: 6(float) Constant 1054867456 + 31: 9(fvec2) ConstantComposite 30 10 + 33: TypeInt 32 1 + 34: TypeVector 33(int) 2 + 35: TypePointer Input 34(ivec2) + 36(inI2): 35(ptr) Variable Input + 38: 33(int) Constant 28 + 4(main): 2 Function None 3 + 5: Label + 13: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 8(inF1) 12 + 19: 9(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 15(inF2) 18 + 26: 20(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 22(inF3) 25 + 32: 27(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 29(inF4) 31 + 37: 34(ivec2) Load 36(inI2) + 39: 34(ivec2) CompositeConstruct 38 38 + 40: 34(ivec2) ShiftLeftLogical 37 39 + 41: 34(ivec2) CompositeConstruct 38 38 + 42: 34(ivec2) ShiftRightArithmetic 40 41 + 43: 9(fvec2) ConvertSToF 42 + 44: 9(fvec2) VectorTimesScalar 43 17 + 45: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 8(inF1) 44 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.f1632.frag.out b/Test/baseResults/hlsl.intrinsics.f1632.frag.out new file mode 100644 index 00000000..a4930ec9 --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.f1632.frag.out @@ -0,0 +1,129 @@ +hlsl.intrinsics.f1632.frag +ERROR: 0:3: 'f32tof16' : unimplemented intrinsic: handle natively +ERROR: 0:16: 'f32tof16' : unimplemented intrinsic: handle natively +ERROR: 0:23: 'f32tof16' : unimplemented intrinsic: handle natively +ERROR: 0:30: 'f32tof16' : unimplemented intrinsic: handle natively +ERROR: 4 compilation errors. No code generated. + + +Shader version: 450 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:8 Function Definition: PixelShaderFunction(f1; (temp float) +0:2 Function Parameters: +0:2 'inF0' (in float) +0:? Sequence +0:3 ERROR: Bad unary op + (global uint) +0:3 'inF0' (in float) +0:5 Branch: Return with expression +0:5 Constant: +0:5 0.000000 +0:14 Function Definition: PixelShaderFunction(vf1; (temp 1-component vector of float) +0:9 Function Parameters: +0:9 'inF0' (in 1-component vector of float) +0:? Sequence +0:11 Branch: Return with expression +0:11 Constant: +0:11 0.000000 +0:21 Function Definition: PixelShaderFunction(vf2; (temp 2-component vector of float) +0:15 Function Parameters: +0:15 'inF0' (in 2-component vector of float) +0:? Sequence +0:16 ERROR: Bad unary op + (global 2-component vector of uint) +0:16 'inF0' (in 2-component vector of float) +0:18 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:28 Function Definition: PixelShaderFunction(vf3; (temp 3-component vector of float) +0:22 Function Parameters: +0:22 'inF0' (in 3-component vector of float) +0:? Sequence +0:23 ERROR: Bad unary op + (global 3-component vector of uint) +0:23 'inF0' (in 3-component vector of float) +0:25 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:35 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:29 Function Parameters: +0:29 'inF0' (in 4-component vector of float) +0:? Sequence +0:30 ERROR: Bad unary op + (global 4-component vector of uint) +0:30 'inF0' (in 4-component vector of float) +0:32 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:8 Function Definition: PixelShaderFunction(f1; (temp float) +0:2 Function Parameters: +0:2 'inF0' (in float) +0:? Sequence +0:3 ERROR: Bad unary op + (global uint) +0:3 'inF0' (in float) +0:5 Branch: Return with expression +0:5 Constant: +0:5 0.000000 +0:14 Function Definition: PixelShaderFunction(vf1; (temp 1-component vector of float) +0:9 Function Parameters: +0:9 'inF0' (in 1-component vector of float) +0:? Sequence +0:11 Branch: Return with expression +0:11 Constant: +0:11 0.000000 +0:21 Function Definition: PixelShaderFunction(vf2; (temp 2-component vector of float) +0:15 Function Parameters: +0:15 'inF0' (in 2-component vector of float) +0:? Sequence +0:16 ERROR: Bad unary op + (global 2-component vector of uint) +0:16 'inF0' (in 2-component vector of float) +0:18 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:28 Function Definition: PixelShaderFunction(vf3; (temp 3-component vector of float) +0:22 Function Parameters: +0:22 'inF0' (in 3-component vector of float) +0:? Sequence +0:23 ERROR: Bad unary op + (global 3-component vector of uint) +0:23 'inF0' (in 3-component vector of float) +0:25 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:35 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:29 Function Parameters: +0:29 'inF0' (in 4-component vector of float) +0:? Sequence +0:30 ERROR: Bad unary op + (global 4-component vector of uint) +0:30 'inF0' (in 4-component vector of float) +0:32 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? Linker Objects + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out new file mode 100644 index 00000000..c280bbde --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.frag.out @@ -0,0 +1,3431 @@ +hlsl.intrinsics.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:87 Function Definition: PixelShaderFunction(f1;f1;f1;u1;u1; (temp float) +0:17 Function Parameters: +0:17 'inF0' (in float) +0:17 'inF1' (in float) +0:17 'inF2' (in float) +0:17 'inU0' (in uint) +0:17 'inU1' (in uint) +0:? Sequence +0:20 all (global bool) +0:20 'inF0' (in float) +0:21 Absolute value (global float) +0:21 'inF0' (in float) +0:22 arc cosine (global float) +0:22 'inF0' (in float) +0:23 any (global bool) +0:23 'inF0' (in float) +0:24 arc sine (global float) +0:24 'inF0' (in float) +0:25 floatBitsToInt (global int) +0:25 'inF0' (in float) +0:26 floatBitsToUint (global uint) +0:26 'inF0' (in float) +0:27 intBitsToFloat (global float) +0:27 'inU0' (in uint) +0:29 arc tangent (global float) +0:29 'inF0' (in float) +0:30 arc tangent (global float) +0:30 'inF0' (in float) +0:30 'inF1' (in float) +0:31 Ceiling (global float) +0:31 'inF0' (in float) +0:32 clamp (global float) +0:32 'inF0' (in float) +0:32 'inF1' (in float) +0:32 'inF2' (in float) +0:33 Test condition and select (temp void) +0:33 Condition +0:33 Compare Less Than (temp bool) +0:33 'inF0' (in float) +0:33 Constant: +0:33 0.000000 +0:33 true case +0:33 Branch: Kill +0:34 cosine (global float) +0:34 'inF0' (in float) +0:35 hyp. cosine (global float) +0:35 'inF0' (in float) +0:36 bitCount (global uint) +0:36 Constant: +0:36 7 (const uint) +0:37 dPdx (global float) +0:37 'inF0' (in float) +0:38 dPdxCoarse (global float) +0:38 'inF0' (in float) +0:39 dPdxFine (global float) +0:39 'inF0' (in float) +0:40 dPdy (global float) +0:40 'inF0' (in float) +0:41 dPdyCoarse (global float) +0:41 'inF0' (in float) +0:42 dPdyFine (global float) +0:42 'inF0' (in float) +0:43 degrees (global float) +0:43 'inF0' (in float) +0:47 exp (global float) +0:47 'inF0' (in float) +0:48 exp2 (global float) +0:48 'inF0' (in float) +0:49 findMSB (global int) +0:49 Constant: +0:49 7 (const int) +0:50 findLSB (global int) +0:50 Constant: +0:50 7 (const int) +0:51 Floor (global float) +0:51 'inF0' (in float) +0:53 mod (global float) +0:53 'inF0' (in float) +0:53 'inF1' (in float) +0:54 Fraction (global float) +0:54 'inF0' (in float) +0:55 frexp (global float) +0:55 'inF0' (in float) +0:55 'inF1' (in float) +0:56 fwidth (global float) +0:56 'inF0' (in float) +0:57 isinf (global bool) +0:57 'inF0' (in float) +0:58 isnan (global bool) +0:58 'inF0' (in float) +0:59 ldexp (global float) +0:59 'inF0' (in float) +0:59 'inF1' (in float) +0:60 log (global float) +0:60 'inF0' (in float) +0:61 component-wise multiply (temp float) +0:61 log2 (temp float) +0:61 'inF0' (in float) +0:61 Constant: +0:61 0.301030 +0:62 log2 (global float) +0:62 'inF0' (in float) +0:63 max (global float) +0:63 'inF0' (in float) +0:63 'inF1' (in float) +0:64 min (global float) +0:64 'inF0' (in float) +0:64 'inF1' (in float) +0:65 pow (global float) +0:65 'inF0' (in float) +0:65 'inF1' (in float) +0:66 radians (global float) +0:66 'inF0' (in float) +0:67 divide (temp float) +0:67 Constant: +0:67 1.000000 +0:67 'inF0' (in float) +0:68 bitFieldReverse (global uint) +0:68 Constant: +0:68 2 (const uint) +0:69 roundEven (global float) +0:69 'inF0' (in float) +0:70 inverse sqrt (global float) +0:70 'inF0' (in float) +0:71 clamp (temp float) +0:71 'inF0' (in float) +0:71 Constant: +0:71 0.000000 +0:71 Constant: +0:71 1.000000 +0:72 Sign (global float) +0:72 'inF0' (in float) +0:73 sine (global float) +0:73 'inF0' (in float) +0:74 Sequence +0:74 move second child to first child (temp float) +0:74 'inF1' (in float) +0:74 sine (temp float) +0:74 'inF0' (in float) +0:74 move second child to first child (temp float) +0:74 'inF2' (in float) +0:74 cosine (temp float) +0:74 'inF0' (in float) +0:75 hyp. sine (global float) +0:75 'inF0' (in float) +0:76 smoothstep (global float) +0:76 'inF0' (in float) +0:76 'inF1' (in float) +0:76 'inF2' (in float) +0:77 sqrt (global float) +0:77 'inF0' (in float) +0:78 step (global float) +0:78 'inF0' (in float) +0:78 'inF1' (in float) +0:79 tangent (global float) +0:79 'inF0' (in float) +0:80 hyp. tangent (global float) +0:80 'inF0' (in float) +0:82 trunc (global float) +0:82 'inF0' (in float) +0:84 Branch: Return with expression +0:84 Constant: +0:84 0.000000 +0:93 Function Definition: PixelShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float) +0:88 Function Parameters: +0:88 'inF0' (in 1-component vector of float) +0:88 'inF1' (in 1-component vector of float) +0:88 'inF2' (in 1-component vector of float) +0:? Sequence +0:90 Branch: Return with expression +0:90 Constant: +0:90 0.000000 +0:172 Function Definition: PixelShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float) +0:94 Function Parameters: +0:94 'inF0' (in 2-component vector of float) +0:94 'inF1' (in 2-component vector of float) +0:94 'inF2' (in 2-component vector of float) +0:94 'inU0' (in 2-component vector of uint) +0:94 'inU1' (in 2-component vector of uint) +0:? Sequence +0:97 all (global bool) +0:97 'inF0' (in 2-component vector of float) +0:98 Absolute value (global 2-component vector of float) +0:98 'inF0' (in 2-component vector of float) +0:99 arc cosine (global 2-component vector of float) +0:99 'inF0' (in 2-component vector of float) +0:100 any (global bool) +0:100 'inF0' (in 2-component vector of float) +0:101 arc sine (global 2-component vector of float) +0:101 'inF0' (in 2-component vector of float) +0:102 floatBitsToInt (global 2-component vector of int) +0:102 'inF0' (in 2-component vector of float) +0:103 floatBitsToUint (global 2-component vector of uint) +0:103 'inF0' (in 2-component vector of float) +0:104 intBitsToFloat (global 2-component vector of float) +0:104 'inU0' (in 2-component vector of uint) +0:106 arc tangent (global 2-component vector of float) +0:106 'inF0' (in 2-component vector of float) +0:107 arc tangent (global 2-component vector of float) +0:107 'inF0' (in 2-component vector of float) +0:107 'inF1' (in 2-component vector of float) +0:108 Ceiling (global 2-component vector of float) +0:108 'inF0' (in 2-component vector of float) +0:109 clamp (global 2-component vector of float) +0:109 'inF0' (in 2-component vector of float) +0:109 'inF1' (in 2-component vector of float) +0:109 'inF2' (in 2-component vector of float) +0:110 Test condition and select (temp void) +0:110 Condition +0:110 any (temp bool) +0:110 Compare Less Than (temp 2-component vector of bool) +0:110 'inF0' (in 2-component vector of float) +0:110 Constant: +0:110 0.000000 +0:110 0.000000 +0:110 true case +0:110 Branch: Kill +0:111 cosine (global 2-component vector of float) +0:111 'inF0' (in 2-component vector of float) +0:112 hyp. cosine (global 2-component vector of float) +0:112 'inF0' (in 2-component vector of float) +0:? bitCount (global 2-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:114 dPdx (global 2-component vector of float) +0:114 'inF0' (in 2-component vector of float) +0:115 dPdxCoarse (global 2-component vector of float) +0:115 'inF0' (in 2-component vector of float) +0:116 dPdxFine (global 2-component vector of float) +0:116 'inF0' (in 2-component vector of float) +0:117 dPdy (global 2-component vector of float) +0:117 'inF0' (in 2-component vector of float) +0:118 dPdyCoarse (global 2-component vector of float) +0:118 'inF0' (in 2-component vector of float) +0:119 dPdyFine (global 2-component vector of float) +0:119 'inF0' (in 2-component vector of float) +0:120 degrees (global 2-component vector of float) +0:120 'inF0' (in 2-component vector of float) +0:121 distance (global float) +0:121 'inF0' (in 2-component vector of float) +0:121 'inF1' (in 2-component vector of float) +0:122 dot-product (global float) +0:122 'inF0' (in 2-component vector of float) +0:122 'inF1' (in 2-component vector of float) +0:126 exp (global 2-component vector of float) +0:126 'inF0' (in 2-component vector of float) +0:127 exp2 (global 2-component vector of float) +0:127 'inF0' (in 2-component vector of float) +0:128 face-forward (global 2-component vector of float) +0:128 'inF0' (in 2-component vector of float) +0:128 'inF1' (in 2-component vector of float) +0:128 'inF2' (in 2-component vector of float) +0:129 findMSB (global int) +0:129 Constant: +0:129 7 (const int) +0:130 findLSB (global int) +0:130 Constant: +0:130 7 (const int) +0:131 Floor (global 2-component vector of float) +0:131 'inF0' (in 2-component vector of float) +0:133 mod (global 2-component vector of float) +0:133 'inF0' (in 2-component vector of float) +0:133 'inF1' (in 2-component vector of float) +0:134 Fraction (global 2-component vector of float) +0:134 'inF0' (in 2-component vector of float) +0:135 frexp (global 2-component vector of float) +0:135 'inF0' (in 2-component vector of float) +0:135 'inF1' (in 2-component vector of float) +0:136 fwidth (global 2-component vector of float) +0:136 'inF0' (in 2-component vector of float) +0:137 isinf (global 2-component vector of bool) +0:137 'inF0' (in 2-component vector of float) +0:138 isnan (global 2-component vector of bool) +0:138 'inF0' (in 2-component vector of float) +0:139 ldexp (global 2-component vector of float) +0:139 'inF0' (in 2-component vector of float) +0:139 'inF1' (in 2-component vector of float) +0:140 length (global float) +0:140 'inF0' (in 2-component vector of float) +0:141 log (global 2-component vector of float) +0:141 'inF0' (in 2-component vector of float) +0:142 vector-scale (temp 2-component vector of float) +0:142 log2 (temp 2-component vector of float) +0:142 'inF0' (in 2-component vector of float) +0:142 Constant: +0:142 0.301030 +0:143 log2 (global 2-component vector of float) +0:143 'inF0' (in 2-component vector of float) +0:144 max (global 2-component vector of float) +0:144 'inF0' (in 2-component vector of float) +0:144 'inF1' (in 2-component vector of float) +0:145 min (global 2-component vector of float) +0:145 'inF0' (in 2-component vector of float) +0:145 'inF1' (in 2-component vector of float) +0:146 normalize (global 2-component vector of float) +0:146 'inF0' (in 2-component vector of float) +0:147 pow (global 2-component vector of float) +0:147 'inF0' (in 2-component vector of float) +0:147 'inF1' (in 2-component vector of float) +0:148 radians (global 2-component vector of float) +0:148 'inF0' (in 2-component vector of float) +0:149 divide (temp 2-component vector of float) +0:149 Constant: +0:149 1.000000 +0:149 'inF0' (in 2-component vector of float) +0:150 reflect (global 2-component vector of float) +0:150 'inF0' (in 2-component vector of float) +0:150 'inF1' (in 2-component vector of float) +0:151 refract (global 2-component vector of float) +0:151 'inF0' (in 2-component vector of float) +0:151 'inF1' (in 2-component vector of float) +0:151 Constant: +0:151 2.000000 +0:? bitFieldReverse (global 2-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:153 roundEven (global 2-component vector of float) +0:153 'inF0' (in 2-component vector of float) +0:154 inverse sqrt (global 2-component vector of float) +0:154 'inF0' (in 2-component vector of float) +0:155 clamp (temp 2-component vector of float) +0:155 'inF0' (in 2-component vector of float) +0:155 Constant: +0:155 0.000000 +0:155 Constant: +0:155 1.000000 +0:156 Sign (global 2-component vector of float) +0:156 'inF0' (in 2-component vector of float) +0:157 sine (global 2-component vector of float) +0:157 'inF0' (in 2-component vector of float) +0:158 Sequence +0:158 move second child to first child (temp 2-component vector of float) +0:158 'inF1' (in 2-component vector of float) +0:158 sine (temp 2-component vector of float) +0:158 'inF0' (in 2-component vector of float) +0:158 move second child to first child (temp 2-component vector of float) +0:158 'inF2' (in 2-component vector of float) +0:158 cosine (temp 2-component vector of float) +0:158 'inF0' (in 2-component vector of float) +0:159 hyp. sine (global 2-component vector of float) +0:159 'inF0' (in 2-component vector of float) +0:160 smoothstep (global 2-component vector of float) +0:160 'inF0' (in 2-component vector of float) +0:160 'inF1' (in 2-component vector of float) +0:160 'inF2' (in 2-component vector of float) +0:161 sqrt (global 2-component vector of float) +0:161 'inF0' (in 2-component vector of float) +0:162 step (global 2-component vector of float) +0:162 'inF0' (in 2-component vector of float) +0:162 'inF1' (in 2-component vector of float) +0:163 tangent (global 2-component vector of float) +0:163 'inF0' (in 2-component vector of float) +0:164 hyp. tangent (global 2-component vector of float) +0:164 'inF0' (in 2-component vector of float) +0:166 trunc (global 2-component vector of float) +0:166 'inF0' (in 2-component vector of float) +0:169 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:252 Function Definition: PixelShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float) +0:173 Function Parameters: +0:173 'inF0' (in 3-component vector of float) +0:173 'inF1' (in 3-component vector of float) +0:173 'inF2' (in 3-component vector of float) +0:173 'inU0' (in 3-component vector of uint) +0:173 'inU1' (in 3-component vector of uint) +0:? Sequence +0:176 all (global bool) +0:176 'inF0' (in 3-component vector of float) +0:177 Absolute value (global 3-component vector of float) +0:177 'inF0' (in 3-component vector of float) +0:178 arc cosine (global 3-component vector of float) +0:178 'inF0' (in 3-component vector of float) +0:179 any (global bool) +0:179 'inF0' (in 3-component vector of float) +0:180 arc sine (global 3-component vector of float) +0:180 'inF0' (in 3-component vector of float) +0:181 floatBitsToInt (global 3-component vector of int) +0:181 'inF0' (in 3-component vector of float) +0:182 floatBitsToUint (global 3-component vector of uint) +0:182 'inF0' (in 3-component vector of float) +0:183 intBitsToFloat (global 3-component vector of float) +0:183 'inU0' (in 3-component vector of uint) +0:185 arc tangent (global 3-component vector of float) +0:185 'inF0' (in 3-component vector of float) +0:186 arc tangent (global 3-component vector of float) +0:186 'inF0' (in 3-component vector of float) +0:186 'inF1' (in 3-component vector of float) +0:187 Ceiling (global 3-component vector of float) +0:187 'inF0' (in 3-component vector of float) +0:188 clamp (global 3-component vector of float) +0:188 'inF0' (in 3-component vector of float) +0:188 'inF1' (in 3-component vector of float) +0:188 'inF2' (in 3-component vector of float) +0:189 Test condition and select (temp void) +0:189 Condition +0:189 any (temp bool) +0:189 Compare Less Than (temp 3-component vector of bool) +0:189 'inF0' (in 3-component vector of float) +0:189 Constant: +0:189 0.000000 +0:189 0.000000 +0:189 0.000000 +0:189 true case +0:189 Branch: Kill +0:190 cosine (global 3-component vector of float) +0:190 'inF0' (in 3-component vector of float) +0:191 hyp. cosine (global 3-component vector of float) +0:191 'inF0' (in 3-component vector of float) +0:? bitCount (global 3-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:? 5 (const uint) +0:193 cross-product (global 3-component vector of float) +0:193 'inF0' (in 3-component vector of float) +0:193 'inF1' (in 3-component vector of float) +0:194 dPdx (global 3-component vector of float) +0:194 'inF0' (in 3-component vector of float) +0:195 dPdxCoarse (global 3-component vector of float) +0:195 'inF0' (in 3-component vector of float) +0:196 dPdxFine (global 3-component vector of float) +0:196 'inF0' (in 3-component vector of float) +0:197 dPdy (global 3-component vector of float) +0:197 'inF0' (in 3-component vector of float) +0:198 dPdyCoarse (global 3-component vector of float) +0:198 'inF0' (in 3-component vector of float) +0:199 dPdyFine (global 3-component vector of float) +0:199 'inF0' (in 3-component vector of float) +0:200 degrees (global 3-component vector of float) +0:200 'inF0' (in 3-component vector of float) +0:201 distance (global float) +0:201 'inF0' (in 3-component vector of float) +0:201 'inF1' (in 3-component vector of float) +0:202 dot-product (global float) +0:202 'inF0' (in 3-component vector of float) +0:202 'inF1' (in 3-component vector of float) +0:206 exp (global 3-component vector of float) +0:206 'inF0' (in 3-component vector of float) +0:207 exp2 (global 3-component vector of float) +0:207 'inF0' (in 3-component vector of float) +0:208 face-forward (global 3-component vector of float) +0:208 'inF0' (in 3-component vector of float) +0:208 'inF1' (in 3-component vector of float) +0:208 'inF2' (in 3-component vector of float) +0:209 findMSB (global int) +0:209 Constant: +0:209 7 (const int) +0:210 findLSB (global int) +0:210 Constant: +0:210 7 (const int) +0:211 Floor (global 3-component vector of float) +0:211 'inF0' (in 3-component vector of float) +0:213 mod (global 3-component vector of float) +0:213 'inF0' (in 3-component vector of float) +0:213 'inF1' (in 3-component vector of float) +0:214 Fraction (global 3-component vector of float) +0:214 'inF0' (in 3-component vector of float) +0:215 frexp (global 3-component vector of float) +0:215 'inF0' (in 3-component vector of float) +0:215 'inF1' (in 3-component vector of float) +0:216 fwidth (global 3-component vector of float) +0:216 'inF0' (in 3-component vector of float) +0:217 isinf (global 3-component vector of bool) +0:217 'inF0' (in 3-component vector of float) +0:218 isnan (global 3-component vector of bool) +0:218 'inF0' (in 3-component vector of float) +0:219 ldexp (global 3-component vector of float) +0:219 'inF0' (in 3-component vector of float) +0:219 'inF1' (in 3-component vector of float) +0:220 length (global float) +0:220 'inF0' (in 3-component vector of float) +0:221 log (global 3-component vector of float) +0:221 'inF0' (in 3-component vector of float) +0:222 vector-scale (temp 3-component vector of float) +0:222 log2 (temp 3-component vector of float) +0:222 'inF0' (in 3-component vector of float) +0:222 Constant: +0:222 0.301030 +0:223 log2 (global 3-component vector of float) +0:223 'inF0' (in 3-component vector of float) +0:224 max (global 3-component vector of float) +0:224 'inF0' (in 3-component vector of float) +0:224 'inF1' (in 3-component vector of float) +0:225 min (global 3-component vector of float) +0:225 'inF0' (in 3-component vector of float) +0:225 'inF1' (in 3-component vector of float) +0:226 normalize (global 3-component vector of float) +0:226 'inF0' (in 3-component vector of float) +0:227 pow (global 3-component vector of float) +0:227 'inF0' (in 3-component vector of float) +0:227 'inF1' (in 3-component vector of float) +0:228 radians (global 3-component vector of float) +0:228 'inF0' (in 3-component vector of float) +0:229 divide (temp 3-component vector of float) +0:229 Constant: +0:229 1.000000 +0:229 'inF0' (in 3-component vector of float) +0:230 reflect (global 3-component vector of float) +0:230 'inF0' (in 3-component vector of float) +0:230 'inF1' (in 3-component vector of float) +0:231 refract (global 3-component vector of float) +0:231 'inF0' (in 3-component vector of float) +0:231 'inF1' (in 3-component vector of float) +0:231 Constant: +0:231 2.000000 +0:? bitFieldReverse (global 3-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:233 roundEven (global 3-component vector of float) +0:233 'inF0' (in 3-component vector of float) +0:234 inverse sqrt (global 3-component vector of float) +0:234 'inF0' (in 3-component vector of float) +0:235 clamp (temp 3-component vector of float) +0:235 'inF0' (in 3-component vector of float) +0:235 Constant: +0:235 0.000000 +0:235 Constant: +0:235 1.000000 +0:236 Sign (global 3-component vector of float) +0:236 'inF0' (in 3-component vector of float) +0:237 sine (global 3-component vector of float) +0:237 'inF0' (in 3-component vector of float) +0:238 Sequence +0:238 move second child to first child (temp 3-component vector of float) +0:238 'inF1' (in 3-component vector of float) +0:238 sine (temp 3-component vector of float) +0:238 'inF0' (in 3-component vector of float) +0:238 move second child to first child (temp 3-component vector of float) +0:238 'inF2' (in 3-component vector of float) +0:238 cosine (temp 3-component vector of float) +0:238 'inF0' (in 3-component vector of float) +0:239 hyp. sine (global 3-component vector of float) +0:239 'inF0' (in 3-component vector of float) +0:240 smoothstep (global 3-component vector of float) +0:240 'inF0' (in 3-component vector of float) +0:240 'inF1' (in 3-component vector of float) +0:240 'inF2' (in 3-component vector of float) +0:241 sqrt (global 3-component vector of float) +0:241 'inF0' (in 3-component vector of float) +0:242 step (global 3-component vector of float) +0:242 'inF0' (in 3-component vector of float) +0:242 'inF1' (in 3-component vector of float) +0:243 tangent (global 3-component vector of float) +0:243 'inF0' (in 3-component vector of float) +0:244 hyp. tangent (global 3-component vector of float) +0:244 'inF0' (in 3-component vector of float) +0:246 trunc (global 3-component vector of float) +0:246 'inF0' (in 3-component vector of float) +0:249 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:393 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float) +0:253 Function Parameters: +0:253 'inF0' (in 4-component vector of float) +0:253 'inF1' (in 4-component vector of float) +0:253 'inF2' (in 4-component vector of float) +0:253 'inU0' (in 4-component vector of uint) +0:253 'inU1' (in 4-component vector of uint) +0:? Sequence +0:256 all (global bool) +0:256 'inF0' (in 4-component vector of float) +0:257 Absolute value (global 4-component vector of float) +0:257 'inF0' (in 4-component vector of float) +0:258 arc cosine (global 4-component vector of float) +0:258 'inF0' (in 4-component vector of float) +0:259 any (global bool) +0:259 'inF0' (in 4-component vector of float) +0:260 arc sine (global 4-component vector of float) +0:260 'inF0' (in 4-component vector of float) +0:261 floatBitsToInt (global 4-component vector of int) +0:261 'inF0' (in 4-component vector of float) +0:262 floatBitsToUint (global 4-component vector of uint) +0:262 'inF0' (in 4-component vector of float) +0:263 intBitsToFloat (global 4-component vector of float) +0:263 'inU0' (in 4-component vector of uint) +0:265 arc tangent (global 4-component vector of float) +0:265 'inF0' (in 4-component vector of float) +0:266 arc tangent (global 4-component vector of float) +0:266 'inF0' (in 4-component vector of float) +0:266 'inF1' (in 4-component vector of float) +0:267 Ceiling (global 4-component vector of float) +0:267 'inF0' (in 4-component vector of float) +0:268 clamp (global 4-component vector of float) +0:268 'inF0' (in 4-component vector of float) +0:268 'inF1' (in 4-component vector of float) +0:268 'inF2' (in 4-component vector of float) +0:269 Test condition and select (temp void) +0:269 Condition +0:269 any (temp bool) +0:269 Compare Less Than (temp 4-component vector of bool) +0:269 'inF0' (in 4-component vector of float) +0:269 Constant: +0:269 0.000000 +0:269 0.000000 +0:269 0.000000 +0:269 0.000000 +0:269 true case +0:269 Branch: Kill +0:270 cosine (global 4-component vector of float) +0:270 'inF0' (in 4-component vector of float) +0:271 hyp. cosine (global 4-component vector of float) +0:271 'inF0' (in 4-component vector of float) +0:? bitCount (global 4-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:? 5 (const uint) +0:? 2 (const uint) +0:273 dPdx (global 4-component vector of float) +0:273 'inF0' (in 4-component vector of float) +0:274 dPdxCoarse (global 4-component vector of float) +0:274 'inF0' (in 4-component vector of float) +0:275 dPdxFine (global 4-component vector of float) +0:275 'inF0' (in 4-component vector of float) +0:276 dPdy (global 4-component vector of float) +0:276 'inF0' (in 4-component vector of float) +0:277 dPdyCoarse (global 4-component vector of float) +0:277 'inF0' (in 4-component vector of float) +0:278 dPdyFine (global 4-component vector of float) +0:278 'inF0' (in 4-component vector of float) +0:279 degrees (global 4-component vector of float) +0:279 'inF0' (in 4-component vector of float) +0:280 distance (global float) +0:280 'inF0' (in 4-component vector of float) +0:280 'inF1' (in 4-component vector of float) +0:281 dot-product (global float) +0:281 'inF0' (in 4-component vector of float) +0:281 'inF1' (in 4-component vector of float) +0:282 Construct vec4 (temp 4-component vector of float) +0:282 Constant: +0:282 1.000000 +0:282 component-wise multiply (temp float) +0:282 direct index (temp float) +0:282 'inF0' (in 4-component vector of float) +0:282 Constant: +0:282 1 (const int) +0:282 direct index (temp float) +0:282 'inF1' (in 4-component vector of float) +0:282 Constant: +0:282 1 (const int) +0:282 direct index (temp float) +0:282 'inF0' (in 4-component vector of float) +0:282 Constant: +0:282 2 (const int) +0:282 direct index (temp float) +0:282 'inF1' (in 4-component vector of float) +0:282 Constant: +0:282 3 (const int) +0:286 exp (global 4-component vector of float) +0:286 'inF0' (in 4-component vector of float) +0:287 exp2 (global 4-component vector of float) +0:287 'inF0' (in 4-component vector of float) +0:288 face-forward (global 4-component vector of float) +0:288 'inF0' (in 4-component vector of float) +0:288 'inF1' (in 4-component vector of float) +0:288 'inF2' (in 4-component vector of float) +0:289 findMSB (global int) +0:289 Constant: +0:289 7 (const int) +0:290 findLSB (global int) +0:290 Constant: +0:290 7 (const int) +0:291 Floor (global 4-component vector of float) +0:291 'inF0' (in 4-component vector of float) +0:293 mod (global 4-component vector of float) +0:293 'inF0' (in 4-component vector of float) +0:293 'inF1' (in 4-component vector of float) +0:294 Fraction (global 4-component vector of float) +0:294 'inF0' (in 4-component vector of float) +0:295 frexp (global 4-component vector of float) +0:295 'inF0' (in 4-component vector of float) +0:295 'inF1' (in 4-component vector of float) +0:296 fwidth (global 4-component vector of float) +0:296 'inF0' (in 4-component vector of float) +0:297 isinf (global 4-component vector of bool) +0:297 'inF0' (in 4-component vector of float) +0:298 isnan (global 4-component vector of bool) +0:298 'inF0' (in 4-component vector of float) +0:299 ldexp (global 4-component vector of float) +0:299 'inF0' (in 4-component vector of float) +0:299 'inF1' (in 4-component vector of float) +0:300 length (global float) +0:300 'inF0' (in 4-component vector of float) +0:301 log (global 4-component vector of float) +0:301 'inF0' (in 4-component vector of float) +0:302 vector-scale (temp 4-component vector of float) +0:302 log2 (temp 4-component vector of float) +0:302 'inF0' (in 4-component vector of float) +0:302 Constant: +0:302 0.301030 +0:303 log2 (global 4-component vector of float) +0:303 'inF0' (in 4-component vector of float) +0:304 max (global 4-component vector of float) +0:304 'inF0' (in 4-component vector of float) +0:304 'inF1' (in 4-component vector of float) +0:305 min (global 4-component vector of float) +0:305 'inF0' (in 4-component vector of float) +0:305 'inF1' (in 4-component vector of float) +0:306 normalize (global 4-component vector of float) +0:306 'inF0' (in 4-component vector of float) +0:307 pow (global 4-component vector of float) +0:307 'inF0' (in 4-component vector of float) +0:307 'inF1' (in 4-component vector of float) +0:308 radians (global 4-component vector of float) +0:308 'inF0' (in 4-component vector of float) +0:309 divide (temp 4-component vector of float) +0:309 Constant: +0:309 1.000000 +0:309 'inF0' (in 4-component vector of float) +0:310 reflect (global 4-component vector of float) +0:310 'inF0' (in 4-component vector of float) +0:310 'inF1' (in 4-component vector of float) +0:311 refract (global 4-component vector of float) +0:311 'inF0' (in 4-component vector of float) +0:311 'inF1' (in 4-component vector of float) +0:311 Constant: +0:311 2.000000 +0:? bitFieldReverse (global 4-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:313 roundEven (global 4-component vector of float) +0:313 'inF0' (in 4-component vector of float) +0:314 inverse sqrt (global 4-component vector of float) +0:314 'inF0' (in 4-component vector of float) +0:315 clamp (temp 4-component vector of float) +0:315 'inF0' (in 4-component vector of float) +0:315 Constant: +0:315 0.000000 +0:315 Constant: +0:315 1.000000 +0:316 Sign (global 4-component vector of float) +0:316 'inF0' (in 4-component vector of float) +0:317 sine (global 4-component vector of float) +0:317 'inF0' (in 4-component vector of float) +0:318 Sequence +0:318 move second child to first child (temp 4-component vector of float) +0:318 'inF1' (in 4-component vector of float) +0:318 sine (temp 4-component vector of float) +0:318 'inF0' (in 4-component vector of float) +0:318 move second child to first child (temp 4-component vector of float) +0:318 'inF2' (in 4-component vector of float) +0:318 cosine (temp 4-component vector of float) +0:318 'inF0' (in 4-component vector of float) +0:319 hyp. sine (global 4-component vector of float) +0:319 'inF0' (in 4-component vector of float) +0:320 smoothstep (global 4-component vector of float) +0:320 'inF0' (in 4-component vector of float) +0:320 'inF1' (in 4-component vector of float) +0:320 'inF2' (in 4-component vector of float) +0:321 sqrt (global 4-component vector of float) +0:321 'inF0' (in 4-component vector of float) +0:322 step (global 4-component vector of float) +0:322 'inF0' (in 4-component vector of float) +0:322 'inF1' (in 4-component vector of float) +0:323 tangent (global 4-component vector of float) +0:323 'inF0' (in 4-component vector of float) +0:324 hyp. tangent (global 4-component vector of float) +0:324 'inF0' (in 4-component vector of float) +0:326 trunc (global 4-component vector of float) +0:326 'inF0' (in 4-component vector of float) +0:329 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:402 Function Definition: PixelShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float) +0:394 Function Parameters: +0:394 'inF0' (in 2X2 matrix of float) +0:394 'inF1' (in 2X2 matrix of float) +0:394 'inF2' (in 2X2 matrix of float) +0:? Sequence +0:396 all (global bool) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Absolute value (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 arc cosine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 any (global bool) +0:396 'inF0' (in 2X2 matrix of float) +0:396 arc sine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 arc tangent (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 arc tangent (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 Ceiling (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Test condition and select (temp void) +0:396 Condition +0:396 any (temp bool) +0:396 Compare Less Than (temp 2X2 matrix of bool) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Constant: +0:396 0.000000 +0:396 0.000000 +0:396 0.000000 +0:396 0.000000 +0:396 true case +0:396 Branch: Kill +0:396 clamp (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 'inF2' (in 2X2 matrix of float) +0:396 cosine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 hyp. cosine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdx (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdxCoarse (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdxFine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdy (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdyCoarse (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdyFine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 degrees (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 determinant (global float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 exp (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 exp2 (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 findMSB (global int) +0:396 Constant: +0:396 7 (const int) +0:396 findLSB (global int) +0:396 Constant: +0:396 7 (const int) +0:396 Floor (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 mod (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 Fraction (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 frexp (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 fwidth (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 ldexp (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 log (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 matrix-scale (temp 2X2 matrix of float) +0:396 log2 (temp 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Constant: +0:396 0.301030 +0:396 log2 (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 max (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 min (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 pow (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 radians (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 roundEven (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 inverse sqrt (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 clamp (temp 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Constant: +0:396 0.000000 +0:396 Constant: +0:396 1.000000 +0:396 Sign (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 sine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Sequence +0:396 move second child to first child (temp 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 sine (temp 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 move second child to first child (temp 2X2 matrix of float) +0:396 'inF2' (in 2X2 matrix of float) +0:396 cosine (temp 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 hyp. sine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 smoothstep (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 'inF2' (in 2X2 matrix of float) +0:396 sqrt (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 step (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 tangent (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 hyp. tangent (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 transpose (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 trunc (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:399 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:411 Function Definition: PixelShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float) +0:403 Function Parameters: +0:403 'inF0' (in 3X3 matrix of float) +0:403 'inF1' (in 3X3 matrix of float) +0:403 'inF2' (in 3X3 matrix of float) +0:? Sequence +0:405 all (global bool) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Absolute value (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 arc cosine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 any (global bool) +0:405 'inF0' (in 3X3 matrix of float) +0:405 arc sine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 arc tangent (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 arc tangent (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 Ceiling (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Test condition and select (temp void) +0:405 Condition +0:405 any (temp bool) +0:405 Compare Less Than (temp 3X3 matrix of bool) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Constant: +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 true case +0:405 Branch: Kill +0:405 clamp (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 'inF2' (in 3X3 matrix of float) +0:405 cosine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 hyp. cosine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdx (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdxCoarse (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdxFine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdy (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdyCoarse (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdyFine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 degrees (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 determinant (global float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 exp (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 exp2 (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 findMSB (global int) +0:405 Constant: +0:405 7 (const int) +0:405 findLSB (global int) +0:405 Constant: +0:405 7 (const int) +0:405 Floor (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 mod (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 Fraction (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 frexp (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 fwidth (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 ldexp (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 log (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 matrix-scale (temp 3X3 matrix of float) +0:405 log2 (temp 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Constant: +0:405 0.301030 +0:405 log2 (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 max (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 min (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 pow (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 radians (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 roundEven (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 inverse sqrt (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 clamp (temp 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Constant: +0:405 0.000000 +0:405 Constant: +0:405 1.000000 +0:405 Sign (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 sine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Sequence +0:405 move second child to first child (temp 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 sine (temp 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 move second child to first child (temp 3X3 matrix of float) +0:405 'inF2' (in 3X3 matrix of float) +0:405 cosine (temp 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 hyp. sine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 smoothstep (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 'inF2' (in 3X3 matrix of float) +0:405 sqrt (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 step (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 tangent (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 hyp. tangent (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 transpose (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 trunc (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:408 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:432 Function Definition: PixelShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float) +0:412 Function Parameters: +0:412 'inF0' (in 4X4 matrix of float) +0:412 'inF1' (in 4X4 matrix of float) +0:412 'inF2' (in 4X4 matrix of float) +0:? Sequence +0:414 all (global bool) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Absolute value (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 arc cosine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 any (global bool) +0:414 'inF0' (in 4X4 matrix of float) +0:414 arc sine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 arc tangent (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 arc tangent (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 Ceiling (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Test condition and select (temp void) +0:414 Condition +0:414 any (temp bool) +0:414 Compare Less Than (temp 4X4 matrix of bool) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Constant: +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 true case +0:414 Branch: Kill +0:414 clamp (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 'inF2' (in 4X4 matrix of float) +0:414 cosine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 hyp. cosine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdx (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdxCoarse (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdxFine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdy (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdyCoarse (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdyFine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 degrees (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 determinant (global float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 exp (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 exp2 (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 findMSB (global int) +0:414 Constant: +0:414 7 (const int) +0:414 findLSB (global int) +0:414 Constant: +0:414 7 (const int) +0:414 Floor (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 mod (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 Fraction (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 frexp (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 fwidth (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 ldexp (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 log (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 matrix-scale (temp 4X4 matrix of float) +0:414 log2 (temp 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Constant: +0:414 0.301030 +0:414 log2 (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 max (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 min (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 pow (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 radians (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 roundEven (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 inverse sqrt (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 clamp (temp 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Constant: +0:414 0.000000 +0:414 Constant: +0:414 1.000000 +0:414 Sign (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 sine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Sequence +0:414 move second child to first child (temp 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 sine (temp 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 move second child to first child (temp 4X4 matrix of float) +0:414 'inF2' (in 4X4 matrix of float) +0:414 cosine (temp 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 hyp. sine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 smoothstep (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 'inF2' (in 4X4 matrix of float) +0:414 sqrt (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 step (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 tangent (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 hyp. tangent (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 transpose (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 trunc (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:417 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:439 Function Definition: TestGenMul(f1;f1;vf2;vf2;mf22;mf22; (temp void) +0:435 Function Parameters: +0:435 'inF0' (in float) +0:435 'inF1' (in float) +0:435 'inFV0' (in 2-component vector of float) +0:435 'inFV1' (in 2-component vector of float) +0:435 'inFM0' (in 2X2 matrix of float) +0:435 'inFM1' (in 2X2 matrix of float) +0:? Sequence +0:436 move second child to first child (temp float) +0:436 'r0' (temp float) +0:436 component-wise multiply (temp float) +0:436 'inF0' (in float) +0:436 'inF1' (in float) +0:436 move second child to first child (temp 2-component vector of float) +0:436 'r1' (temp 2-component vector of float) +0:436 vector-scale (temp 2-component vector of float) +0:436 'inFV0' (in 2-component vector of float) +0:436 'inF0' (in float) +0:436 move second child to first child (temp 2-component vector of float) +0:436 'r2' (temp 2-component vector of float) +0:436 vector-scale (temp 2-component vector of float) +0:436 'inF0' (in float) +0:436 'inFV0' (in 2-component vector of float) +0:436 move second child to first child (temp float) +0:436 'r3' (temp float) +0:436 dot-product (global float) +0:436 'inFV0' (in 2-component vector of float) +0:436 'inFV1' (in 2-component vector of float) +0:436 move second child to first child (temp 2-component vector of float) +0:436 'r4' (temp 2-component vector of float) +0:436 matrix-times-vector (temp 2-component vector of float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 'inFV0' (in 2-component vector of float) +0:436 move second child to first child (temp 2-component vector of float) +0:436 'r5' (temp 2-component vector of float) +0:436 vector-times-matrix (temp 2-component vector of float) +0:436 'inFV0' (in 2-component vector of float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 move second child to first child (temp 2X2 matrix of float) +0:436 'r6' (temp 2X2 matrix of float) +0:436 matrix-scale (temp 2X2 matrix of float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 'inF0' (in float) +0:436 move second child to first child (temp 2X2 matrix of float) +0:436 'r7' (temp 2X2 matrix of float) +0:436 matrix-scale (temp 2X2 matrix of float) +0:436 'inF0' (in float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 move second child to first child (temp 2X2 matrix of float) +0:436 'r8' (temp 2X2 matrix of float) +0:436 matrix-multiply (temp 2X2 matrix of float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 'inFM1' (in 2X2 matrix of float) +0:446 Function Definition: TestGenMul(f1;f1;vf3;vf3;mf33;mf33; (temp void) +0:442 Function Parameters: +0:442 'inF0' (in float) +0:442 'inF1' (in float) +0:442 'inFV0' (in 3-component vector of float) +0:442 'inFV1' (in 3-component vector of float) +0:442 'inFM0' (in 3X3 matrix of float) +0:442 'inFM1' (in 3X3 matrix of float) +0:? Sequence +0:443 move second child to first child (temp float) +0:443 'r0' (temp float) +0:443 component-wise multiply (temp float) +0:443 'inF0' (in float) +0:443 'inF1' (in float) +0:443 move second child to first child (temp 3-component vector of float) +0:443 'r1' (temp 3-component vector of float) +0:443 vector-scale (temp 3-component vector of float) +0:443 'inFV0' (in 3-component vector of float) +0:443 'inF0' (in float) +0:443 move second child to first child (temp 3-component vector of float) +0:443 'r2' (temp 3-component vector of float) +0:443 vector-scale (temp 3-component vector of float) +0:443 'inF0' (in float) +0:443 'inFV0' (in 3-component vector of float) +0:443 move second child to first child (temp float) +0:443 'r3' (temp float) +0:443 dot-product (global float) +0:443 'inFV0' (in 3-component vector of float) +0:443 'inFV1' (in 3-component vector of float) +0:443 move second child to first child (temp 3-component vector of float) +0:443 'r4' (temp 3-component vector of float) +0:443 matrix-times-vector (temp 3-component vector of float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 'inFV0' (in 3-component vector of float) +0:443 move second child to first child (temp 3-component vector of float) +0:443 'r5' (temp 3-component vector of float) +0:443 vector-times-matrix (temp 3-component vector of float) +0:443 'inFV0' (in 3-component vector of float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 move second child to first child (temp 3X3 matrix of float) +0:443 'r6' (temp 3X3 matrix of float) +0:443 matrix-scale (temp 3X3 matrix of float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 'inF0' (in float) +0:443 move second child to first child (temp 3X3 matrix of float) +0:443 'r7' (temp 3X3 matrix of float) +0:443 matrix-scale (temp 3X3 matrix of float) +0:443 'inF0' (in float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 move second child to first child (temp 3X3 matrix of float) +0:443 'r8' (temp 3X3 matrix of float) +0:443 matrix-multiply (temp 3X3 matrix of float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 'inFM1' (in 3X3 matrix of float) +0:452 Function Definition: TestGenMul(f1;f1;vf4;vf4;mf44;mf44; (temp void) +0:449 Function Parameters: +0:449 'inF0' (in float) +0:449 'inF1' (in float) +0:449 'inFV0' (in 4-component vector of float) +0:449 'inFV1' (in 4-component vector of float) +0:449 'inFM0' (in 4X4 matrix of float) +0:449 'inFM1' (in 4X4 matrix of float) +0:? Sequence +0:450 move second child to first child (temp float) +0:450 'r0' (temp float) +0:450 component-wise multiply (temp float) +0:450 'inF0' (in float) +0:450 'inF1' (in float) +0:450 move second child to first child (temp 4-component vector of float) +0:450 'r1' (temp 4-component vector of float) +0:450 vector-scale (temp 4-component vector of float) +0:450 'inFV0' (in 4-component vector of float) +0:450 'inF0' (in float) +0:450 move second child to first child (temp 4-component vector of float) +0:450 'r2' (temp 4-component vector of float) +0:450 vector-scale (temp 4-component vector of float) +0:450 'inF0' (in float) +0:450 'inFV0' (in 4-component vector of float) +0:450 move second child to first child (temp float) +0:450 'r3' (temp float) +0:450 dot-product (global float) +0:450 'inFV0' (in 4-component vector of float) +0:450 'inFV1' (in 4-component vector of float) +0:450 move second child to first child (temp 4-component vector of float) +0:450 'r4' (temp 4-component vector of float) +0:450 matrix-times-vector (temp 4-component vector of float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 'inFV0' (in 4-component vector of float) +0:450 move second child to first child (temp 4-component vector of float) +0:450 'r5' (temp 4-component vector of float) +0:450 vector-times-matrix (temp 4-component vector of float) +0:450 'inFV0' (in 4-component vector of float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 move second child to first child (temp 4X4 matrix of float) +0:450 'r6' (temp 4X4 matrix of float) +0:450 matrix-scale (temp 4X4 matrix of float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 'inF0' (in float) +0:450 move second child to first child (temp 4X4 matrix of float) +0:450 'r7' (temp 4X4 matrix of float) +0:450 matrix-scale (temp 4X4 matrix of float) +0:450 'inF0' (in float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 move second child to first child (temp 4X4 matrix of float) +0:450 'r8' (temp 4X4 matrix of float) +0:450 matrix-multiply (temp 4X4 matrix of float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 'inFM1' (in 4X4 matrix of float) +0:? Linker Objects +0:? 'gs_ua' (temp uint) +0:? 'gs_ub' (temp uint) +0:? 'gs_uc' (temp uint) +0:? 'gs_ua2' (temp 2-component vector of uint) +0:? 'gs_ub2' (temp 2-component vector of uint) +0:? 'gs_uc2' (temp 2-component vector of uint) +0:? 'gs_ua3' (temp 3-component vector of uint) +0:? 'gs_ub3' (temp 3-component vector of uint) +0:? 'gs_uc3' (temp 3-component vector of uint) +0:? 'gs_ua4' (temp 4-component vector of uint) +0:? 'gs_ub4' (temp 4-component vector of uint) +0:? 'gs_uc4' (temp 4-component vector of uint) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:87 Function Definition: PixelShaderFunction(f1;f1;f1;u1;u1; (temp float) +0:17 Function Parameters: +0:17 'inF0' (in float) +0:17 'inF1' (in float) +0:17 'inF2' (in float) +0:17 'inU0' (in uint) +0:17 'inU1' (in uint) +0:? Sequence +0:20 all (global bool) +0:20 'inF0' (in float) +0:21 Absolute value (global float) +0:21 'inF0' (in float) +0:22 arc cosine (global float) +0:22 'inF0' (in float) +0:23 any (global bool) +0:23 'inF0' (in float) +0:24 arc sine (global float) +0:24 'inF0' (in float) +0:25 floatBitsToInt (global int) +0:25 'inF0' (in float) +0:26 floatBitsToUint (global uint) +0:26 'inF0' (in float) +0:27 intBitsToFloat (global float) +0:27 'inU0' (in uint) +0:29 arc tangent (global float) +0:29 'inF0' (in float) +0:30 arc tangent (global float) +0:30 'inF0' (in float) +0:30 'inF1' (in float) +0:31 Ceiling (global float) +0:31 'inF0' (in float) +0:32 clamp (global float) +0:32 'inF0' (in float) +0:32 'inF1' (in float) +0:32 'inF2' (in float) +0:33 Test condition and select (temp void) +0:33 Condition +0:33 Compare Less Than (temp bool) +0:33 'inF0' (in float) +0:33 Constant: +0:33 0.000000 +0:33 true case +0:33 Branch: Kill +0:34 cosine (global float) +0:34 'inF0' (in float) +0:35 hyp. cosine (global float) +0:35 'inF0' (in float) +0:36 bitCount (global uint) +0:36 Constant: +0:36 7 (const uint) +0:37 dPdx (global float) +0:37 'inF0' (in float) +0:38 dPdxCoarse (global float) +0:38 'inF0' (in float) +0:39 dPdxFine (global float) +0:39 'inF0' (in float) +0:40 dPdy (global float) +0:40 'inF0' (in float) +0:41 dPdyCoarse (global float) +0:41 'inF0' (in float) +0:42 dPdyFine (global float) +0:42 'inF0' (in float) +0:43 degrees (global float) +0:43 'inF0' (in float) +0:47 exp (global float) +0:47 'inF0' (in float) +0:48 exp2 (global float) +0:48 'inF0' (in float) +0:49 findMSB (global int) +0:49 Constant: +0:49 7 (const int) +0:50 findLSB (global int) +0:50 Constant: +0:50 7 (const int) +0:51 Floor (global float) +0:51 'inF0' (in float) +0:53 mod (global float) +0:53 'inF0' (in float) +0:53 'inF1' (in float) +0:54 Fraction (global float) +0:54 'inF0' (in float) +0:55 frexp (global float) +0:55 'inF0' (in float) +0:55 'inF1' (in float) +0:56 fwidth (global float) +0:56 'inF0' (in float) +0:57 isinf (global bool) +0:57 'inF0' (in float) +0:58 isnan (global bool) +0:58 'inF0' (in float) +0:59 ldexp (global float) +0:59 'inF0' (in float) +0:59 'inF1' (in float) +0:60 log (global float) +0:60 'inF0' (in float) +0:61 component-wise multiply (temp float) +0:61 log2 (temp float) +0:61 'inF0' (in float) +0:61 Constant: +0:61 0.301030 +0:62 log2 (global float) +0:62 'inF0' (in float) +0:63 max (global float) +0:63 'inF0' (in float) +0:63 'inF1' (in float) +0:64 min (global float) +0:64 'inF0' (in float) +0:64 'inF1' (in float) +0:65 pow (global float) +0:65 'inF0' (in float) +0:65 'inF1' (in float) +0:66 radians (global float) +0:66 'inF0' (in float) +0:67 divide (temp float) +0:67 Constant: +0:67 1.000000 +0:67 'inF0' (in float) +0:68 bitFieldReverse (global uint) +0:68 Constant: +0:68 2 (const uint) +0:69 roundEven (global float) +0:69 'inF0' (in float) +0:70 inverse sqrt (global float) +0:70 'inF0' (in float) +0:71 clamp (temp float) +0:71 'inF0' (in float) +0:71 Constant: +0:71 0.000000 +0:71 Constant: +0:71 1.000000 +0:72 Sign (global float) +0:72 'inF0' (in float) +0:73 sine (global float) +0:73 'inF0' (in float) +0:74 Sequence +0:74 move second child to first child (temp float) +0:74 'inF1' (in float) +0:74 sine (temp float) +0:74 'inF0' (in float) +0:74 move second child to first child (temp float) +0:74 'inF2' (in float) +0:74 cosine (temp float) +0:74 'inF0' (in float) +0:75 hyp. sine (global float) +0:75 'inF0' (in float) +0:76 smoothstep (global float) +0:76 'inF0' (in float) +0:76 'inF1' (in float) +0:76 'inF2' (in float) +0:77 sqrt (global float) +0:77 'inF0' (in float) +0:78 step (global float) +0:78 'inF0' (in float) +0:78 'inF1' (in float) +0:79 tangent (global float) +0:79 'inF0' (in float) +0:80 hyp. tangent (global float) +0:80 'inF0' (in float) +0:82 trunc (global float) +0:82 'inF0' (in float) +0:84 Branch: Return with expression +0:84 Constant: +0:84 0.000000 +0:93 Function Definition: PixelShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float) +0:88 Function Parameters: +0:88 'inF0' (in 1-component vector of float) +0:88 'inF1' (in 1-component vector of float) +0:88 'inF2' (in 1-component vector of float) +0:? Sequence +0:90 Branch: Return with expression +0:90 Constant: +0:90 0.000000 +0:172 Function Definition: PixelShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float) +0:94 Function Parameters: +0:94 'inF0' (in 2-component vector of float) +0:94 'inF1' (in 2-component vector of float) +0:94 'inF2' (in 2-component vector of float) +0:94 'inU0' (in 2-component vector of uint) +0:94 'inU1' (in 2-component vector of uint) +0:? Sequence +0:97 all (global bool) +0:97 'inF0' (in 2-component vector of float) +0:98 Absolute value (global 2-component vector of float) +0:98 'inF0' (in 2-component vector of float) +0:99 arc cosine (global 2-component vector of float) +0:99 'inF0' (in 2-component vector of float) +0:100 any (global bool) +0:100 'inF0' (in 2-component vector of float) +0:101 arc sine (global 2-component vector of float) +0:101 'inF0' (in 2-component vector of float) +0:102 floatBitsToInt (global 2-component vector of int) +0:102 'inF0' (in 2-component vector of float) +0:103 floatBitsToUint (global 2-component vector of uint) +0:103 'inF0' (in 2-component vector of float) +0:104 intBitsToFloat (global 2-component vector of float) +0:104 'inU0' (in 2-component vector of uint) +0:106 arc tangent (global 2-component vector of float) +0:106 'inF0' (in 2-component vector of float) +0:107 arc tangent (global 2-component vector of float) +0:107 'inF0' (in 2-component vector of float) +0:107 'inF1' (in 2-component vector of float) +0:108 Ceiling (global 2-component vector of float) +0:108 'inF0' (in 2-component vector of float) +0:109 clamp (global 2-component vector of float) +0:109 'inF0' (in 2-component vector of float) +0:109 'inF1' (in 2-component vector of float) +0:109 'inF2' (in 2-component vector of float) +0:110 Test condition and select (temp void) +0:110 Condition +0:110 any (temp bool) +0:110 Compare Less Than (temp 2-component vector of bool) +0:110 'inF0' (in 2-component vector of float) +0:110 Constant: +0:110 0.000000 +0:110 0.000000 +0:110 true case +0:110 Branch: Kill +0:111 cosine (global 2-component vector of float) +0:111 'inF0' (in 2-component vector of float) +0:112 hyp. cosine (global 2-component vector of float) +0:112 'inF0' (in 2-component vector of float) +0:? bitCount (global 2-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:114 dPdx (global 2-component vector of float) +0:114 'inF0' (in 2-component vector of float) +0:115 dPdxCoarse (global 2-component vector of float) +0:115 'inF0' (in 2-component vector of float) +0:116 dPdxFine (global 2-component vector of float) +0:116 'inF0' (in 2-component vector of float) +0:117 dPdy (global 2-component vector of float) +0:117 'inF0' (in 2-component vector of float) +0:118 dPdyCoarse (global 2-component vector of float) +0:118 'inF0' (in 2-component vector of float) +0:119 dPdyFine (global 2-component vector of float) +0:119 'inF0' (in 2-component vector of float) +0:120 degrees (global 2-component vector of float) +0:120 'inF0' (in 2-component vector of float) +0:121 distance (global float) +0:121 'inF0' (in 2-component vector of float) +0:121 'inF1' (in 2-component vector of float) +0:122 dot-product (global float) +0:122 'inF0' (in 2-component vector of float) +0:122 'inF1' (in 2-component vector of float) +0:126 exp (global 2-component vector of float) +0:126 'inF0' (in 2-component vector of float) +0:127 exp2 (global 2-component vector of float) +0:127 'inF0' (in 2-component vector of float) +0:128 face-forward (global 2-component vector of float) +0:128 'inF0' (in 2-component vector of float) +0:128 'inF1' (in 2-component vector of float) +0:128 'inF2' (in 2-component vector of float) +0:129 findMSB (global int) +0:129 Constant: +0:129 7 (const int) +0:130 findLSB (global int) +0:130 Constant: +0:130 7 (const int) +0:131 Floor (global 2-component vector of float) +0:131 'inF0' (in 2-component vector of float) +0:133 mod (global 2-component vector of float) +0:133 'inF0' (in 2-component vector of float) +0:133 'inF1' (in 2-component vector of float) +0:134 Fraction (global 2-component vector of float) +0:134 'inF0' (in 2-component vector of float) +0:135 frexp (global 2-component vector of float) +0:135 'inF0' (in 2-component vector of float) +0:135 'inF1' (in 2-component vector of float) +0:136 fwidth (global 2-component vector of float) +0:136 'inF0' (in 2-component vector of float) +0:137 isinf (global 2-component vector of bool) +0:137 'inF0' (in 2-component vector of float) +0:138 isnan (global 2-component vector of bool) +0:138 'inF0' (in 2-component vector of float) +0:139 ldexp (global 2-component vector of float) +0:139 'inF0' (in 2-component vector of float) +0:139 'inF1' (in 2-component vector of float) +0:140 length (global float) +0:140 'inF0' (in 2-component vector of float) +0:141 log (global 2-component vector of float) +0:141 'inF0' (in 2-component vector of float) +0:142 vector-scale (temp 2-component vector of float) +0:142 log2 (temp 2-component vector of float) +0:142 'inF0' (in 2-component vector of float) +0:142 Constant: +0:142 0.301030 +0:143 log2 (global 2-component vector of float) +0:143 'inF0' (in 2-component vector of float) +0:144 max (global 2-component vector of float) +0:144 'inF0' (in 2-component vector of float) +0:144 'inF1' (in 2-component vector of float) +0:145 min (global 2-component vector of float) +0:145 'inF0' (in 2-component vector of float) +0:145 'inF1' (in 2-component vector of float) +0:146 normalize (global 2-component vector of float) +0:146 'inF0' (in 2-component vector of float) +0:147 pow (global 2-component vector of float) +0:147 'inF0' (in 2-component vector of float) +0:147 'inF1' (in 2-component vector of float) +0:148 radians (global 2-component vector of float) +0:148 'inF0' (in 2-component vector of float) +0:149 divide (temp 2-component vector of float) +0:149 Constant: +0:149 1.000000 +0:149 'inF0' (in 2-component vector of float) +0:150 reflect (global 2-component vector of float) +0:150 'inF0' (in 2-component vector of float) +0:150 'inF1' (in 2-component vector of float) +0:151 refract (global 2-component vector of float) +0:151 'inF0' (in 2-component vector of float) +0:151 'inF1' (in 2-component vector of float) +0:151 Constant: +0:151 2.000000 +0:? bitFieldReverse (global 2-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:153 roundEven (global 2-component vector of float) +0:153 'inF0' (in 2-component vector of float) +0:154 inverse sqrt (global 2-component vector of float) +0:154 'inF0' (in 2-component vector of float) +0:155 clamp (temp 2-component vector of float) +0:155 'inF0' (in 2-component vector of float) +0:155 Constant: +0:155 0.000000 +0:155 Constant: +0:155 1.000000 +0:156 Sign (global 2-component vector of float) +0:156 'inF0' (in 2-component vector of float) +0:157 sine (global 2-component vector of float) +0:157 'inF0' (in 2-component vector of float) +0:158 Sequence +0:158 move second child to first child (temp 2-component vector of float) +0:158 'inF1' (in 2-component vector of float) +0:158 sine (temp 2-component vector of float) +0:158 'inF0' (in 2-component vector of float) +0:158 move second child to first child (temp 2-component vector of float) +0:158 'inF2' (in 2-component vector of float) +0:158 cosine (temp 2-component vector of float) +0:158 'inF0' (in 2-component vector of float) +0:159 hyp. sine (global 2-component vector of float) +0:159 'inF0' (in 2-component vector of float) +0:160 smoothstep (global 2-component vector of float) +0:160 'inF0' (in 2-component vector of float) +0:160 'inF1' (in 2-component vector of float) +0:160 'inF2' (in 2-component vector of float) +0:161 sqrt (global 2-component vector of float) +0:161 'inF0' (in 2-component vector of float) +0:162 step (global 2-component vector of float) +0:162 'inF0' (in 2-component vector of float) +0:162 'inF1' (in 2-component vector of float) +0:163 tangent (global 2-component vector of float) +0:163 'inF0' (in 2-component vector of float) +0:164 hyp. tangent (global 2-component vector of float) +0:164 'inF0' (in 2-component vector of float) +0:166 trunc (global 2-component vector of float) +0:166 'inF0' (in 2-component vector of float) +0:169 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:252 Function Definition: PixelShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float) +0:173 Function Parameters: +0:173 'inF0' (in 3-component vector of float) +0:173 'inF1' (in 3-component vector of float) +0:173 'inF2' (in 3-component vector of float) +0:173 'inU0' (in 3-component vector of uint) +0:173 'inU1' (in 3-component vector of uint) +0:? Sequence +0:176 all (global bool) +0:176 'inF0' (in 3-component vector of float) +0:177 Absolute value (global 3-component vector of float) +0:177 'inF0' (in 3-component vector of float) +0:178 arc cosine (global 3-component vector of float) +0:178 'inF0' (in 3-component vector of float) +0:179 any (global bool) +0:179 'inF0' (in 3-component vector of float) +0:180 arc sine (global 3-component vector of float) +0:180 'inF0' (in 3-component vector of float) +0:181 floatBitsToInt (global 3-component vector of int) +0:181 'inF0' (in 3-component vector of float) +0:182 floatBitsToUint (global 3-component vector of uint) +0:182 'inF0' (in 3-component vector of float) +0:183 intBitsToFloat (global 3-component vector of float) +0:183 'inU0' (in 3-component vector of uint) +0:185 arc tangent (global 3-component vector of float) +0:185 'inF0' (in 3-component vector of float) +0:186 arc tangent (global 3-component vector of float) +0:186 'inF0' (in 3-component vector of float) +0:186 'inF1' (in 3-component vector of float) +0:187 Ceiling (global 3-component vector of float) +0:187 'inF0' (in 3-component vector of float) +0:188 clamp (global 3-component vector of float) +0:188 'inF0' (in 3-component vector of float) +0:188 'inF1' (in 3-component vector of float) +0:188 'inF2' (in 3-component vector of float) +0:189 Test condition and select (temp void) +0:189 Condition +0:189 any (temp bool) +0:189 Compare Less Than (temp 3-component vector of bool) +0:189 'inF0' (in 3-component vector of float) +0:189 Constant: +0:189 0.000000 +0:189 0.000000 +0:189 0.000000 +0:189 true case +0:189 Branch: Kill +0:190 cosine (global 3-component vector of float) +0:190 'inF0' (in 3-component vector of float) +0:191 hyp. cosine (global 3-component vector of float) +0:191 'inF0' (in 3-component vector of float) +0:? bitCount (global 3-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:? 5 (const uint) +0:193 cross-product (global 3-component vector of float) +0:193 'inF0' (in 3-component vector of float) +0:193 'inF1' (in 3-component vector of float) +0:194 dPdx (global 3-component vector of float) +0:194 'inF0' (in 3-component vector of float) +0:195 dPdxCoarse (global 3-component vector of float) +0:195 'inF0' (in 3-component vector of float) +0:196 dPdxFine (global 3-component vector of float) +0:196 'inF0' (in 3-component vector of float) +0:197 dPdy (global 3-component vector of float) +0:197 'inF0' (in 3-component vector of float) +0:198 dPdyCoarse (global 3-component vector of float) +0:198 'inF0' (in 3-component vector of float) +0:199 dPdyFine (global 3-component vector of float) +0:199 'inF0' (in 3-component vector of float) +0:200 degrees (global 3-component vector of float) +0:200 'inF0' (in 3-component vector of float) +0:201 distance (global float) +0:201 'inF0' (in 3-component vector of float) +0:201 'inF1' (in 3-component vector of float) +0:202 dot-product (global float) +0:202 'inF0' (in 3-component vector of float) +0:202 'inF1' (in 3-component vector of float) +0:206 exp (global 3-component vector of float) +0:206 'inF0' (in 3-component vector of float) +0:207 exp2 (global 3-component vector of float) +0:207 'inF0' (in 3-component vector of float) +0:208 face-forward (global 3-component vector of float) +0:208 'inF0' (in 3-component vector of float) +0:208 'inF1' (in 3-component vector of float) +0:208 'inF2' (in 3-component vector of float) +0:209 findMSB (global int) +0:209 Constant: +0:209 7 (const int) +0:210 findLSB (global int) +0:210 Constant: +0:210 7 (const int) +0:211 Floor (global 3-component vector of float) +0:211 'inF0' (in 3-component vector of float) +0:213 mod (global 3-component vector of float) +0:213 'inF0' (in 3-component vector of float) +0:213 'inF1' (in 3-component vector of float) +0:214 Fraction (global 3-component vector of float) +0:214 'inF0' (in 3-component vector of float) +0:215 frexp (global 3-component vector of float) +0:215 'inF0' (in 3-component vector of float) +0:215 'inF1' (in 3-component vector of float) +0:216 fwidth (global 3-component vector of float) +0:216 'inF0' (in 3-component vector of float) +0:217 isinf (global 3-component vector of bool) +0:217 'inF0' (in 3-component vector of float) +0:218 isnan (global 3-component vector of bool) +0:218 'inF0' (in 3-component vector of float) +0:219 ldexp (global 3-component vector of float) +0:219 'inF0' (in 3-component vector of float) +0:219 'inF1' (in 3-component vector of float) +0:220 length (global float) +0:220 'inF0' (in 3-component vector of float) +0:221 log (global 3-component vector of float) +0:221 'inF0' (in 3-component vector of float) +0:222 vector-scale (temp 3-component vector of float) +0:222 log2 (temp 3-component vector of float) +0:222 'inF0' (in 3-component vector of float) +0:222 Constant: +0:222 0.301030 +0:223 log2 (global 3-component vector of float) +0:223 'inF0' (in 3-component vector of float) +0:224 max (global 3-component vector of float) +0:224 'inF0' (in 3-component vector of float) +0:224 'inF1' (in 3-component vector of float) +0:225 min (global 3-component vector of float) +0:225 'inF0' (in 3-component vector of float) +0:225 'inF1' (in 3-component vector of float) +0:226 normalize (global 3-component vector of float) +0:226 'inF0' (in 3-component vector of float) +0:227 pow (global 3-component vector of float) +0:227 'inF0' (in 3-component vector of float) +0:227 'inF1' (in 3-component vector of float) +0:228 radians (global 3-component vector of float) +0:228 'inF0' (in 3-component vector of float) +0:229 divide (temp 3-component vector of float) +0:229 Constant: +0:229 1.000000 +0:229 'inF0' (in 3-component vector of float) +0:230 reflect (global 3-component vector of float) +0:230 'inF0' (in 3-component vector of float) +0:230 'inF1' (in 3-component vector of float) +0:231 refract (global 3-component vector of float) +0:231 'inF0' (in 3-component vector of float) +0:231 'inF1' (in 3-component vector of float) +0:231 Constant: +0:231 2.000000 +0:? bitFieldReverse (global 3-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:233 roundEven (global 3-component vector of float) +0:233 'inF0' (in 3-component vector of float) +0:234 inverse sqrt (global 3-component vector of float) +0:234 'inF0' (in 3-component vector of float) +0:235 clamp (temp 3-component vector of float) +0:235 'inF0' (in 3-component vector of float) +0:235 Constant: +0:235 0.000000 +0:235 Constant: +0:235 1.000000 +0:236 Sign (global 3-component vector of float) +0:236 'inF0' (in 3-component vector of float) +0:237 sine (global 3-component vector of float) +0:237 'inF0' (in 3-component vector of float) +0:238 Sequence +0:238 move second child to first child (temp 3-component vector of float) +0:238 'inF1' (in 3-component vector of float) +0:238 sine (temp 3-component vector of float) +0:238 'inF0' (in 3-component vector of float) +0:238 move second child to first child (temp 3-component vector of float) +0:238 'inF2' (in 3-component vector of float) +0:238 cosine (temp 3-component vector of float) +0:238 'inF0' (in 3-component vector of float) +0:239 hyp. sine (global 3-component vector of float) +0:239 'inF0' (in 3-component vector of float) +0:240 smoothstep (global 3-component vector of float) +0:240 'inF0' (in 3-component vector of float) +0:240 'inF1' (in 3-component vector of float) +0:240 'inF2' (in 3-component vector of float) +0:241 sqrt (global 3-component vector of float) +0:241 'inF0' (in 3-component vector of float) +0:242 step (global 3-component vector of float) +0:242 'inF0' (in 3-component vector of float) +0:242 'inF1' (in 3-component vector of float) +0:243 tangent (global 3-component vector of float) +0:243 'inF0' (in 3-component vector of float) +0:244 hyp. tangent (global 3-component vector of float) +0:244 'inF0' (in 3-component vector of float) +0:246 trunc (global 3-component vector of float) +0:246 'inF0' (in 3-component vector of float) +0:249 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:393 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float) +0:253 Function Parameters: +0:253 'inF0' (in 4-component vector of float) +0:253 'inF1' (in 4-component vector of float) +0:253 'inF2' (in 4-component vector of float) +0:253 'inU0' (in 4-component vector of uint) +0:253 'inU1' (in 4-component vector of uint) +0:? Sequence +0:256 all (global bool) +0:256 'inF0' (in 4-component vector of float) +0:257 Absolute value (global 4-component vector of float) +0:257 'inF0' (in 4-component vector of float) +0:258 arc cosine (global 4-component vector of float) +0:258 'inF0' (in 4-component vector of float) +0:259 any (global bool) +0:259 'inF0' (in 4-component vector of float) +0:260 arc sine (global 4-component vector of float) +0:260 'inF0' (in 4-component vector of float) +0:261 floatBitsToInt (global 4-component vector of int) +0:261 'inF0' (in 4-component vector of float) +0:262 floatBitsToUint (global 4-component vector of uint) +0:262 'inF0' (in 4-component vector of float) +0:263 intBitsToFloat (global 4-component vector of float) +0:263 'inU0' (in 4-component vector of uint) +0:265 arc tangent (global 4-component vector of float) +0:265 'inF0' (in 4-component vector of float) +0:266 arc tangent (global 4-component vector of float) +0:266 'inF0' (in 4-component vector of float) +0:266 'inF1' (in 4-component vector of float) +0:267 Ceiling (global 4-component vector of float) +0:267 'inF0' (in 4-component vector of float) +0:268 clamp (global 4-component vector of float) +0:268 'inF0' (in 4-component vector of float) +0:268 'inF1' (in 4-component vector of float) +0:268 'inF2' (in 4-component vector of float) +0:269 Test condition and select (temp void) +0:269 Condition +0:269 any (temp bool) +0:269 Compare Less Than (temp 4-component vector of bool) +0:269 'inF0' (in 4-component vector of float) +0:269 Constant: +0:269 0.000000 +0:269 0.000000 +0:269 0.000000 +0:269 0.000000 +0:269 true case +0:269 Branch: Kill +0:270 cosine (global 4-component vector of float) +0:270 'inF0' (in 4-component vector of float) +0:271 hyp. cosine (global 4-component vector of float) +0:271 'inF0' (in 4-component vector of float) +0:? bitCount (global 4-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:? 5 (const uint) +0:? 2 (const uint) +0:273 dPdx (global 4-component vector of float) +0:273 'inF0' (in 4-component vector of float) +0:274 dPdxCoarse (global 4-component vector of float) +0:274 'inF0' (in 4-component vector of float) +0:275 dPdxFine (global 4-component vector of float) +0:275 'inF0' (in 4-component vector of float) +0:276 dPdy (global 4-component vector of float) +0:276 'inF0' (in 4-component vector of float) +0:277 dPdyCoarse (global 4-component vector of float) +0:277 'inF0' (in 4-component vector of float) +0:278 dPdyFine (global 4-component vector of float) +0:278 'inF0' (in 4-component vector of float) +0:279 degrees (global 4-component vector of float) +0:279 'inF0' (in 4-component vector of float) +0:280 distance (global float) +0:280 'inF0' (in 4-component vector of float) +0:280 'inF1' (in 4-component vector of float) +0:281 dot-product (global float) +0:281 'inF0' (in 4-component vector of float) +0:281 'inF1' (in 4-component vector of float) +0:282 Construct vec4 (temp 4-component vector of float) +0:282 Constant: +0:282 1.000000 +0:282 component-wise multiply (temp float) +0:282 direct index (temp float) +0:282 'inF0' (in 4-component vector of float) +0:282 Constant: +0:282 1 (const int) +0:282 direct index (temp float) +0:282 'inF1' (in 4-component vector of float) +0:282 Constant: +0:282 1 (const int) +0:282 direct index (temp float) +0:282 'inF0' (in 4-component vector of float) +0:282 Constant: +0:282 2 (const int) +0:282 direct index (temp float) +0:282 'inF1' (in 4-component vector of float) +0:282 Constant: +0:282 3 (const int) +0:286 exp (global 4-component vector of float) +0:286 'inF0' (in 4-component vector of float) +0:287 exp2 (global 4-component vector of float) +0:287 'inF0' (in 4-component vector of float) +0:288 face-forward (global 4-component vector of float) +0:288 'inF0' (in 4-component vector of float) +0:288 'inF1' (in 4-component vector of float) +0:288 'inF2' (in 4-component vector of float) +0:289 findMSB (global int) +0:289 Constant: +0:289 7 (const int) +0:290 findLSB (global int) +0:290 Constant: +0:290 7 (const int) +0:291 Floor (global 4-component vector of float) +0:291 'inF0' (in 4-component vector of float) +0:293 mod (global 4-component vector of float) +0:293 'inF0' (in 4-component vector of float) +0:293 'inF1' (in 4-component vector of float) +0:294 Fraction (global 4-component vector of float) +0:294 'inF0' (in 4-component vector of float) +0:295 frexp (global 4-component vector of float) +0:295 'inF0' (in 4-component vector of float) +0:295 'inF1' (in 4-component vector of float) +0:296 fwidth (global 4-component vector of float) +0:296 'inF0' (in 4-component vector of float) +0:297 isinf (global 4-component vector of bool) +0:297 'inF0' (in 4-component vector of float) +0:298 isnan (global 4-component vector of bool) +0:298 'inF0' (in 4-component vector of float) +0:299 ldexp (global 4-component vector of float) +0:299 'inF0' (in 4-component vector of float) +0:299 'inF1' (in 4-component vector of float) +0:300 length (global float) +0:300 'inF0' (in 4-component vector of float) +0:301 log (global 4-component vector of float) +0:301 'inF0' (in 4-component vector of float) +0:302 vector-scale (temp 4-component vector of float) +0:302 log2 (temp 4-component vector of float) +0:302 'inF0' (in 4-component vector of float) +0:302 Constant: +0:302 0.301030 +0:303 log2 (global 4-component vector of float) +0:303 'inF0' (in 4-component vector of float) +0:304 max (global 4-component vector of float) +0:304 'inF0' (in 4-component vector of float) +0:304 'inF1' (in 4-component vector of float) +0:305 min (global 4-component vector of float) +0:305 'inF0' (in 4-component vector of float) +0:305 'inF1' (in 4-component vector of float) +0:306 normalize (global 4-component vector of float) +0:306 'inF0' (in 4-component vector of float) +0:307 pow (global 4-component vector of float) +0:307 'inF0' (in 4-component vector of float) +0:307 'inF1' (in 4-component vector of float) +0:308 radians (global 4-component vector of float) +0:308 'inF0' (in 4-component vector of float) +0:309 divide (temp 4-component vector of float) +0:309 Constant: +0:309 1.000000 +0:309 'inF0' (in 4-component vector of float) +0:310 reflect (global 4-component vector of float) +0:310 'inF0' (in 4-component vector of float) +0:310 'inF1' (in 4-component vector of float) +0:311 refract (global 4-component vector of float) +0:311 'inF0' (in 4-component vector of float) +0:311 'inF1' (in 4-component vector of float) +0:311 Constant: +0:311 2.000000 +0:? bitFieldReverse (global 4-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:313 roundEven (global 4-component vector of float) +0:313 'inF0' (in 4-component vector of float) +0:314 inverse sqrt (global 4-component vector of float) +0:314 'inF0' (in 4-component vector of float) +0:315 clamp (temp 4-component vector of float) +0:315 'inF0' (in 4-component vector of float) +0:315 Constant: +0:315 0.000000 +0:315 Constant: +0:315 1.000000 +0:316 Sign (global 4-component vector of float) +0:316 'inF0' (in 4-component vector of float) +0:317 sine (global 4-component vector of float) +0:317 'inF0' (in 4-component vector of float) +0:318 Sequence +0:318 move second child to first child (temp 4-component vector of float) +0:318 'inF1' (in 4-component vector of float) +0:318 sine (temp 4-component vector of float) +0:318 'inF0' (in 4-component vector of float) +0:318 move second child to first child (temp 4-component vector of float) +0:318 'inF2' (in 4-component vector of float) +0:318 cosine (temp 4-component vector of float) +0:318 'inF0' (in 4-component vector of float) +0:319 hyp. sine (global 4-component vector of float) +0:319 'inF0' (in 4-component vector of float) +0:320 smoothstep (global 4-component vector of float) +0:320 'inF0' (in 4-component vector of float) +0:320 'inF1' (in 4-component vector of float) +0:320 'inF2' (in 4-component vector of float) +0:321 sqrt (global 4-component vector of float) +0:321 'inF0' (in 4-component vector of float) +0:322 step (global 4-component vector of float) +0:322 'inF0' (in 4-component vector of float) +0:322 'inF1' (in 4-component vector of float) +0:323 tangent (global 4-component vector of float) +0:323 'inF0' (in 4-component vector of float) +0:324 hyp. tangent (global 4-component vector of float) +0:324 'inF0' (in 4-component vector of float) +0:326 trunc (global 4-component vector of float) +0:326 'inF0' (in 4-component vector of float) +0:329 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:402 Function Definition: PixelShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float) +0:394 Function Parameters: +0:394 'inF0' (in 2X2 matrix of float) +0:394 'inF1' (in 2X2 matrix of float) +0:394 'inF2' (in 2X2 matrix of float) +0:? Sequence +0:396 all (global bool) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Absolute value (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 arc cosine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 any (global bool) +0:396 'inF0' (in 2X2 matrix of float) +0:396 arc sine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 arc tangent (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 arc tangent (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 Ceiling (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Test condition and select (temp void) +0:396 Condition +0:396 any (temp bool) +0:396 Compare Less Than (temp 2X2 matrix of bool) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Constant: +0:396 0.000000 +0:396 0.000000 +0:396 0.000000 +0:396 0.000000 +0:396 true case +0:396 Branch: Kill +0:396 clamp (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 'inF2' (in 2X2 matrix of float) +0:396 cosine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 hyp. cosine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdx (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdxCoarse (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdxFine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdy (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdyCoarse (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 dPdyFine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 degrees (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 determinant (global float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 exp (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 exp2 (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 findMSB (global int) +0:396 Constant: +0:396 7 (const int) +0:396 findLSB (global int) +0:396 Constant: +0:396 7 (const int) +0:396 Floor (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 mod (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 Fraction (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 frexp (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 fwidth (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 ldexp (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 log (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 matrix-scale (temp 2X2 matrix of float) +0:396 log2 (temp 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Constant: +0:396 0.301030 +0:396 log2 (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 max (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 min (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 pow (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 radians (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 roundEven (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 inverse sqrt (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 clamp (temp 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Constant: +0:396 0.000000 +0:396 Constant: +0:396 1.000000 +0:396 Sign (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 sine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 Sequence +0:396 move second child to first child (temp 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 sine (temp 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 move second child to first child (temp 2X2 matrix of float) +0:396 'inF2' (in 2X2 matrix of float) +0:396 cosine (temp 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 hyp. sine (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 smoothstep (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 'inF2' (in 2X2 matrix of float) +0:396 sqrt (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 step (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 'inF1' (in 2X2 matrix of float) +0:396 tangent (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 hyp. tangent (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 transpose (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:396 trunc (global 2X2 matrix of float) +0:396 'inF0' (in 2X2 matrix of float) +0:399 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:411 Function Definition: PixelShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float) +0:403 Function Parameters: +0:403 'inF0' (in 3X3 matrix of float) +0:403 'inF1' (in 3X3 matrix of float) +0:403 'inF2' (in 3X3 matrix of float) +0:? Sequence +0:405 all (global bool) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Absolute value (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 arc cosine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 any (global bool) +0:405 'inF0' (in 3X3 matrix of float) +0:405 arc sine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 arc tangent (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 arc tangent (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 Ceiling (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Test condition and select (temp void) +0:405 Condition +0:405 any (temp bool) +0:405 Compare Less Than (temp 3X3 matrix of bool) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Constant: +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 0.000000 +0:405 true case +0:405 Branch: Kill +0:405 clamp (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 'inF2' (in 3X3 matrix of float) +0:405 cosine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 hyp. cosine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdx (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdxCoarse (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdxFine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdy (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdyCoarse (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 dPdyFine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 degrees (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 determinant (global float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 exp (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 exp2 (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 findMSB (global int) +0:405 Constant: +0:405 7 (const int) +0:405 findLSB (global int) +0:405 Constant: +0:405 7 (const int) +0:405 Floor (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 mod (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 Fraction (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 frexp (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 fwidth (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 ldexp (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 log (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 matrix-scale (temp 3X3 matrix of float) +0:405 log2 (temp 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Constant: +0:405 0.301030 +0:405 log2 (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 max (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 min (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 pow (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 radians (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 roundEven (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 inverse sqrt (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 clamp (temp 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Constant: +0:405 0.000000 +0:405 Constant: +0:405 1.000000 +0:405 Sign (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 sine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 Sequence +0:405 move second child to first child (temp 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 sine (temp 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 move second child to first child (temp 3X3 matrix of float) +0:405 'inF2' (in 3X3 matrix of float) +0:405 cosine (temp 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 hyp. sine (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 smoothstep (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 'inF2' (in 3X3 matrix of float) +0:405 sqrt (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 step (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 'inF1' (in 3X3 matrix of float) +0:405 tangent (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 hyp. tangent (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 transpose (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:405 trunc (global 3X3 matrix of float) +0:405 'inF0' (in 3X3 matrix of float) +0:408 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:432 Function Definition: PixelShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float) +0:412 Function Parameters: +0:412 'inF0' (in 4X4 matrix of float) +0:412 'inF1' (in 4X4 matrix of float) +0:412 'inF2' (in 4X4 matrix of float) +0:? Sequence +0:414 all (global bool) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Absolute value (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 arc cosine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 any (global bool) +0:414 'inF0' (in 4X4 matrix of float) +0:414 arc sine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 arc tangent (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 arc tangent (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 Ceiling (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Test condition and select (temp void) +0:414 Condition +0:414 any (temp bool) +0:414 Compare Less Than (temp 4X4 matrix of bool) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Constant: +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 0.000000 +0:414 true case +0:414 Branch: Kill +0:414 clamp (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 'inF2' (in 4X4 matrix of float) +0:414 cosine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 hyp. cosine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdx (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdxCoarse (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdxFine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdy (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdyCoarse (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 dPdyFine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 degrees (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 determinant (global float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 exp (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 exp2 (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 findMSB (global int) +0:414 Constant: +0:414 7 (const int) +0:414 findLSB (global int) +0:414 Constant: +0:414 7 (const int) +0:414 Floor (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 mod (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 Fraction (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 frexp (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 fwidth (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 ldexp (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 log (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 matrix-scale (temp 4X4 matrix of float) +0:414 log2 (temp 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Constant: +0:414 0.301030 +0:414 log2 (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 max (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 min (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 pow (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 radians (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 roundEven (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 inverse sqrt (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 clamp (temp 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Constant: +0:414 0.000000 +0:414 Constant: +0:414 1.000000 +0:414 Sign (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 sine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 Sequence +0:414 move second child to first child (temp 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 sine (temp 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 move second child to first child (temp 4X4 matrix of float) +0:414 'inF2' (in 4X4 matrix of float) +0:414 cosine (temp 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 hyp. sine (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 smoothstep (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 'inF2' (in 4X4 matrix of float) +0:414 sqrt (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 step (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 'inF1' (in 4X4 matrix of float) +0:414 tangent (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 hyp. tangent (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 transpose (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:414 trunc (global 4X4 matrix of float) +0:414 'inF0' (in 4X4 matrix of float) +0:417 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:439 Function Definition: TestGenMul(f1;f1;vf2;vf2;mf22;mf22; (temp void) +0:435 Function Parameters: +0:435 'inF0' (in float) +0:435 'inF1' (in float) +0:435 'inFV0' (in 2-component vector of float) +0:435 'inFV1' (in 2-component vector of float) +0:435 'inFM0' (in 2X2 matrix of float) +0:435 'inFM1' (in 2X2 matrix of float) +0:? Sequence +0:436 move second child to first child (temp float) +0:436 'r0' (temp float) +0:436 component-wise multiply (temp float) +0:436 'inF0' (in float) +0:436 'inF1' (in float) +0:436 move second child to first child (temp 2-component vector of float) +0:436 'r1' (temp 2-component vector of float) +0:436 vector-scale (temp 2-component vector of float) +0:436 'inFV0' (in 2-component vector of float) +0:436 'inF0' (in float) +0:436 move second child to first child (temp 2-component vector of float) +0:436 'r2' (temp 2-component vector of float) +0:436 vector-scale (temp 2-component vector of float) +0:436 'inF0' (in float) +0:436 'inFV0' (in 2-component vector of float) +0:436 move second child to first child (temp float) +0:436 'r3' (temp float) +0:436 dot-product (global float) +0:436 'inFV0' (in 2-component vector of float) +0:436 'inFV1' (in 2-component vector of float) +0:436 move second child to first child (temp 2-component vector of float) +0:436 'r4' (temp 2-component vector of float) +0:436 matrix-times-vector (temp 2-component vector of float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 'inFV0' (in 2-component vector of float) +0:436 move second child to first child (temp 2-component vector of float) +0:436 'r5' (temp 2-component vector of float) +0:436 vector-times-matrix (temp 2-component vector of float) +0:436 'inFV0' (in 2-component vector of float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 move second child to first child (temp 2X2 matrix of float) +0:436 'r6' (temp 2X2 matrix of float) +0:436 matrix-scale (temp 2X2 matrix of float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 'inF0' (in float) +0:436 move second child to first child (temp 2X2 matrix of float) +0:436 'r7' (temp 2X2 matrix of float) +0:436 matrix-scale (temp 2X2 matrix of float) +0:436 'inF0' (in float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 move second child to first child (temp 2X2 matrix of float) +0:436 'r8' (temp 2X2 matrix of float) +0:436 matrix-multiply (temp 2X2 matrix of float) +0:436 'inFM0' (in 2X2 matrix of float) +0:436 'inFM1' (in 2X2 matrix of float) +0:446 Function Definition: TestGenMul(f1;f1;vf3;vf3;mf33;mf33; (temp void) +0:442 Function Parameters: +0:442 'inF0' (in float) +0:442 'inF1' (in float) +0:442 'inFV0' (in 3-component vector of float) +0:442 'inFV1' (in 3-component vector of float) +0:442 'inFM0' (in 3X3 matrix of float) +0:442 'inFM1' (in 3X3 matrix of float) +0:? Sequence +0:443 move second child to first child (temp float) +0:443 'r0' (temp float) +0:443 component-wise multiply (temp float) +0:443 'inF0' (in float) +0:443 'inF1' (in float) +0:443 move second child to first child (temp 3-component vector of float) +0:443 'r1' (temp 3-component vector of float) +0:443 vector-scale (temp 3-component vector of float) +0:443 'inFV0' (in 3-component vector of float) +0:443 'inF0' (in float) +0:443 move second child to first child (temp 3-component vector of float) +0:443 'r2' (temp 3-component vector of float) +0:443 vector-scale (temp 3-component vector of float) +0:443 'inF0' (in float) +0:443 'inFV0' (in 3-component vector of float) +0:443 move second child to first child (temp float) +0:443 'r3' (temp float) +0:443 dot-product (global float) +0:443 'inFV0' (in 3-component vector of float) +0:443 'inFV1' (in 3-component vector of float) +0:443 move second child to first child (temp 3-component vector of float) +0:443 'r4' (temp 3-component vector of float) +0:443 matrix-times-vector (temp 3-component vector of float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 'inFV0' (in 3-component vector of float) +0:443 move second child to first child (temp 3-component vector of float) +0:443 'r5' (temp 3-component vector of float) +0:443 vector-times-matrix (temp 3-component vector of float) +0:443 'inFV0' (in 3-component vector of float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 move second child to first child (temp 3X3 matrix of float) +0:443 'r6' (temp 3X3 matrix of float) +0:443 matrix-scale (temp 3X3 matrix of float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 'inF0' (in float) +0:443 move second child to first child (temp 3X3 matrix of float) +0:443 'r7' (temp 3X3 matrix of float) +0:443 matrix-scale (temp 3X3 matrix of float) +0:443 'inF0' (in float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 move second child to first child (temp 3X3 matrix of float) +0:443 'r8' (temp 3X3 matrix of float) +0:443 matrix-multiply (temp 3X3 matrix of float) +0:443 'inFM0' (in 3X3 matrix of float) +0:443 'inFM1' (in 3X3 matrix of float) +0:452 Function Definition: TestGenMul(f1;f1;vf4;vf4;mf44;mf44; (temp void) +0:449 Function Parameters: +0:449 'inF0' (in float) +0:449 'inF1' (in float) +0:449 'inFV0' (in 4-component vector of float) +0:449 'inFV1' (in 4-component vector of float) +0:449 'inFM0' (in 4X4 matrix of float) +0:449 'inFM1' (in 4X4 matrix of float) +0:? Sequence +0:450 move second child to first child (temp float) +0:450 'r0' (temp float) +0:450 component-wise multiply (temp float) +0:450 'inF0' (in float) +0:450 'inF1' (in float) +0:450 move second child to first child (temp 4-component vector of float) +0:450 'r1' (temp 4-component vector of float) +0:450 vector-scale (temp 4-component vector of float) +0:450 'inFV0' (in 4-component vector of float) +0:450 'inF0' (in float) +0:450 move second child to first child (temp 4-component vector of float) +0:450 'r2' (temp 4-component vector of float) +0:450 vector-scale (temp 4-component vector of float) +0:450 'inF0' (in float) +0:450 'inFV0' (in 4-component vector of float) +0:450 move second child to first child (temp float) +0:450 'r3' (temp float) +0:450 dot-product (global float) +0:450 'inFV0' (in 4-component vector of float) +0:450 'inFV1' (in 4-component vector of float) +0:450 move second child to first child (temp 4-component vector of float) +0:450 'r4' (temp 4-component vector of float) +0:450 matrix-times-vector (temp 4-component vector of float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 'inFV0' (in 4-component vector of float) +0:450 move second child to first child (temp 4-component vector of float) +0:450 'r5' (temp 4-component vector of float) +0:450 vector-times-matrix (temp 4-component vector of float) +0:450 'inFV0' (in 4-component vector of float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 move second child to first child (temp 4X4 matrix of float) +0:450 'r6' (temp 4X4 matrix of float) +0:450 matrix-scale (temp 4X4 matrix of float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 'inF0' (in float) +0:450 move second child to first child (temp 4X4 matrix of float) +0:450 'r7' (temp 4X4 matrix of float) +0:450 matrix-scale (temp 4X4 matrix of float) +0:450 'inF0' (in float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 move second child to first child (temp 4X4 matrix of float) +0:450 'r8' (temp 4X4 matrix of float) +0:450 matrix-multiply (temp 4X4 matrix of float) +0:450 'inFM0' (in 4X4 matrix of float) +0:450 'inFM1' (in 4X4 matrix of float) +0:? Linker Objects +0:? 'gs_ua' (temp uint) +0:? 'gs_ub' (temp uint) +0:? 'gs_uc' (temp uint) +0:? 'gs_ua2' (temp 2-component vector of uint) +0:? 'gs_ub2' (temp 2-component vector of uint) +0:? 'gs_uc2' (temp 2-component vector of uint) +0:? 'gs_ua3' (temp 3-component vector of uint) +0:? 'gs_ub3' (temp 3-component vector of uint) +0:? 'gs_uc3' (temp 3-component vector of uint) +0:? 'gs_ua4' (temp 4-component vector of uint) +0:? 'gs_ub4' (temp 4-component vector of uint) +0:? 'gs_uc4' (temp 4-component vector of uint) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 1265 + + Capability Shader + Capability DerivativeControl + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 48 67 73 80 195 213 219 226 366 384 390 397 539 557 563 570 719 733 748 857 871 886 998 1012 1027 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 19 "TestGenMul(f1;f1;vf2;vf2;mf22;mf22;" + Name 13 "inF0" + Name 14 "inF1" + Name 15 "inFV0" + Name 16 "inFV1" + Name 17 "inFM0" + Name 18 "inFM1" + Name 32 "TestGenMul(f1;f1;vf3;vf3;mf33;mf33;" + Name 26 "inF0" + Name 27 "inF1" + Name 28 "inFV0" + Name 29 "inFV1" + Name 30 "inFM0" + Name 31 "inFM1" + Name 45 "TestGenMul(f1;f1;vf4;vf4;mf44;mf44;" + Name 39 "inF0" + Name 40 "inF1" + Name 41 "inFV0" + Name 42 "inFV1" + Name 43 "inFM0" + Name 44 "inFM1" + Name 48 "inF0" + Name 67 "inU0" + Name 73 "inF1" + Name 80 "inF2" + Name 124 "ResType" + Name 195 "inF0" + Name 213 "inU0" + Name 219 "inF1" + Name 226 "inF2" + Name 282 "ResType" + Name 366 "inF0" + Name 384 "inU0" + Name 390 "inF1" + Name 397 "inF2" + Name 456 "ResType" + Name 539 "inF0" + Name 557 "inU0" + Name 563 "inF1" + Name 570 "inF2" + Name 635 "ResType" + Name 719 "inF0" + Name 733 "inF1" + Name 748 "inF2" + Name 791 "ResType" + Name 857 "inF0" + Name 871 "inF1" + Name 886 "inF2" + Name 932 "ResType" + Name 998 "inF0" + Name 1012 "inF1" + Name 1027 "inF2" + Name 1076 "ResType" + Name 1141 "r0" + Name 1145 "r1" + Name 1149 "r2" + Name 1153 "r3" + Name 1157 "r4" + Name 1161 "r5" + Name 1165 "r6" + Name 1169 "r7" + Name 1173 "r8" + Name 1177 "r0" + Name 1181 "r1" + Name 1185 "r2" + Name 1189 "r3" + Name 1193 "r4" + Name 1197 "r5" + Name 1201 "r6" + Name 1205 "r7" + Name 1209 "r8" + Name 1213 "r0" + Name 1217 "r1" + Name 1221 "r2" + Name 1225 "r3" + Name 1229 "r4" + Name 1233 "r5" + Name 1237 "r6" + Name 1241 "r7" + Name 1245 "r8" + Name 1250 "gs_ua" + Name 1251 "gs_ub" + Name 1252 "gs_uc" + Name 1254 "gs_ua2" + Name 1255 "gs_ub2" + Name 1256 "gs_uc2" + Name 1258 "gs_ua3" + Name 1259 "gs_ub3" + Name 1260 "gs_uc3" + Name 1262 "gs_ua4" + Name 1263 "gs_ub4" + Name 1264 "gs_uc4" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeVector 6(float) 2 + 9: TypePointer Function 8(fvec2) + 10: TypeMatrix 8(fvec2) 2 + 11: TypePointer Function 10 + 12: TypeFunction 2 7(ptr) 7(ptr) 9(ptr) 9(ptr) 11(ptr) 11(ptr) + 21: TypeVector 6(float) 3 + 22: TypePointer Function 21(fvec3) + 23: TypeMatrix 21(fvec3) 3 + 24: TypePointer Function 23 + 25: TypeFunction 2 7(ptr) 7(ptr) 22(ptr) 22(ptr) 24(ptr) 24(ptr) + 34: TypeVector 6(float) 4 + 35: TypePointer Function 34(fvec4) + 36: TypeMatrix 34(fvec4) 4 + 37: TypePointer Function 36 + 38: TypeFunction 2 7(ptr) 7(ptr) 35(ptr) 35(ptr) 37(ptr) 37(ptr) + 47: TypePointer Input 6(float) + 48(inF0): 47(ptr) Variable Input + 50: TypeBool + 61: TypeInt 32 1 + 64: TypeInt 32 0 + 66: TypePointer Input 64(int) + 67(inU0): 66(ptr) Variable Input + 73(inF1): 47(ptr) Variable Input + 80(inF2): 47(ptr) Variable Input + 84: 6(float) Constant 0 + 93: 64(int) Constant 7 + 113: 61(int) Constant 7 + 124(ResType): TypeStruct 6(float) 61(int) + 141: 6(float) Constant 1050288283 + 156: 6(float) Constant 1065353216 + 159: 64(int) Constant 2 + 194: TypePointer Input 8(fvec2) + 195(inF0): 194(ptr) Variable Input + 207: TypeVector 61(int) 2 + 210: TypeVector 64(int) 2 + 212: TypePointer Input 210(ivec2) + 213(inU0): 212(ptr) Variable Input + 219(inF1): 194(ptr) Variable Input + 226(inF2): 194(ptr) Variable Input + 230: 8(fvec2) ConstantComposite 84 84 + 231: TypeVector 50(bool) 2 + 241: 64(int) Constant 3 + 242: 210(ivec2) ConstantComposite 93 241 + 282(ResType): TypeStruct 8(fvec2) 207(ivec2) + 325: 6(float) Constant 1073741824 + 327: 64(int) Constant 1 + 328: 210(ivec2) ConstantComposite 327 159 + 363: 8(fvec2) ConstantComposite 156 325 + 365: TypePointer Input 21(fvec3) + 366(inF0): 365(ptr) Variable Input + 378: TypeVector 61(int) 3 + 381: TypeVector 64(int) 3 + 383: TypePointer Input 381(ivec3) + 384(inU0): 383(ptr) Variable Input + 390(inF1): 365(ptr) Variable Input + 397(inF2): 365(ptr) Variable Input + 401: 21(fvec3) ConstantComposite 84 84 84 + 402: TypeVector 50(bool) 3 + 412: 64(int) Constant 5 + 413: 381(ivec3) ConstantComposite 93 241 412 + 456(ResType): TypeStruct 21(fvec3) 378(ivec3) + 500: 381(ivec3) ConstantComposite 327 159 241 + 535: 6(float) Constant 1077936128 + 536: 21(fvec3) ConstantComposite 156 325 535 + 538: TypePointer Input 34(fvec4) + 539(inF0): 538(ptr) Variable Input + 551: TypeVector 61(int) 4 + 554: TypeVector 64(int) 4 + 556: TypePointer Input 554(ivec4) + 557(inU0): 556(ptr) Variable Input + 563(inF1): 538(ptr) Variable Input + 570(inF2): 538(ptr) Variable Input + 574: 34(fvec4) ConstantComposite 84 84 84 84 + 575: TypeVector 50(bool) 4 + 585: 554(ivec4) ConstantComposite 93 241 412 159 + 635(ResType): TypeStruct 34(fvec4) 551(ivec4) + 679: 64(int) Constant 4 + 680: 554(ivec4) ConstantComposite 327 159 241 679 + 715: 6(float) Constant 1082130432 + 716: 34(fvec4) ConstantComposite 156 325 535 715 + 718: TypePointer Input 10 + 719(inF0): 718(ptr) Variable Input + 733(inF1): 718(ptr) Variable Input + 739: 10 ConstantComposite 230 230 + 740: TypeMatrix 231(bvec2) 2 + 748(inF2): 718(ptr) Variable Input + 791(ResType): TypeStruct 10 207(ivec2) + 853: 8(fvec2) ConstantComposite 325 325 + 854: 10 ConstantComposite 853 853 + 856: TypePointer Input 23 + 857(inF0): 856(ptr) Variable Input + 871(inF1): 856(ptr) Variable Input + 877: 23 ConstantComposite 401 401 401 + 878: TypeMatrix 402(bvec3) 3 + 886(inF2): 856(ptr) Variable Input + 932(ResType): TypeStruct 23 378(ivec3) + 994: 21(fvec3) ConstantComposite 535 535 535 + 995: 23 ConstantComposite 994 994 994 + 997: TypePointer Input 36 + 998(inF0): 997(ptr) Variable Input + 1012(inF1): 997(ptr) Variable Input + 1018: 36 ConstantComposite 574 574 574 574 + 1019: TypeMatrix 575(bvec4) 4 + 1027(inF2): 997(ptr) Variable Input + 1076(ResType): TypeStruct 36 551(ivec4) + 1138: 34(fvec4) ConstantComposite 715 715 715 715 + 1139: 36 ConstantComposite 1138 1138 1138 1138 + 1249: TypePointer Function 64(int) + 1253: TypePointer Function 210(ivec2) + 1257: TypePointer Function 381(ivec3) + 1261: TypePointer Function 554(ivec4) +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 49: 6(float) Load 48(inF0) + 51: 50(bool) All 49 + 52: 6(float) Load 48(inF0) + 53: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 52 + 54: 6(float) Load 48(inF0) + 55: 6(float) ExtInst 1(GLSL.std.450) 17(Acos) 54 + 56: 6(float) Load 48(inF0) + 57: 50(bool) Any 56 + 58: 6(float) Load 48(inF0) + 59: 6(float) ExtInst 1(GLSL.std.450) 16(Asin) 58 + 60: 6(float) Load 48(inF0) + 62: 61(int) Bitcast 60 + 63: 6(float) Load 48(inF0) + 65: 64(int) Bitcast 63 + 68: 64(int) Load 67(inU0) + 69: 6(float) Bitcast 68 + 70: 6(float) Load 48(inF0) + 71: 6(float) ExtInst 1(GLSL.std.450) 18(Atan) 70 + 72: 6(float) Load 48(inF0) + 74: 6(float) Load 73(inF1) + 75: 6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 72 74 + 76: 6(float) Load 48(inF0) + 77: 6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 76 + 78: 6(float) Load 48(inF0) + 79: 6(float) Load 73(inF1) + 81: 6(float) Load 80(inF2) + 82: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 78 79 81 + 83: 6(float) Load 48(inF0) + 85: 50(bool) FOrdLessThan 83 84 + SelectionMerge 87 None + BranchConditional 85 86 87 + 86: Label + Kill + 87: Label + 89: 6(float) Load 48(inF0) + 90: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 89 + 91: 6(float) Load 48(inF0) + 92: 6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 91 + 94: 64(int) BitCount 93 + 95: 6(float) Load 48(inF0) + 96: 6(float) DPdx 95 + 97: 6(float) Load 48(inF0) + 98: 6(float) DPdxCoarse 97 + 99: 6(float) Load 48(inF0) + 100: 6(float) DPdxFine 99 + 101: 6(float) Load 48(inF0) + 102: 6(float) DPdy 101 + 103: 6(float) Load 48(inF0) + 104: 6(float) DPdyCoarse 103 + 105: 6(float) Load 48(inF0) + 106: 6(float) DPdyFine 105 + 107: 6(float) Load 48(inF0) + 108: 6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 107 + 109: 6(float) Load 48(inF0) + 110: 6(float) ExtInst 1(GLSL.std.450) 27(Exp) 109 + 111: 6(float) Load 48(inF0) + 112: 6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 111 + 114: 61(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 113 + 115: 61(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 113 + 116: 6(float) Load 48(inF0) + 117: 6(float) ExtInst 1(GLSL.std.450) 8(Floor) 116 + 118: 6(float) Load 48(inF0) + 119: 6(float) Load 73(inF1) + 120: 6(float) FMod 118 119 + 121: 6(float) Load 48(inF0) + 122: 6(float) ExtInst 1(GLSL.std.450) 10(Fract) 121 + 123: 6(float) Load 48(inF0) + 125:124(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 123 + 126: 61(int) CompositeExtract 125 1 + Store 73(inF1) 126 + 127: 6(float) CompositeExtract 125 0 + 128: 6(float) Load 48(inF0) + 129: 6(float) Fwidth 128 + 130: 6(float) Load 48(inF0) + 131: 50(bool) IsInf 130 + 132: 6(float) Load 48(inF0) + 133: 50(bool) IsNan 132 + 134: 6(float) Load 48(inF0) + 135: 6(float) Load 73(inF1) + 136: 6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 134 135 + 137: 6(float) Load 48(inF0) + 138: 6(float) ExtInst 1(GLSL.std.450) 28(Log) 137 + 139: 6(float) Load 48(inF0) + 140: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 139 + 142: 6(float) FMul 140 141 + 143: 6(float) Load 48(inF0) + 144: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 143 + 145: 6(float) Load 48(inF0) + 146: 6(float) Load 73(inF1) + 147: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 145 146 + 148: 6(float) Load 48(inF0) + 149: 6(float) Load 73(inF1) + 150: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 148 149 + 151: 6(float) Load 48(inF0) + 152: 6(float) Load 73(inF1) + 153: 6(float) ExtInst 1(GLSL.std.450) 26(Pow) 151 152 + 154: 6(float) Load 48(inF0) + 155: 6(float) ExtInst 1(GLSL.std.450) 11(Radians) 154 + 157: 6(float) Load 48(inF0) + 158: 6(float) FDiv 156 157 + 160: 64(int) BitReverse 159 + 161: 6(float) Load 48(inF0) + 162: 6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 161 + 163: 6(float) Load 48(inF0) + 164: 6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 163 + 165: 6(float) Load 48(inF0) + 166: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 165 84 156 + 167: 6(float) Load 48(inF0) + 168: 6(float) ExtInst 1(GLSL.std.450) 6(FSign) 167 + 169: 6(float) Load 48(inF0) + 170: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 169 + 171: 6(float) Load 48(inF0) + 172: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 171 + Store 73(inF1) 172 + 173: 6(float) Load 48(inF0) + 174: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 173 + Store 80(inF2) 174 + 175: 6(float) Load 48(inF0) + 176: 6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 175 + 177: 6(float) Load 48(inF0) + 178: 6(float) Load 73(inF1) + 179: 6(float) Load 80(inF2) + 180: 6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 177 178 179 + 181: 6(float) Load 48(inF0) + 182: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 181 + 183: 6(float) Load 48(inF0) + 184: 6(float) Load 73(inF1) + 185: 6(float) ExtInst 1(GLSL.std.450) 48(Step) 183 184 + 186: 6(float) Load 48(inF0) + 187: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 186 + 188: 6(float) Load 48(inF0) + 189: 6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 188 + 190: 6(float) Load 48(inF0) + 191: 6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 190 + ReturnValue 84 + FunctionEnd +19(TestGenMul(f1;f1;vf2;vf2;mf22;mf22;): 2 Function None 12 + 13(inF0): 7(ptr) FunctionParameter + 14(inF1): 7(ptr) FunctionParameter + 15(inFV0): 9(ptr) FunctionParameter + 16(inFV1): 9(ptr) FunctionParameter + 17(inFM0): 11(ptr) FunctionParameter + 18(inFM1): 11(ptr) FunctionParameter + 20: Label + 1141(r0): 7(ptr) Variable Function + 1145(r1): 9(ptr) Variable Function + 1149(r2): 9(ptr) Variable Function + 1153(r3): 7(ptr) Variable Function + 1157(r4): 9(ptr) Variable Function + 1161(r5): 9(ptr) Variable Function + 1165(r6): 11(ptr) Variable Function + 1169(r7): 11(ptr) Variable Function + 1173(r8): 11(ptr) Variable Function + 1142: 6(float) Load 13(inF0) + 1143: 6(float) Load 14(inF1) + 1144: 6(float) FMul 1142 1143 + Store 1141(r0) 1144 + 1146: 8(fvec2) Load 15(inFV0) + 1147: 6(float) Load 13(inF0) + 1148: 8(fvec2) VectorTimesScalar 1146 1147 + Store 1145(r1) 1148 + 1150: 6(float) Load 13(inF0) + 1151: 8(fvec2) Load 15(inFV0) + 1152: 8(fvec2) VectorTimesScalar 1151 1150 + Store 1149(r2) 1152 + 1154: 8(fvec2) Load 15(inFV0) + 1155: 8(fvec2) Load 16(inFV1) + 1156: 6(float) Dot 1154 1155 + Store 1153(r3) 1156 + 1158: 10 Load 17(inFM0) + 1159: 8(fvec2) Load 15(inFV0) + 1160: 8(fvec2) MatrixTimesVector 1158 1159 + Store 1157(r4) 1160 + 1162: 8(fvec2) Load 15(inFV0) + 1163: 10 Load 17(inFM0) + 1164: 8(fvec2) VectorTimesMatrix 1162 1163 + Store 1161(r5) 1164 + 1166: 10 Load 17(inFM0) + 1167: 6(float) Load 13(inF0) + 1168: 10 MatrixTimesScalar 1166 1167 + Store 1165(r6) 1168 + 1170: 6(float) Load 13(inF0) + 1171: 10 Load 17(inFM0) + 1172: 10 MatrixTimesScalar 1171 1170 + Store 1169(r7) 1172 + 1174: 10 Load 17(inFM0) + 1175: 10 Load 18(inFM1) + 1176: 10 MatrixTimesMatrix 1174 1175 + Store 1173(r8) 1176 + Return + FunctionEnd +32(TestGenMul(f1;f1;vf3;vf3;mf33;mf33;): 2 Function None 25 + 26(inF0): 7(ptr) FunctionParameter + 27(inF1): 7(ptr) FunctionParameter + 28(inFV0): 22(ptr) FunctionParameter + 29(inFV1): 22(ptr) FunctionParameter + 30(inFM0): 24(ptr) FunctionParameter + 31(inFM1): 24(ptr) FunctionParameter + 33: Label + 1177(r0): 7(ptr) Variable Function + 1181(r1): 22(ptr) Variable Function + 1185(r2): 22(ptr) Variable Function + 1189(r3): 7(ptr) Variable Function + 1193(r4): 22(ptr) Variable Function + 1197(r5): 22(ptr) Variable Function + 1201(r6): 24(ptr) Variable Function + 1205(r7): 24(ptr) Variable Function + 1209(r8): 24(ptr) Variable Function + 1178: 6(float) Load 26(inF0) + 1179: 6(float) Load 27(inF1) + 1180: 6(float) FMul 1178 1179 + Store 1177(r0) 1180 + 1182: 21(fvec3) Load 28(inFV0) + 1183: 6(float) Load 26(inF0) + 1184: 21(fvec3) VectorTimesScalar 1182 1183 + Store 1181(r1) 1184 + 1186: 6(float) Load 26(inF0) + 1187: 21(fvec3) Load 28(inFV0) + 1188: 21(fvec3) VectorTimesScalar 1187 1186 + Store 1185(r2) 1188 + 1190: 21(fvec3) Load 28(inFV0) + 1191: 21(fvec3) Load 29(inFV1) + 1192: 6(float) Dot 1190 1191 + Store 1189(r3) 1192 + 1194: 23 Load 30(inFM0) + 1195: 21(fvec3) Load 28(inFV0) + 1196: 21(fvec3) MatrixTimesVector 1194 1195 + Store 1193(r4) 1196 + 1198: 21(fvec3) Load 28(inFV0) + 1199: 23 Load 30(inFM0) + 1200: 21(fvec3) VectorTimesMatrix 1198 1199 + Store 1197(r5) 1200 + 1202: 23 Load 30(inFM0) + 1203: 6(float) Load 26(inF0) + 1204: 23 MatrixTimesScalar 1202 1203 + Store 1201(r6) 1204 + 1206: 6(float) Load 26(inF0) + 1207: 23 Load 30(inFM0) + 1208: 23 MatrixTimesScalar 1207 1206 + Store 1205(r7) 1208 + 1210: 23 Load 30(inFM0) + 1211: 23 Load 31(inFM1) + 1212: 23 MatrixTimesMatrix 1210 1211 + Store 1209(r8) 1212 + Return + FunctionEnd +45(TestGenMul(f1;f1;vf4;vf4;mf44;mf44;): 2 Function None 38 + 39(inF0): 7(ptr) FunctionParameter + 40(inF1): 7(ptr) FunctionParameter + 41(inFV0): 35(ptr) FunctionParameter + 42(inFV1): 35(ptr) FunctionParameter + 43(inFM0): 37(ptr) FunctionParameter + 44(inFM1): 37(ptr) FunctionParameter + 46: Label + 1213(r0): 7(ptr) Variable Function + 1217(r1): 35(ptr) Variable Function + 1221(r2): 35(ptr) Variable Function + 1225(r3): 7(ptr) Variable Function + 1229(r4): 35(ptr) Variable Function + 1233(r5): 35(ptr) Variable Function + 1237(r6): 37(ptr) Variable Function + 1241(r7): 37(ptr) Variable Function + 1245(r8): 37(ptr) Variable Function + 1250(gs_ua): 1249(ptr) Variable Function + 1251(gs_ub): 1249(ptr) Variable Function + 1252(gs_uc): 1249(ptr) Variable Function + 1254(gs_ua2): 1253(ptr) Variable Function + 1255(gs_ub2): 1253(ptr) Variable Function + 1256(gs_uc2): 1253(ptr) Variable Function + 1258(gs_ua3): 1257(ptr) Variable Function + 1259(gs_ub3): 1257(ptr) Variable Function + 1260(gs_uc3): 1257(ptr) Variable Function + 1262(gs_ua4): 1261(ptr) Variable Function + 1263(gs_ub4): 1261(ptr) Variable Function + 1264(gs_uc4): 1261(ptr) Variable Function + 1214: 6(float) Load 39(inF0) + 1215: 6(float) Load 40(inF1) + 1216: 6(float) FMul 1214 1215 + Store 1213(r0) 1216 + 1218: 34(fvec4) Load 41(inFV0) + 1219: 6(float) Load 39(inF0) + 1220: 34(fvec4) VectorTimesScalar 1218 1219 + Store 1217(r1) 1220 + 1222: 6(float) Load 39(inF0) + 1223: 34(fvec4) Load 41(inFV0) + 1224: 34(fvec4) VectorTimesScalar 1223 1222 + Store 1221(r2) 1224 + 1226: 34(fvec4) Load 41(inFV0) + 1227: 34(fvec4) Load 42(inFV1) + 1228: 6(float) Dot 1226 1227 + Store 1225(r3) 1228 + 1230: 36 Load 43(inFM0) + 1231: 34(fvec4) Load 41(inFV0) + 1232: 34(fvec4) MatrixTimesVector 1230 1231 + Store 1229(r4) 1232 + 1234: 34(fvec4) Load 41(inFV0) + 1235: 36 Load 43(inFM0) + 1236: 34(fvec4) VectorTimesMatrix 1234 1235 + Store 1233(r5) 1236 + 1238: 36 Load 43(inFM0) + 1239: 6(float) Load 39(inF0) + 1240: 36 MatrixTimesScalar 1238 1239 + Store 1237(r6) 1240 + 1242: 6(float) Load 39(inF0) + 1243: 36 Load 43(inFM0) + 1244: 36 MatrixTimesScalar 1243 1242 + Store 1241(r7) 1244 + 1246: 36 Load 43(inFM0) + 1247: 36 Load 44(inFM1) + 1248: 36 MatrixTimesMatrix 1246 1247 + Store 1245(r8) 1248 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.lit.frag.out b/Test/baseResults/hlsl.intrinsics.lit.frag.out new file mode 100644 index 00000000..3a6becfa --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.lit.frag.out @@ -0,0 +1,134 @@ +hlsl.intrinsics.lit.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: PixelShaderFunction(f1;f1;f1; (temp void) +0:2 Function Parameters: +0:2 'n_dot_l' (in float) +0:2 'n_dot_h' (in float) +0:2 'm' (in float) +0:? Sequence +0:3 move second child to first child (temp 4-component vector of float) +0:3 'r0' (temp 4-component vector of float) +0:3 Construct vec4 (temp 4-component vector of float) +0:3 Constant: +0:3 1.000000 +0:3 max (temp float) +0:3 'n_dot_l' (in float) +0:3 Constant: +0:3 0.000000 +0:3 Test condition and select (temp float) +0:3 Condition +0:3 Compare Less Than (temp bool) +0:3 min (temp float) +0:3 'n_dot_l' (in float) +0:3 'n_dot_h' (in float) +0:3 Constant: +0:3 0.000000 +0:3 true case +0:3 Constant: +0:3 0.000000 +0:3 false case +0:3 component-wise multiply (temp float) +0:3 'n_dot_h' (in float) +0:3 'm' (in float) +0:3 Constant: +0:3 1.000000 +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: PixelShaderFunction(f1;f1;f1; (temp void) +0:2 Function Parameters: +0:2 'n_dot_l' (in float) +0:2 'n_dot_h' (in float) +0:2 'm' (in float) +0:? Sequence +0:3 move second child to first child (temp 4-component vector of float) +0:3 'r0' (temp 4-component vector of float) +0:3 Construct vec4 (temp 4-component vector of float) +0:3 Constant: +0:3 1.000000 +0:3 max (temp float) +0:3 'n_dot_l' (in float) +0:3 Constant: +0:3 0.000000 +0:3 Test condition and select (temp float) +0:3 Condition +0:3 Compare Less Than (temp bool) +0:3 min (temp float) +0:3 'n_dot_l' (in float) +0:3 'n_dot_h' (in float) +0:3 Constant: +0:3 0.000000 +0:3 true case +0:3 Constant: +0:3 0.000000 +0:3 false case +0:3 component-wise multiply (temp float) +0:3 'n_dot_h' (in float) +0:3 'm' (in float) +0:3 Constant: +0:3 1.000000 +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 33 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 12 19 28 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 9 "r0" + Name 12 "n_dot_l" + Name 19 "n_dot_h" + Name 28 "m" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: 6(float) Constant 1065353216 + 11: TypePointer Input 6(float) + 12(n_dot_l): 11(ptr) Variable Input + 14: 6(float) Constant 0 + 16: TypePointer Function 6(float) + 19(n_dot_h): 11(ptr) Variable Input + 22: TypeBool + 28(m): 11(ptr) Variable Input +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 9(r0): 8(ptr) Variable Function + 17: 16(ptr) Variable Function + 13: 6(float) Load 12(n_dot_l) + 15: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 13 14 + 18: 6(float) Load 12(n_dot_l) + 20: 6(float) Load 19(n_dot_h) + 21: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 18 20 + 23: 22(bool) FOrdLessThan 21 14 + SelectionMerge 25 None + BranchConditional 23 24 26 + 24: Label + Store 17 14 + Branch 25 + 26: Label + 27: 6(float) Load 19(n_dot_h) + 29: 6(float) Load 28(m) + 30: 6(float) FMul 27 29 + Store 17 30 + Branch 25 + 25: Label + 31: 6(float) Load 17 + 32: 7(fvec4) CompositeConstruct 10 15 31 10 + Store 9(r0) 32 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out new file mode 100644 index 00000000..336f70d4 --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out @@ -0,0 +1,886 @@ +hlsl.intrinsics.negative.comp +ERROR: 0:7: 'asdouble' : no matching overloaded function found +ERROR: 0:8: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:9: 'clip' : no matching overloaded function found +ERROR: 0:10: 'countbits' : no matching overloaded function found +ERROR: 0:11: 'cross' : no matching overloaded function found +ERROR: 0:12: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:13: 'ddx' : no matching overloaded function found +ERROR: 0:14: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:15: 'ddx_fine' : no matching overloaded function found +ERROR: 0:16: 'ddy' : no matching overloaded function found +ERROR: 0:17: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:18: 'ddy_fine' : no matching overloaded function found +ERROR: 0:19: 'determinant' : no matching overloaded function found +ERROR: 0:20: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:21: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:22: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:23: 'f16tof32' : no matching overloaded function found +ERROR: 0:24: 'firstbithigh' : no matching overloaded function found +ERROR: 0:25: 'firstbitlow' : no matching overloaded function found +ERROR: 0:26: 'fma' : no matching overloaded function found +ERROR: 0:27: 'fwidth' : no matching overloaded function found +ERROR: 0:28: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:29: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:30: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:31: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:32: 'InterlockedCompareExchange' : no matching overloaded function found +ERROR: 0:33: 'InterlockedExchange' : no matching overloaded function found +ERROR: 0:34: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:35: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:36: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:37: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:38: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:39: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:40: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:41: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:42: 'length' : no matching overloaded function found +ERROR: 0:43: 'msad4' : no matching overloaded function found +ERROR: 0:44: 'normalize' : no matching overloaded function found +ERROR: 0:45: 'reflect' : no matching overloaded function found +ERROR: 0:46: 'refract' : no matching overloaded function found +ERROR: 0:47: 'refract' : no matching overloaded function found +ERROR: 0:48: 'reversebits' : no matching overloaded function found +ERROR: 0:49: 'transpose' : no matching overloaded function found +ERROR: 0:60: 'GetRenderTargetSamplePosition' : no matching overloaded function found +ERROR: 0:69: 'asdouble' : no matching overloaded function found +ERROR: 0:70: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:71: 'countbits' : no matching overloaded function found +ERROR: 0:72: 'cross' : no matching overloaded function found +ERROR: 0:73: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:74: 'ddx' : no matching overloaded function found +ERROR: 0:75: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:76: 'ddx_fine' : no matching overloaded function found +ERROR: 0:77: 'ddy' : no matching overloaded function found +ERROR: 0:78: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:79: 'ddy_fine' : no matching overloaded function found +ERROR: 0:80: 'determinant' : no matching overloaded function found +ERROR: 0:81: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:82: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:83: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:84: 'f16tof32' : no matching overloaded function found +ERROR: 0:85: 'firstbithigh' : no matching overloaded function found +ERROR: 0:86: 'firstbitlow' : no matching overloaded function found +ERROR: 0:87: 'fma' : no matching overloaded function found +ERROR: 0:88: 'fwidth' : no matching overloaded function found +ERROR: 0:89: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:90: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:91: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:92: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:93: 'InterlockedCompareExchange' : no matching overloaded function found +ERROR: 0:94: 'InterlockedExchange' : no matching overloaded function found +ERROR: 0:95: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:96: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:97: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:98: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:99: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:100: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:101: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:102: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:103: 'noise' : no matching overloaded function found +ERROR: 0:104: 'reversebits' : no matching overloaded function found +ERROR: 0:105: 'transpose' : no matching overloaded function found +ERROR: 0:116: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:117: 'countbits' : no matching overloaded function found +ERROR: 0:118: 'ddx' : no matching overloaded function found +ERROR: 0:119: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:120: 'ddx_fine' : no matching overloaded function found +ERROR: 0:121: 'ddy' : no matching overloaded function found +ERROR: 0:122: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:123: 'ddy_fine' : no matching overloaded function found +ERROR: 0:124: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:125: 'determinant' : no matching overloaded function found +ERROR: 0:126: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:127: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:128: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:129: 'f16tof32' : no matching overloaded function found +ERROR: 0:130: 'firstbithigh' : no matching overloaded function found +ERROR: 0:131: 'firstbitlow' : no matching overloaded function found +ERROR: 0:132: 'fma' : no matching overloaded function found +ERROR: 0:133: 'fwidth' : no matching overloaded function found +ERROR: 0:134: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:135: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:136: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:137: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:138: 'InterlockedCompareExchange' : no matching overloaded function found +ERROR: 0:139: 'InterlockedExchange' : no matching overloaded function found +ERROR: 0:140: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:141: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:142: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:143: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:144: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:145: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:146: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:147: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:148: 'noise' : no matching overloaded function found +ERROR: 0:149: 'reversebits' : no matching overloaded function found +ERROR: 0:150: 'transpose' : no matching overloaded function found +ERROR: 0:161: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:162: 'countbits' : no matching overloaded function found +ERROR: 0:163: 'cross' : no matching overloaded function found +ERROR: 0:164: 'determinant' : no matching overloaded function found +ERROR: 0:165: 'ddx' : no matching overloaded function found +ERROR: 0:166: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:167: 'ddx_fine' : no matching overloaded function found +ERROR: 0:168: 'ddy' : no matching overloaded function found +ERROR: 0:169: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:170: 'ddy_fine' : no matching overloaded function found +ERROR: 0:171: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:172: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:173: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:174: 'f16tof32' : no matching overloaded function found +ERROR: 0:175: 'firstbithigh' : no matching overloaded function found +ERROR: 0:176: 'firstbitlow' : no matching overloaded function found +ERROR: 0:177: 'fma' : no matching overloaded function found +ERROR: 0:178: 'fwidth' : no matching overloaded function found +ERROR: 0:179: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:180: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:181: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:182: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:183: 'InterlockedCompareExchange' : no matching overloaded function found +ERROR: 0:184: 'InterlockedExchange' : no matching overloaded function found +ERROR: 0:185: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:186: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:187: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:188: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:189: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:190: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:191: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:192: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:193: 'noise' : no matching overloaded function found +ERROR: 0:194: 'reversebits' : no matching overloaded function found +ERROR: 0:195: 'transpose' : no matching overloaded function found +ERROR: 151 compilation errors. No code generated. + + +Shader version: 450 +local_size = (1, 1, 1) +ERROR: node is still EOpNull! +0:56 Function Definition: ComputeShaderFunction(f1;f1;f1;i1; (temp float) +0:2 Function Parameters: +0:2 'inF0' (in float) +0:2 'inF1' (in float) +0:2 'inF2' (in float) +0:2 'inI0' (in int) +0:? Sequence +0:7 Constant: +0:7 0.000000 +0:8 Constant: +0:8 0.000000 +0:9 Constant: +0:9 0.000000 +0:10 Constant: +0:10 0.000000 +0:11 Constant: +0:11 0.000000 +0:12 Constant: +0:12 0.000000 +0:13 Constant: +0:13 0.000000 +0:14 Constant: +0:14 0.000000 +0:15 Constant: +0:15 0.000000 +0:16 Constant: +0:16 0.000000 +0:17 Constant: +0:17 0.000000 +0:18 Constant: +0:18 0.000000 +0:19 Constant: +0:19 0.000000 +0:20 Constant: +0:20 0.000000 +0:21 Constant: +0:21 0.000000 +0:22 Constant: +0:22 0.000000 +0:23 Constant: +0:23 0.000000 +0:24 Constant: +0:24 0.000000 +0:25 Constant: +0:25 0.000000 +0:26 Constant: +0:26 0.000000 +0:27 Constant: +0:27 0.000000 +0:28 Constant: +0:28 0.000000 +0:29 Constant: +0:29 0.000000 +0:30 Constant: +0:30 0.000000 +0:31 Constant: +0:31 0.000000 +0:32 Constant: +0:32 0.000000 +0:33 Constant: +0:33 0.000000 +0:34 Constant: +0:34 0.000000 +0:35 Constant: +0:35 0.000000 +0:36 Constant: +0:36 0.000000 +0:37 Constant: +0:37 0.000000 +0:38 Constant: +0:38 0.000000 +0:39 Constant: +0:39 0.000000 +0:40 Constant: +0:40 0.000000 +0:41 Constant: +0:41 0.000000 +0:42 Constant: +0:42 0.000000 +0:43 Constant: +0:43 0.000000 +0:44 Constant: +0:44 0.000000 +0:45 Constant: +0:45 0.000000 +0:46 Constant: +0:46 0.000000 +0:47 Constant: +0:47 0.000000 +0:48 Constant: +0:48 0.000000 +0:49 Constant: +0:49 0.000000 +0:53 Branch: Return with expression +0:53 Constant: +0:53 0.000000 +0:65 Function Definition: ComputeShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float) +0:57 Function Parameters: +0:57 'inF0' (in 1-component vector of float) +0:57 'inF1' (in 1-component vector of float) +0:57 'inF2' (in 1-component vector of float) +0:57 'inI0' (in 1-component vector of int) +0:? Sequence +0:60 Constant: +0:60 0.000000 +0:62 Branch: Return with expression +0:62 Constant: +0:62 0.000000 +0:112 Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float) +0:66 Function Parameters: +0:66 'inF0' (in 2-component vector of float) +0:66 'inF1' (in 2-component vector of float) +0:66 'inF2' (in 2-component vector of float) +0:66 'inI0' (in 2-component vector of int) +0:? Sequence +0:69 Constant: +0:69 0.000000 +0:70 Constant: +0:70 0.000000 +0:71 Constant: +0:71 0.000000 +0:72 Constant: +0:72 0.000000 +0:73 Constant: +0:73 0.000000 +0:74 Constant: +0:74 0.000000 +0:75 Constant: +0:75 0.000000 +0:76 Constant: +0:76 0.000000 +0:77 Constant: +0:77 0.000000 +0:78 Constant: +0:78 0.000000 +0:79 Constant: +0:79 0.000000 +0:80 Constant: +0:80 0.000000 +0:81 Constant: +0:81 0.000000 +0:82 Constant: +0:82 0.000000 +0:83 Constant: +0:83 0.000000 +0:84 Constant: +0:84 0.000000 +0:85 Constant: +0:85 0.000000 +0:86 Constant: +0:86 0.000000 +0:87 Constant: +0:87 0.000000 +0:88 Constant: +0:88 0.000000 +0:89 Constant: +0:89 0.000000 +0:90 Constant: +0:90 0.000000 +0:91 Constant: +0:91 0.000000 +0:92 Constant: +0:92 0.000000 +0:93 Constant: +0:93 0.000000 +0:94 Constant: +0:94 0.000000 +0:95 Constant: +0:95 0.000000 +0:96 Constant: +0:96 0.000000 +0:97 Constant: +0:97 0.000000 +0:98 Constant: +0:98 0.000000 +0:99 Constant: +0:99 0.000000 +0:100 Constant: +0:100 0.000000 +0:101 Constant: +0:101 0.000000 +0:102 Constant: +0:102 0.000000 +0:103 Constant: +0:103 0.000000 +0:104 Constant: +0:104 0.000000 +0:105 Constant: +0:105 0.000000 +0:109 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:157 Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float) +0:113 Function Parameters: +0:113 'inF0' (in 3-component vector of float) +0:113 'inF1' (in 3-component vector of float) +0:113 'inF2' (in 3-component vector of float) +0:113 'inI0' (in 3-component vector of int) +0:? Sequence +0:116 Constant: +0:116 0.000000 +0:117 Constant: +0:117 0.000000 +0:118 Constant: +0:118 0.000000 +0:119 Constant: +0:119 0.000000 +0:120 Constant: +0:120 0.000000 +0:121 Constant: +0:121 0.000000 +0:122 Constant: +0:122 0.000000 +0:123 Constant: +0:123 0.000000 +0:124 Constant: +0:124 0.000000 +0:125 Constant: +0:125 0.000000 +0:126 Constant: +0:126 0.000000 +0:127 Constant: +0:127 0.000000 +0:128 Constant: +0:128 0.000000 +0:129 Constant: +0:129 0.000000 +0:130 Constant: +0:130 0.000000 +0:131 Constant: +0:131 0.000000 +0:132 Constant: +0:132 0.000000 +0:133 Constant: +0:133 0.000000 +0:134 Constant: +0:134 0.000000 +0:135 Constant: +0:135 0.000000 +0:136 Constant: +0:136 0.000000 +0:137 Constant: +0:137 0.000000 +0:138 Constant: +0:138 0.000000 +0:139 Constant: +0:139 0.000000 +0:140 Constant: +0:140 0.000000 +0:141 Constant: +0:141 0.000000 +0:142 Constant: +0:142 0.000000 +0:143 Constant: +0:143 0.000000 +0:144 Constant: +0:144 0.000000 +0:145 Constant: +0:145 0.000000 +0:146 Constant: +0:146 0.000000 +0:147 Constant: +0:147 0.000000 +0:148 Constant: +0:148 0.000000 +0:149 Constant: +0:149 0.000000 +0:150 Constant: +0:150 0.000000 +0:154 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:202 Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float) +0:158 Function Parameters: +0:158 'inF0' (in 4-component vector of float) +0:158 'inF1' (in 4-component vector of float) +0:158 'inF2' (in 4-component vector of float) +0:158 'inI0' (in 4-component vector of int) +0:? Sequence +0:161 Constant: +0:161 0.000000 +0:162 Constant: +0:162 0.000000 +0:163 Constant: +0:163 0.000000 +0:164 Constant: +0:164 0.000000 +0:165 Constant: +0:165 0.000000 +0:166 Constant: +0:166 0.000000 +0:167 Constant: +0:167 0.000000 +0:168 Constant: +0:168 0.000000 +0:169 Constant: +0:169 0.000000 +0:170 Constant: +0:170 0.000000 +0:171 Constant: +0:171 0.000000 +0:172 Constant: +0:172 0.000000 +0:173 Constant: +0:173 0.000000 +0:174 Constant: +0:174 0.000000 +0:175 Constant: +0:175 0.000000 +0:176 Constant: +0:176 0.000000 +0:177 Constant: +0:177 0.000000 +0:178 Constant: +0:178 0.000000 +0:179 Constant: +0:179 0.000000 +0:180 Constant: +0:180 0.000000 +0:181 Constant: +0:181 0.000000 +0:182 Constant: +0:182 0.000000 +0:183 Constant: +0:183 0.000000 +0:184 Constant: +0:184 0.000000 +0:185 Constant: +0:185 0.000000 +0:186 Constant: +0:186 0.000000 +0:187 Constant: +0:187 0.000000 +0:188 Constant: +0:188 0.000000 +0:189 Constant: +0:189 0.000000 +0:190 Constant: +0:190 0.000000 +0:191 Constant: +0:191 0.000000 +0:192 Constant: +0:192 0.000000 +0:193 Constant: +0:193 0.000000 +0:194 Constant: +0:194 0.000000 +0:195 Constant: +0:195 0.000000 +0:199 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? Linker Objects + + +Linked compute stage: + + +Shader version: 450 +local_size = (1, 1, 1) +ERROR: node is still EOpNull! +0:56 Function Definition: ComputeShaderFunction(f1;f1;f1;i1; (temp float) +0:2 Function Parameters: +0:2 'inF0' (in float) +0:2 'inF1' (in float) +0:2 'inF2' (in float) +0:2 'inI0' (in int) +0:? Sequence +0:7 Constant: +0:7 0.000000 +0:8 Constant: +0:8 0.000000 +0:9 Constant: +0:9 0.000000 +0:10 Constant: +0:10 0.000000 +0:11 Constant: +0:11 0.000000 +0:12 Constant: +0:12 0.000000 +0:13 Constant: +0:13 0.000000 +0:14 Constant: +0:14 0.000000 +0:15 Constant: +0:15 0.000000 +0:16 Constant: +0:16 0.000000 +0:17 Constant: +0:17 0.000000 +0:18 Constant: +0:18 0.000000 +0:19 Constant: +0:19 0.000000 +0:20 Constant: +0:20 0.000000 +0:21 Constant: +0:21 0.000000 +0:22 Constant: +0:22 0.000000 +0:23 Constant: +0:23 0.000000 +0:24 Constant: +0:24 0.000000 +0:25 Constant: +0:25 0.000000 +0:26 Constant: +0:26 0.000000 +0:27 Constant: +0:27 0.000000 +0:28 Constant: +0:28 0.000000 +0:29 Constant: +0:29 0.000000 +0:30 Constant: +0:30 0.000000 +0:31 Constant: +0:31 0.000000 +0:32 Constant: +0:32 0.000000 +0:33 Constant: +0:33 0.000000 +0:34 Constant: +0:34 0.000000 +0:35 Constant: +0:35 0.000000 +0:36 Constant: +0:36 0.000000 +0:37 Constant: +0:37 0.000000 +0:38 Constant: +0:38 0.000000 +0:39 Constant: +0:39 0.000000 +0:40 Constant: +0:40 0.000000 +0:41 Constant: +0:41 0.000000 +0:42 Constant: +0:42 0.000000 +0:43 Constant: +0:43 0.000000 +0:44 Constant: +0:44 0.000000 +0:45 Constant: +0:45 0.000000 +0:46 Constant: +0:46 0.000000 +0:47 Constant: +0:47 0.000000 +0:48 Constant: +0:48 0.000000 +0:49 Constant: +0:49 0.000000 +0:53 Branch: Return with expression +0:53 Constant: +0:53 0.000000 +0:65 Function Definition: ComputeShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float) +0:57 Function Parameters: +0:57 'inF0' (in 1-component vector of float) +0:57 'inF1' (in 1-component vector of float) +0:57 'inF2' (in 1-component vector of float) +0:57 'inI0' (in 1-component vector of int) +0:? Sequence +0:60 Constant: +0:60 0.000000 +0:62 Branch: Return with expression +0:62 Constant: +0:62 0.000000 +0:112 Function Definition: ComputeShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float) +0:66 Function Parameters: +0:66 'inF0' (in 2-component vector of float) +0:66 'inF1' (in 2-component vector of float) +0:66 'inF2' (in 2-component vector of float) +0:66 'inI0' (in 2-component vector of int) +0:? Sequence +0:69 Constant: +0:69 0.000000 +0:70 Constant: +0:70 0.000000 +0:71 Constant: +0:71 0.000000 +0:72 Constant: +0:72 0.000000 +0:73 Constant: +0:73 0.000000 +0:74 Constant: +0:74 0.000000 +0:75 Constant: +0:75 0.000000 +0:76 Constant: +0:76 0.000000 +0:77 Constant: +0:77 0.000000 +0:78 Constant: +0:78 0.000000 +0:79 Constant: +0:79 0.000000 +0:80 Constant: +0:80 0.000000 +0:81 Constant: +0:81 0.000000 +0:82 Constant: +0:82 0.000000 +0:83 Constant: +0:83 0.000000 +0:84 Constant: +0:84 0.000000 +0:85 Constant: +0:85 0.000000 +0:86 Constant: +0:86 0.000000 +0:87 Constant: +0:87 0.000000 +0:88 Constant: +0:88 0.000000 +0:89 Constant: +0:89 0.000000 +0:90 Constant: +0:90 0.000000 +0:91 Constant: +0:91 0.000000 +0:92 Constant: +0:92 0.000000 +0:93 Constant: +0:93 0.000000 +0:94 Constant: +0:94 0.000000 +0:95 Constant: +0:95 0.000000 +0:96 Constant: +0:96 0.000000 +0:97 Constant: +0:97 0.000000 +0:98 Constant: +0:98 0.000000 +0:99 Constant: +0:99 0.000000 +0:100 Constant: +0:100 0.000000 +0:101 Constant: +0:101 0.000000 +0:102 Constant: +0:102 0.000000 +0:103 Constant: +0:103 0.000000 +0:104 Constant: +0:104 0.000000 +0:105 Constant: +0:105 0.000000 +0:109 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:157 Function Definition: ComputeShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float) +0:113 Function Parameters: +0:113 'inF0' (in 3-component vector of float) +0:113 'inF1' (in 3-component vector of float) +0:113 'inF2' (in 3-component vector of float) +0:113 'inI0' (in 3-component vector of int) +0:? Sequence +0:116 Constant: +0:116 0.000000 +0:117 Constant: +0:117 0.000000 +0:118 Constant: +0:118 0.000000 +0:119 Constant: +0:119 0.000000 +0:120 Constant: +0:120 0.000000 +0:121 Constant: +0:121 0.000000 +0:122 Constant: +0:122 0.000000 +0:123 Constant: +0:123 0.000000 +0:124 Constant: +0:124 0.000000 +0:125 Constant: +0:125 0.000000 +0:126 Constant: +0:126 0.000000 +0:127 Constant: +0:127 0.000000 +0:128 Constant: +0:128 0.000000 +0:129 Constant: +0:129 0.000000 +0:130 Constant: +0:130 0.000000 +0:131 Constant: +0:131 0.000000 +0:132 Constant: +0:132 0.000000 +0:133 Constant: +0:133 0.000000 +0:134 Constant: +0:134 0.000000 +0:135 Constant: +0:135 0.000000 +0:136 Constant: +0:136 0.000000 +0:137 Constant: +0:137 0.000000 +0:138 Constant: +0:138 0.000000 +0:139 Constant: +0:139 0.000000 +0:140 Constant: +0:140 0.000000 +0:141 Constant: +0:141 0.000000 +0:142 Constant: +0:142 0.000000 +0:143 Constant: +0:143 0.000000 +0:144 Constant: +0:144 0.000000 +0:145 Constant: +0:145 0.000000 +0:146 Constant: +0:146 0.000000 +0:147 Constant: +0:147 0.000000 +0:148 Constant: +0:148 0.000000 +0:149 Constant: +0:149 0.000000 +0:150 Constant: +0:150 0.000000 +0:154 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:202 Function Definition: ComputeShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float) +0:158 Function Parameters: +0:158 'inF0' (in 4-component vector of float) +0:158 'inF1' (in 4-component vector of float) +0:158 'inF2' (in 4-component vector of float) +0:158 'inI0' (in 4-component vector of int) +0:? Sequence +0:161 Constant: +0:161 0.000000 +0:162 Constant: +0:162 0.000000 +0:163 Constant: +0:163 0.000000 +0:164 Constant: +0:164 0.000000 +0:165 Constant: +0:165 0.000000 +0:166 Constant: +0:166 0.000000 +0:167 Constant: +0:167 0.000000 +0:168 Constant: +0:168 0.000000 +0:169 Constant: +0:169 0.000000 +0:170 Constant: +0:170 0.000000 +0:171 Constant: +0:171 0.000000 +0:172 Constant: +0:172 0.000000 +0:173 Constant: +0:173 0.000000 +0:174 Constant: +0:174 0.000000 +0:175 Constant: +0:175 0.000000 +0:176 Constant: +0:176 0.000000 +0:177 Constant: +0:177 0.000000 +0:178 Constant: +0:178 0.000000 +0:179 Constant: +0:179 0.000000 +0:180 Constant: +0:180 0.000000 +0:181 Constant: +0:181 0.000000 +0:182 Constant: +0:182 0.000000 +0:183 Constant: +0:183 0.000000 +0:184 Constant: +0:184 0.000000 +0:185 Constant: +0:185 0.000000 +0:186 Constant: +0:186 0.000000 +0:187 Constant: +0:187 0.000000 +0:188 Constant: +0:188 0.000000 +0:189 Constant: +0:189 0.000000 +0:190 Constant: +0:190 0.000000 +0:191 Constant: +0:191 0.000000 +0:192 Constant: +0:192 0.000000 +0:193 Constant: +0:193 0.000000 +0:194 Constant: +0:194 0.000000 +0:195 Constant: +0:195 0.000000 +0:199 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:? Linker Objects + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/hlsl.intrinsics.negative.frag.out b/Test/baseResults/hlsl.intrinsics.negative.frag.out new file mode 100644 index 00000000..ebb651ee --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.negative.frag.out @@ -0,0 +1,702 @@ +hlsl.intrinsics.negative.frag +ERROR: 0:5: 'asdouble' : no matching overloaded function found +ERROR: 0:6: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:7: 'countbits' : no matching overloaded function found +ERROR: 0:8: 'cross' : no matching overloaded function found +ERROR: 0:9: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:10: 'determinant' : no matching overloaded function found +ERROR: 0:12: 'f16tof32' : no matching overloaded function found +ERROR: 0:13: 'firstbithigh' : no matching overloaded function found +ERROR: 0:14: 'firstbitlow' : no matching overloaded function found +ERROR: 0:15: 'fma' : no matching overloaded function found +ERROR: 0:23: 'length' : no matching overloaded function found +ERROR: 0:24: 'msad4' : no matching overloaded function found +ERROR: 0:25: 'normalize' : no matching overloaded function found +ERROR: 0:26: 'reflect' : no matching overloaded function found +ERROR: 0:27: 'refract' : no matching overloaded function found +ERROR: 0:28: 'refract' : no matching overloaded function found +ERROR: 0:29: 'reversebits' : no matching overloaded function found +ERROR: 0:30: 'transpose' : no matching overloaded function found +ERROR: 0:39: 'GetRenderTargetSamplePosition' : no matching overloaded function found +ERROR: 0:46: 'asdouble' : no matching overloaded function found +ERROR: 0:47: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:48: 'countbits' : no matching overloaded function found +ERROR: 0:49: 'cross' : no matching overloaded function found +ERROR: 0:50: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:51: 'determinant' : no matching overloaded function found +ERROR: 0:52: 'f16tof32' : no matching overloaded function found +ERROR: 0:53: 'firstbithigh' : no matching overloaded function found +ERROR: 0:54: 'firstbitlow' : no matching overloaded function found +ERROR: 0:55: 'fma' : no matching overloaded function found +ERROR: 0:56: 'reversebits' : no matching overloaded function found +ERROR: 0:57: 'transpose' : no matching overloaded function found +ERROR: 0:64: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:65: 'countbits' : no matching overloaded function found +ERROR: 0:66: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:67: 'determinant' : no matching overloaded function found +ERROR: 0:68: 'f16tof32' : no matching overloaded function found +ERROR: 0:69: 'firstbithigh' : no matching overloaded function found +ERROR: 0:70: 'firstbitlow' : no matching overloaded function found +ERROR: 0:71: 'fma' : no matching overloaded function found +ERROR: 0:72: 'reversebits' : no matching overloaded function found +ERROR: 0:73: 'transpose' : no matching overloaded function found +ERROR: 0:81: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:82: 'countbits' : no matching overloaded function found +ERROR: 0:83: 'cross' : no matching overloaded function found +ERROR: 0:84: 'determinant' : no matching overloaded function found +ERROR: 0:85: 'f16tof32' : no matching overloaded function found +ERROR: 0:86: 'firstbithigh' : no matching overloaded function found +ERROR: 0:87: 'firstbitlow' : no matching overloaded function found +ERROR: 0:88: 'fma' : no matching overloaded function found +ERROR: 0:89: 'reversebits' : no matching overloaded function found +ERROR: 0:90: 'transpose' : no matching overloaded function found +ERROR: 0:118: 'countbits' : no matching overloaded function found +ERROR: 0:118: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:118: 'cross' : no matching overloaded function found +ERROR: 0:118: 'f16tof32' : no matching overloaded function found +ERROR: 0:118: 'firstbithigh' : no matching overloaded function found +ERROR: 0:118: 'firstbitlow' : no matching overloaded function found +ERROR: 0:118: 'fma' : no matching overloaded function found +ERROR: 0:118: 'reversebits' : no matching overloaded function found +ERROR: 0:118: 'length' : no matching overloaded function found +ERROR: 0:118: 'noise' : no matching overloaded function found +ERROR: 0:118: 'normalize' : no matching overloaded function found +ERROR: 0:118: 'reflect' : no matching overloaded function found +ERROR: 0:118: 'refract' : no matching overloaded function found +ERROR: 0:118: 'reversebits' : no matching overloaded function found +ERROR: 0:126: 'countbits' : no matching overloaded function found +ERROR: 0:126: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:126: 'cross' : no matching overloaded function found +ERROR: 0:126: 'f16tof32' : no matching overloaded function found +ERROR: 0:126: 'firstbithigh' : no matching overloaded function found +ERROR: 0:126: 'firstbitlow' : no matching overloaded function found +ERROR: 0:126: 'fma' : no matching overloaded function found +ERROR: 0:126: 'reversebits' : no matching overloaded function found +ERROR: 0:126: 'length' : no matching overloaded function found +ERROR: 0:126: 'noise' : no matching overloaded function found +ERROR: 0:126: 'normalize' : no matching overloaded function found +ERROR: 0:126: 'reflect' : no matching overloaded function found +ERROR: 0:126: 'refract' : no matching overloaded function found +ERROR: 0:126: 'reversebits' : no matching overloaded function found +ERROR: 0:134: 'countbits' : no matching overloaded function found +ERROR: 0:134: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:134: 'cross' : no matching overloaded function found +ERROR: 0:134: 'f16tof32' : no matching overloaded function found +ERROR: 0:134: 'firstbithigh' : no matching overloaded function found +ERROR: 0:134: 'firstbitlow' : no matching overloaded function found +ERROR: 0:134: 'fma' : no matching overloaded function found +ERROR: 0:134: 'reversebits' : no matching overloaded function found +ERROR: 0:134: 'length' : no matching overloaded function found +ERROR: 0:134: 'noise' : no matching overloaded function found +ERROR: 0:134: 'normalize' : no matching overloaded function found +ERROR: 0:134: 'reflect' : no matching overloaded function found +ERROR: 0:134: 'refract' : no matching overloaded function found +ERROR: 0:134: 'reversebits' : no matching overloaded function found +ERROR: 93 compilation errors. No code generated. + + +Shader version: 450 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:35 Function Definition: PixelShaderFunction(f1;f1;f1;i1; (temp float) +0:2 Function Parameters: +0:2 'inF0' (in float) +0:2 'inF1' (in float) +0:2 'inF2' (in float) +0:2 'inI0' (in int) +0:? Sequence +0:5 Constant: +0:5 0.000000 +0:6 Constant: +0:6 0.000000 +0:7 Constant: +0:7 0.000000 +0:8 Constant: +0:8 0.000000 +0:9 Constant: +0:9 0.000000 +0:10 Constant: +0:10 0.000000 +0:12 Constant: +0:12 0.000000 +0:13 Constant: +0:13 0.000000 +0:14 Constant: +0:14 0.000000 +0:15 Constant: +0:15 0.000000 +0:23 Constant: +0:23 0.000000 +0:24 Constant: +0:24 0.000000 +0:25 Constant: +0:25 0.000000 +0:26 Constant: +0:26 0.000000 +0:27 Constant: +0:27 0.000000 +0:28 Constant: +0:28 0.000000 +0:29 Constant: +0:29 0.000000 +0:30 Constant: +0:30 0.000000 +0:32 Branch: Return with expression +0:32 Constant: +0:32 0.000000 +0:44 Function Definition: PixelShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float) +0:36 Function Parameters: +0:36 'inF0' (in 1-component vector of float) +0:36 'inF1' (in 1-component vector of float) +0:36 'inF2' (in 1-component vector of float) +0:36 'inI0' (in 1-component vector of int) +0:? Sequence +0:39 Constant: +0:39 0.000000 +0:41 Branch: Return with expression +0:41 Constant: +0:41 0.000000 +0:62 Function Definition: PixelShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float) +0:45 Function Parameters: +0:45 'inF0' (in 2-component vector of float) +0:45 'inF1' (in 2-component vector of float) +0:45 'inF2' (in 2-component vector of float) +0:45 'inI0' (in 2-component vector of int) +0:? Sequence +0:46 Constant: +0:46 0.000000 +0:47 Constant: +0:47 0.000000 +0:48 Constant: +0:48 0.000000 +0:49 Constant: +0:49 0.000000 +0:50 Constant: +0:50 0.000000 +0:51 Constant: +0:51 0.000000 +0:52 Constant: +0:52 0.000000 +0:53 Constant: +0:53 0.000000 +0:54 Constant: +0:54 0.000000 +0:55 Constant: +0:55 0.000000 +0:56 Constant: +0:56 0.000000 +0:57 Constant: +0:57 0.000000 +0:59 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:79 Function Definition: PixelShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float) +0:63 Function Parameters: +0:63 'inF0' (in 3-component vector of float) +0:63 'inF1' (in 3-component vector of float) +0:63 'inF2' (in 3-component vector of float) +0:63 'inI0' (in 3-component vector of int) +0:? Sequence +0:64 Constant: +0:64 0.000000 +0:65 Constant: +0:65 0.000000 +0:66 Constant: +0:66 0.000000 +0:67 Constant: +0:67 0.000000 +0:68 Constant: +0:68 0.000000 +0:69 Constant: +0:69 0.000000 +0:70 Constant: +0:70 0.000000 +0:71 Constant: +0:71 0.000000 +0:72 Constant: +0:72 0.000000 +0:73 Constant: +0:73 0.000000 +0:76 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:115 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float) +0:80 Function Parameters: +0:80 'inF0' (in 4-component vector of float) +0:80 'inF1' (in 4-component vector of float) +0:80 'inF2' (in 4-component vector of float) +0:80 'inI0' (in 4-component vector of int) +0:? Sequence +0:81 Constant: +0:81 0.000000 +0:82 Constant: +0:82 0.000000 +0:83 Constant: +0:83 0.000000 +0:84 Constant: +0:84 0.000000 +0:85 Constant: +0:85 0.000000 +0:86 Constant: +0:86 0.000000 +0:87 Constant: +0:87 0.000000 +0:88 Constant: +0:88 0.000000 +0:89 Constant: +0:89 0.000000 +0:90 Constant: +0:90 0.000000 +0:92 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:123 Function Definition: PixelShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float) +0:116 Function Parameters: +0:116 'inF0' (in 2X2 matrix of float) +0:116 'inF1' (in 2X2 matrix of float) +0:116 'inF2' (in 2X2 matrix of float) +0:? Sequence +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:120 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:131 Function Definition: PixelShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float) +0:124 Function Parameters: +0:124 'inF0' (in 3X3 matrix of float) +0:124 'inF1' (in 3X3 matrix of float) +0:124 'inF2' (in 3X3 matrix of float) +0:? Sequence +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:128 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:138 Function Definition: PixelShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float) +0:132 Function Parameters: +0:132 'inF0' (in 4X4 matrix of float) +0:132 'inF1' (in 4X4 matrix of float) +0:132 'inF2' (in 4X4 matrix of float) +0:? Sequence +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:136 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +ERROR: node is still EOpNull! +0:35 Function Definition: PixelShaderFunction(f1;f1;f1;i1; (temp float) +0:2 Function Parameters: +0:2 'inF0' (in float) +0:2 'inF1' (in float) +0:2 'inF2' (in float) +0:2 'inI0' (in int) +0:? Sequence +0:5 Constant: +0:5 0.000000 +0:6 Constant: +0:6 0.000000 +0:7 Constant: +0:7 0.000000 +0:8 Constant: +0:8 0.000000 +0:9 Constant: +0:9 0.000000 +0:10 Constant: +0:10 0.000000 +0:12 Constant: +0:12 0.000000 +0:13 Constant: +0:13 0.000000 +0:14 Constant: +0:14 0.000000 +0:15 Constant: +0:15 0.000000 +0:23 Constant: +0:23 0.000000 +0:24 Constant: +0:24 0.000000 +0:25 Constant: +0:25 0.000000 +0:26 Constant: +0:26 0.000000 +0:27 Constant: +0:27 0.000000 +0:28 Constant: +0:28 0.000000 +0:29 Constant: +0:29 0.000000 +0:30 Constant: +0:30 0.000000 +0:32 Branch: Return with expression +0:32 Constant: +0:32 0.000000 +0:44 Function Definition: PixelShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float) +0:36 Function Parameters: +0:36 'inF0' (in 1-component vector of float) +0:36 'inF1' (in 1-component vector of float) +0:36 'inF2' (in 1-component vector of float) +0:36 'inI0' (in 1-component vector of int) +0:? Sequence +0:39 Constant: +0:39 0.000000 +0:41 Branch: Return with expression +0:41 Constant: +0:41 0.000000 +0:62 Function Definition: PixelShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float) +0:45 Function Parameters: +0:45 'inF0' (in 2-component vector of float) +0:45 'inF1' (in 2-component vector of float) +0:45 'inF2' (in 2-component vector of float) +0:45 'inI0' (in 2-component vector of int) +0:? Sequence +0:46 Constant: +0:46 0.000000 +0:47 Constant: +0:47 0.000000 +0:48 Constant: +0:48 0.000000 +0:49 Constant: +0:49 0.000000 +0:50 Constant: +0:50 0.000000 +0:51 Constant: +0:51 0.000000 +0:52 Constant: +0:52 0.000000 +0:53 Constant: +0:53 0.000000 +0:54 Constant: +0:54 0.000000 +0:55 Constant: +0:55 0.000000 +0:56 Constant: +0:56 0.000000 +0:57 Constant: +0:57 0.000000 +0:59 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:79 Function Definition: PixelShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float) +0:63 Function Parameters: +0:63 'inF0' (in 3-component vector of float) +0:63 'inF1' (in 3-component vector of float) +0:63 'inF2' (in 3-component vector of float) +0:63 'inI0' (in 3-component vector of int) +0:? Sequence +0:64 Constant: +0:64 0.000000 +0:65 Constant: +0:65 0.000000 +0:66 Constant: +0:66 0.000000 +0:67 Constant: +0:67 0.000000 +0:68 Constant: +0:68 0.000000 +0:69 Constant: +0:69 0.000000 +0:70 Constant: +0:70 0.000000 +0:71 Constant: +0:71 0.000000 +0:72 Constant: +0:72 0.000000 +0:73 Constant: +0:73 0.000000 +0:76 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:115 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float) +0:80 Function Parameters: +0:80 'inF0' (in 4-component vector of float) +0:80 'inF1' (in 4-component vector of float) +0:80 'inF2' (in 4-component vector of float) +0:80 'inI0' (in 4-component vector of int) +0:? Sequence +0:81 Constant: +0:81 0.000000 +0:82 Constant: +0:82 0.000000 +0:83 Constant: +0:83 0.000000 +0:84 Constant: +0:84 0.000000 +0:85 Constant: +0:85 0.000000 +0:86 Constant: +0:86 0.000000 +0:87 Constant: +0:87 0.000000 +0:88 Constant: +0:88 0.000000 +0:89 Constant: +0:89 0.000000 +0:90 Constant: +0:90 0.000000 +0:92 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:123 Function Definition: PixelShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float) +0:116 Function Parameters: +0:116 'inF0' (in 2X2 matrix of float) +0:116 'inF1' (in 2X2 matrix of float) +0:116 'inF2' (in 2X2 matrix of float) +0:? Sequence +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:118 Constant: +0:118 0.000000 +0:120 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:131 Function Definition: PixelShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float) +0:124 Function Parameters: +0:124 'inF0' (in 3X3 matrix of float) +0:124 'inF1' (in 3X3 matrix of float) +0:124 'inF2' (in 3X3 matrix of float) +0:? Sequence +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:126 Constant: +0:126 0.000000 +0:128 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:138 Function Definition: PixelShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float) +0:132 Function Parameters: +0:132 'inF0' (in 4X4 matrix of float) +0:132 'inF1' (in 4X4 matrix of float) +0:132 'inF2' (in 4X4 matrix of float) +0:? Sequence +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:134 Constant: +0:134 0.000000 +0:136 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? Linker Objects + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out new file mode 100644 index 00000000..b24ef698 --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out @@ -0,0 +1,1424 @@ +hlsl.intrinsics.negative.vert +ERROR: 0:18: 'AllMemoryBarrier' : no matching overloaded function found +ERROR: 0:19: 'AllMemoryBarrierWithGroupSync' : no matching overloaded function found +ERROR: 0:20: 'asdouble' : no matching overloaded function found +ERROR: 0:21: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:22: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:23: 'clip' : no matching overloaded function found +ERROR: 0:24: 'countbits' : no matching overloaded function found +ERROR: 0:25: 'cross' : no matching overloaded function found +ERROR: 0:26: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:27: 'DeviceMemoryBarrier' : no matching overloaded function found +ERROR: 0:28: 'DeviceMemoryBarrierWithGroupSync' : no matching overloaded function found +ERROR: 0:29: 'ddx' : no matching overloaded function found +ERROR: 0:30: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:31: 'ddx_fine' : no matching overloaded function found +ERROR: 0:32: 'ddy' : no matching overloaded function found +ERROR: 0:33: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:34: 'ddy_fine' : no matching overloaded function found +ERROR: 0:35: 'determinant' : no matching overloaded function found +ERROR: 0:36: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:37: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:38: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:39: 'f16tof32' : no matching overloaded function found +ERROR: 0:40: 'firstbithigh' : no matching overloaded function found +ERROR: 0:41: 'firstbitlow' : no matching overloaded function found +ERROR: 0:42: 'fma' : no matching overloaded function found +ERROR: 0:43: 'fwidth' : no matching overloaded function found +ERROR: 0:44: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:45: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:46: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:47: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:48: 'InterlockedCompareExchange' : no matching overloaded function found +ERROR: 0:49: 'InterlockedExchange' : no matching overloaded function found +ERROR: 0:50: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:51: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:52: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:53: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:54: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:55: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:56: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:57: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:58: 'GroupMemoryBarrier' : no matching overloaded function found +ERROR: 0:59: 'GroupMemoryBarrierWithGroupSync' : no matching overloaded function found +ERROR: 0:60: 'length' : no matching overloaded function found +ERROR: 0:61: 'msad4' : no matching overloaded function found +ERROR: 0:62: 'normalize' : no matching overloaded function found +ERROR: 0:63: 'reflect' : no matching overloaded function found +ERROR: 0:64: 'refract' : no matching overloaded function found +ERROR: 0:65: 'refract' : no matching overloaded function found +ERROR: 0:66: 'reversebits' : no matching overloaded function found +ERROR: 0:67: 'transpose' : no matching overloaded function found +ERROR: 0:78: 'GetRenderTargetSamplePosition' : no matching overloaded function found +ERROR: 0:87: 'asdouble' : no matching overloaded function found +ERROR: 0:88: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:89: 'countbits' : no matching overloaded function found +ERROR: 0:90: 'cross' : no matching overloaded function found +ERROR: 0:91: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:92: 'ddx' : no matching overloaded function found +ERROR: 0:93: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:94: 'ddx_fine' : no matching overloaded function found +ERROR: 0:95: 'ddy' : no matching overloaded function found +ERROR: 0:96: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:97: 'ddy_fine' : no matching overloaded function found +ERROR: 0:98: 'determinant' : no matching overloaded function found +ERROR: 0:99: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:100: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:101: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:102: 'f16tof32' : no matching overloaded function found +ERROR: 0:103: 'firstbithigh' : no matching overloaded function found +ERROR: 0:104: 'firstbitlow' : no matching overloaded function found +ERROR: 0:105: 'fma' : no matching overloaded function found +ERROR: 0:106: 'fwidth' : no matching overloaded function found +ERROR: 0:107: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:108: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:109: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:110: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:111: 'InterlockedCompareExchange' : no matching overloaded function found +ERROR: 0:112: 'InterlockedExchange' : no matching overloaded function found +ERROR: 0:113: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:114: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:115: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:116: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:117: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:118: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:119: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:120: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:121: 'noise' : no matching overloaded function found +ERROR: 0:122: 'reversebits' : no matching overloaded function found +ERROR: 0:123: 'transpose' : no matching overloaded function found +ERROR: 0:134: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:135: 'countbits' : no matching overloaded function found +ERROR: 0:136: 'ddx' : no matching overloaded function found +ERROR: 0:137: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:138: 'ddx_fine' : no matching overloaded function found +ERROR: 0:139: 'ddy' : no matching overloaded function found +ERROR: 0:140: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:141: 'ddy_fine' : no matching overloaded function found +ERROR: 0:142: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:143: 'determinant' : no matching overloaded function found +ERROR: 0:144: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:145: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:146: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:147: 'f16tof32' : no matching overloaded function found +ERROR: 0:148: 'firstbithigh' : no matching overloaded function found +ERROR: 0:149: 'firstbitlow' : no matching overloaded function found +ERROR: 0:150: 'fma' : no matching overloaded function found +ERROR: 0:151: 'fwidth' : no matching overloaded function found +ERROR: 0:152: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:153: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:154: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:155: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:156: 'InterlockedCompareExchange' : no matching overloaded function found +ERROR: 0:157: 'InterlockedExchange' : no matching overloaded function found +ERROR: 0:158: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:159: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:160: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:161: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:162: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:163: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:164: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:165: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:166: 'noise' : no matching overloaded function found +ERROR: 0:167: 'reversebits' : no matching overloaded function found +ERROR: 0:168: 'transpose' : no matching overloaded function found +ERROR: 0:179: 'CheckAccessFullyMapped' : no matching overloaded function found +ERROR: 0:180: 'countbits' : no matching overloaded function found +ERROR: 0:181: 'cross' : no matching overloaded function found +ERROR: 0:182: 'determinant' : no matching overloaded function found +ERROR: 0:183: 'ddx' : no matching overloaded function found +ERROR: 0:184: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:185: 'ddx_fine' : no matching overloaded function found +ERROR: 0:186: 'ddy' : no matching overloaded function found +ERROR: 0:187: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:188: 'ddy_fine' : no matching overloaded function found +ERROR: 0:189: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:190: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:191: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:192: 'f16tof32' : no matching overloaded function found +ERROR: 0:193: 'firstbithigh' : no matching overloaded function found +ERROR: 0:194: 'firstbitlow' : no matching overloaded function found +ERROR: 0:195: 'fma' : no matching overloaded function found +ERROR: 0:196: 'fwidth' : no matching overloaded function found +ERROR: 0:197: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:198: 'InterlockedAdd' : no matching overloaded function found +ERROR: 0:199: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:200: 'InterlockedAnd' : no matching overloaded function found +ERROR: 0:201: 'InterlockedCompareExchange' : no matching overloaded function found +ERROR: 0:202: 'InterlockedExchange' : no matching overloaded function found +ERROR: 0:203: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:204: 'InterlockedMax' : no matching overloaded function found +ERROR: 0:205: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:206: 'InterlockedMin' : no matching overloaded function found +ERROR: 0:207: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:208: 'InterlockedOr' : no matching overloaded function found +ERROR: 0:209: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:210: 'InterlockedXor' : no matching overloaded function found +ERROR: 0:211: 'noise' : no matching overloaded function found +ERROR: 0:212: 'reversebits' : no matching overloaded function found +ERROR: 0:213: 'transpose' : no matching overloaded function found +ERROR: 0:254: 'countbits' : no matching overloaded function found +ERROR: 0:254: 'cross' : no matching overloaded function found +ERROR: 0:254: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:254: 'ddx' : no matching overloaded function found +ERROR: 0:254: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:254: 'ddx_fine' : no matching overloaded function found +ERROR: 0:254: 'ddy' : no matching overloaded function found +ERROR: 0:254: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:254: 'ddy_fine' : no matching overloaded function found +ERROR: 0:254: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:254: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:254: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:254: 'f16tof32' : no matching overloaded function found +ERROR: 0:254: 'firstbithigh' : no matching overloaded function found +ERROR: 0:254: 'firstbitlow' : no matching overloaded function found +ERROR: 0:254: 'fma' : no matching overloaded function found +ERROR: 0:254: 'fwidth' : no matching overloaded function found +ERROR: 0:254: 'noise' : no matching overloaded function found +ERROR: 0:254: 'reversebits' : no matching overloaded function found +ERROR: 0:254: 'length' : no matching overloaded function found +ERROR: 0:254: 'noise' : no matching overloaded function found +ERROR: 0:254: 'normalize' : no matching overloaded function found +ERROR: 0:254: 'reflect' : no matching overloaded function found +ERROR: 0:254: 'refract' : no matching overloaded function found +ERROR: 0:254: 'reversebits' : no matching overloaded function found +ERROR: 0:262: 'countbits' : no matching overloaded function found +ERROR: 0:262: 'cross' : no matching overloaded function found +ERROR: 0:262: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:262: 'ddx' : no matching overloaded function found +ERROR: 0:262: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:262: 'ddx_fine' : no matching overloaded function found +ERROR: 0:262: 'ddy' : no matching overloaded function found +ERROR: 0:262: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:262: 'ddy_fine' : no matching overloaded function found +ERROR: 0:262: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:262: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:262: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:262: 'f16tof32' : no matching overloaded function found +ERROR: 0:262: 'firstbithigh' : no matching overloaded function found +ERROR: 0:262: 'firstbitlow' : no matching overloaded function found +ERROR: 0:262: 'fma' : no matching overloaded function found +ERROR: 0:262: 'fwidth' : no matching overloaded function found +ERROR: 0:262: 'noise' : no matching overloaded function found +ERROR: 0:262: 'reversebits' : no matching overloaded function found +ERROR: 0:262: 'length' : no matching overloaded function found +ERROR: 0:262: 'noise' : no matching overloaded function found +ERROR: 0:262: 'normalize' : no matching overloaded function found +ERROR: 0:262: 'reflect' : no matching overloaded function found +ERROR: 0:262: 'refract' : no matching overloaded function found +ERROR: 0:262: 'reversebits' : no matching overloaded function found +ERROR: 0:270: 'countbits' : no matching overloaded function found +ERROR: 0:270: 'cross' : no matching overloaded function found +ERROR: 0:270: 'D3DCOLORtoUBYTE4' : no matching overloaded function found +ERROR: 0:270: 'ddx' : no matching overloaded function found +ERROR: 0:270: 'ddx_coarse' : no matching overloaded function found +ERROR: 0:270: 'ddx_fine' : no matching overloaded function found +ERROR: 0:270: 'ddy' : no matching overloaded function found +ERROR: 0:270: 'ddy_coarse' : no matching overloaded function found +ERROR: 0:270: 'ddy_fine' : no matching overloaded function found +ERROR: 0:270: 'EvaluateAttributeAtCentroid' : no matching overloaded function found +ERROR: 0:270: 'EvaluateAttributeAtSample' : no matching overloaded function found +ERROR: 0:270: 'EvaluateAttributeSnapped' : no matching overloaded function found +ERROR: 0:270: 'f16tof32' : no matching overloaded function found +ERROR: 0:270: 'firstbithigh' : no matching overloaded function found +ERROR: 0:270: 'firstbitlow' : no matching overloaded function found +ERROR: 0:270: 'fma' : no matching overloaded function found +ERROR: 0:270: 'fwidth' : no matching overloaded function found +ERROR: 0:270: 'noise' : no matching overloaded function found +ERROR: 0:270: 'reversebits' : no matching overloaded function found +ERROR: 0:270: 'length' : no matching overloaded function found +ERROR: 0:270: 'noise' : no matching overloaded function found +ERROR: 0:270: 'normalize' : no matching overloaded function found +ERROR: 0:270: 'reflect' : no matching overloaded function found +ERROR: 0:270: 'refract' : no matching overloaded function found +ERROR: 0:270: 'reversebits' : no matching overloaded function found +ERROR: 233 compilation errors. No code generated. + + +Shader version: 450 +ERROR: node is still EOpNull! +0:74 Function Definition: VertexShaderFunction(f1;f1;f1;i1; (temp float) +0:15 Function Parameters: +0:15 'inF0' (in float) +0:15 'inF1' (in float) +0:15 'inF2' (in float) +0:15 'inI0' (in int) +0:? Sequence +0:18 Constant: +0:18 0.000000 +0:19 Constant: +0:19 0.000000 +0:20 Constant: +0:20 0.000000 +0:21 Constant: +0:21 0.000000 +0:22 Constant: +0:22 0.000000 +0:23 Constant: +0:23 0.000000 +0:24 Constant: +0:24 0.000000 +0:25 Constant: +0:25 0.000000 +0:26 Constant: +0:26 0.000000 +0:27 Constant: +0:27 0.000000 +0:28 Constant: +0:28 0.000000 +0:29 Constant: +0:29 0.000000 +0:30 Constant: +0:30 0.000000 +0:31 Constant: +0:31 0.000000 +0:32 Constant: +0:32 0.000000 +0:33 Constant: +0:33 0.000000 +0:34 Constant: +0:34 0.000000 +0:35 Constant: +0:35 0.000000 +0:36 Constant: +0:36 0.000000 +0:37 Constant: +0:37 0.000000 +0:38 Constant: +0:38 0.000000 +0:39 Constant: +0:39 0.000000 +0:40 Constant: +0:40 0.000000 +0:41 Constant: +0:41 0.000000 +0:42 Constant: +0:42 0.000000 +0:43 Constant: +0:43 0.000000 +0:44 Constant: +0:44 0.000000 +0:45 Constant: +0:45 0.000000 +0:46 Constant: +0:46 0.000000 +0:47 Constant: +0:47 0.000000 +0:48 Constant: +0:48 0.000000 +0:49 Constant: +0:49 0.000000 +0:50 Constant: +0:50 0.000000 +0:51 Constant: +0:51 0.000000 +0:52 Constant: +0:52 0.000000 +0:53 Constant: +0:53 0.000000 +0:54 Constant: +0:54 0.000000 +0:55 Constant: +0:55 0.000000 +0:56 Constant: +0:56 0.000000 +0:57 Constant: +0:57 0.000000 +0:58 Constant: +0:58 0.000000 +0:59 Constant: +0:59 0.000000 +0:60 Constant: +0:60 0.000000 +0:61 Constant: +0:61 0.000000 +0:62 Constant: +0:62 0.000000 +0:63 Constant: +0:63 0.000000 +0:64 Constant: +0:64 0.000000 +0:65 Constant: +0:65 0.000000 +0:66 Constant: +0:66 0.000000 +0:67 Constant: +0:67 0.000000 +0:71 Branch: Return with expression +0:71 Constant: +0:71 0.000000 +0:83 Function Definition: VertexShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float) +0:75 Function Parameters: +0:75 'inF0' (in 1-component vector of float) +0:75 'inF1' (in 1-component vector of float) +0:75 'inF2' (in 1-component vector of float) +0:75 'inI0' (in 1-component vector of int) +0:? Sequence +0:78 Constant: +0:78 0.000000 +0:80 Branch: Return with expression +0:80 Constant: +0:80 0.000000 +0:130 Function Definition: VertexShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float) +0:84 Function Parameters: +0:84 'inF0' (in 2-component vector of float) +0:84 'inF1' (in 2-component vector of float) +0:84 'inF2' (in 2-component vector of float) +0:84 'inI0' (in 2-component vector of int) +0:? Sequence +0:87 Constant: +0:87 0.000000 +0:88 Constant: +0:88 0.000000 +0:89 Constant: +0:89 0.000000 +0:90 Constant: +0:90 0.000000 +0:91 Constant: +0:91 0.000000 +0:92 Constant: +0:92 0.000000 +0:93 Constant: +0:93 0.000000 +0:94 Constant: +0:94 0.000000 +0:95 Constant: +0:95 0.000000 +0:96 Constant: +0:96 0.000000 +0:97 Constant: +0:97 0.000000 +0:98 Constant: +0:98 0.000000 +0:99 Constant: +0:99 0.000000 +0:100 Constant: +0:100 0.000000 +0:101 Constant: +0:101 0.000000 +0:102 Constant: +0:102 0.000000 +0:103 Constant: +0:103 0.000000 +0:104 Constant: +0:104 0.000000 +0:105 Constant: +0:105 0.000000 +0:106 Constant: +0:106 0.000000 +0:107 Constant: +0:107 0.000000 +0:108 Constant: +0:108 0.000000 +0:109 Constant: +0:109 0.000000 +0:110 Constant: +0:110 0.000000 +0:111 Constant: +0:111 0.000000 +0:112 Constant: +0:112 0.000000 +0:113 Constant: +0:113 0.000000 +0:114 Constant: +0:114 0.000000 +0:115 Constant: +0:115 0.000000 +0:116 Constant: +0:116 0.000000 +0:117 Constant: +0:117 0.000000 +0:118 Constant: +0:118 0.000000 +0:119 Constant: +0:119 0.000000 +0:120 Constant: +0:120 0.000000 +0:121 Constant: +0:121 0.000000 +0:122 Constant: +0:122 0.000000 +0:123 Constant: +0:123 0.000000 +0:127 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:175 Function Definition: VertexShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float) +0:131 Function Parameters: +0:131 'inF0' (in 3-component vector of float) +0:131 'inF1' (in 3-component vector of float) +0:131 'inF2' (in 3-component vector of float) +0:131 'inI0' (in 3-component vector of int) +0:? Sequence +0:134 Constant: +0:134 0.000000 +0:135 Constant: +0:135 0.000000 +0:136 Constant: +0:136 0.000000 +0:137 Constant: +0:137 0.000000 +0:138 Constant: +0:138 0.000000 +0:139 Constant: +0:139 0.000000 +0:140 Constant: +0:140 0.000000 +0:141 Constant: +0:141 0.000000 +0:142 Constant: +0:142 0.000000 +0:143 Constant: +0:143 0.000000 +0:144 Constant: +0:144 0.000000 +0:145 Constant: +0:145 0.000000 +0:146 Constant: +0:146 0.000000 +0:147 Constant: +0:147 0.000000 +0:148 Constant: +0:148 0.000000 +0:149 Constant: +0:149 0.000000 +0:150 Constant: +0:150 0.000000 +0:151 Constant: +0:151 0.000000 +0:152 Constant: +0:152 0.000000 +0:153 Constant: +0:153 0.000000 +0:154 Constant: +0:154 0.000000 +0:155 Constant: +0:155 0.000000 +0:156 Constant: +0:156 0.000000 +0:157 Constant: +0:157 0.000000 +0:158 Constant: +0:158 0.000000 +0:159 Constant: +0:159 0.000000 +0:160 Constant: +0:160 0.000000 +0:161 Constant: +0:161 0.000000 +0:162 Constant: +0:162 0.000000 +0:163 Constant: +0:163 0.000000 +0:164 Constant: +0:164 0.000000 +0:165 Constant: +0:165 0.000000 +0:166 Constant: +0:166 0.000000 +0:167 Constant: +0:167 0.000000 +0:168 Constant: +0:168 0.000000 +0:172 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:251 Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float) +0:176 Function Parameters: +0:176 'inF0' (in 4-component vector of float) +0:176 'inF1' (in 4-component vector of float) +0:176 'inF2' (in 4-component vector of float) +0:176 'inI0' (in 4-component vector of int) +0:? Sequence +0:179 Constant: +0:179 0.000000 +0:180 Constant: +0:180 0.000000 +0:181 Constant: +0:181 0.000000 +0:182 Constant: +0:182 0.000000 +0:183 Constant: +0:183 0.000000 +0:184 Constant: +0:184 0.000000 +0:185 Constant: +0:185 0.000000 +0:186 Constant: +0:186 0.000000 +0:187 Constant: +0:187 0.000000 +0:188 Constant: +0:188 0.000000 +0:189 Constant: +0:189 0.000000 +0:190 Constant: +0:190 0.000000 +0:191 Constant: +0:191 0.000000 +0:192 Constant: +0:192 0.000000 +0:193 Constant: +0:193 0.000000 +0:194 Constant: +0:194 0.000000 +0:195 Constant: +0:195 0.000000 +0:196 Constant: +0:196 0.000000 +0:197 Constant: +0:197 0.000000 +0:198 Constant: +0:198 0.000000 +0:199 Constant: +0:199 0.000000 +0:200 Constant: +0:200 0.000000 +0:201 Constant: +0:201 0.000000 +0:202 Constant: +0:202 0.000000 +0:203 Constant: +0:203 0.000000 +0:204 Constant: +0:204 0.000000 +0:205 Constant: +0:205 0.000000 +0:206 Constant: +0:206 0.000000 +0:207 Constant: +0:207 0.000000 +0:208 Constant: +0:208 0.000000 +0:209 Constant: +0:209 0.000000 +0:210 Constant: +0:210 0.000000 +0:211 Constant: +0:211 0.000000 +0:212 Constant: +0:212 0.000000 +0:213 Constant: +0:213 0.000000 +0:217 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:259 Function Definition: VertexShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float) +0:252 Function Parameters: +0:252 'inF0' (in 2X2 matrix of float) +0:252 'inF1' (in 2X2 matrix of float) +0:252 'inF2' (in 2X2 matrix of float) +0:? Sequence +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:256 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:267 Function Definition: VertexShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float) +0:260 Function Parameters: +0:260 'inF0' (in 3X3 matrix of float) +0:260 'inF1' (in 3X3 matrix of float) +0:260 'inF2' (in 3X3 matrix of float) +0:? Sequence +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:264 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:274 Function Definition: VertexShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float) +0:268 Function Parameters: +0:268 'inF0' (in 4X4 matrix of float) +0:268 'inF1' (in 4X4 matrix of float) +0:268 'inF2' (in 4X4 matrix of float) +0:? Sequence +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:272 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? Linker Objects +0:? 'gs_ua' (temp uint) +0:? 'gs_ub' (temp uint) +0:? 'gs_uc' (temp uint) +0:? 'gs_ua2' (temp 2-component vector of uint) +0:? 'gs_ub2' (temp 2-component vector of uint) +0:? 'gs_uc2' (temp 2-component vector of uint) +0:? 'gs_ua3' (temp 3-component vector of uint) +0:? 'gs_ub3' (temp 3-component vector of uint) +0:? 'gs_uc3' (temp 3-component vector of uint) +0:? 'gs_ua4' (temp 4-component vector of uint) +0:? 'gs_ub4' (temp 4-component vector of uint) +0:? 'gs_uc4' (temp 4-component vector of uint) + + +Linked vertex stage: + + +Shader version: 450 +ERROR: node is still EOpNull! +0:74 Function Definition: VertexShaderFunction(f1;f1;f1;i1; (temp float) +0:15 Function Parameters: +0:15 'inF0' (in float) +0:15 'inF1' (in float) +0:15 'inF2' (in float) +0:15 'inI0' (in int) +0:? Sequence +0:18 Constant: +0:18 0.000000 +0:19 Constant: +0:19 0.000000 +0:20 Constant: +0:20 0.000000 +0:21 Constant: +0:21 0.000000 +0:22 Constant: +0:22 0.000000 +0:23 Constant: +0:23 0.000000 +0:24 Constant: +0:24 0.000000 +0:25 Constant: +0:25 0.000000 +0:26 Constant: +0:26 0.000000 +0:27 Constant: +0:27 0.000000 +0:28 Constant: +0:28 0.000000 +0:29 Constant: +0:29 0.000000 +0:30 Constant: +0:30 0.000000 +0:31 Constant: +0:31 0.000000 +0:32 Constant: +0:32 0.000000 +0:33 Constant: +0:33 0.000000 +0:34 Constant: +0:34 0.000000 +0:35 Constant: +0:35 0.000000 +0:36 Constant: +0:36 0.000000 +0:37 Constant: +0:37 0.000000 +0:38 Constant: +0:38 0.000000 +0:39 Constant: +0:39 0.000000 +0:40 Constant: +0:40 0.000000 +0:41 Constant: +0:41 0.000000 +0:42 Constant: +0:42 0.000000 +0:43 Constant: +0:43 0.000000 +0:44 Constant: +0:44 0.000000 +0:45 Constant: +0:45 0.000000 +0:46 Constant: +0:46 0.000000 +0:47 Constant: +0:47 0.000000 +0:48 Constant: +0:48 0.000000 +0:49 Constant: +0:49 0.000000 +0:50 Constant: +0:50 0.000000 +0:51 Constant: +0:51 0.000000 +0:52 Constant: +0:52 0.000000 +0:53 Constant: +0:53 0.000000 +0:54 Constant: +0:54 0.000000 +0:55 Constant: +0:55 0.000000 +0:56 Constant: +0:56 0.000000 +0:57 Constant: +0:57 0.000000 +0:58 Constant: +0:58 0.000000 +0:59 Constant: +0:59 0.000000 +0:60 Constant: +0:60 0.000000 +0:61 Constant: +0:61 0.000000 +0:62 Constant: +0:62 0.000000 +0:63 Constant: +0:63 0.000000 +0:64 Constant: +0:64 0.000000 +0:65 Constant: +0:65 0.000000 +0:66 Constant: +0:66 0.000000 +0:67 Constant: +0:67 0.000000 +0:71 Branch: Return with expression +0:71 Constant: +0:71 0.000000 +0:83 Function Definition: VertexShaderFunction(vf1;vf1;vf1;vi1; (temp 1-component vector of float) +0:75 Function Parameters: +0:75 'inF0' (in 1-component vector of float) +0:75 'inF1' (in 1-component vector of float) +0:75 'inF2' (in 1-component vector of float) +0:75 'inI0' (in 1-component vector of int) +0:? Sequence +0:78 Constant: +0:78 0.000000 +0:80 Branch: Return with expression +0:80 Constant: +0:80 0.000000 +0:130 Function Definition: VertexShaderFunction(vf2;vf2;vf2;vi2; (temp 2-component vector of float) +0:84 Function Parameters: +0:84 'inF0' (in 2-component vector of float) +0:84 'inF1' (in 2-component vector of float) +0:84 'inF2' (in 2-component vector of float) +0:84 'inI0' (in 2-component vector of int) +0:? Sequence +0:87 Constant: +0:87 0.000000 +0:88 Constant: +0:88 0.000000 +0:89 Constant: +0:89 0.000000 +0:90 Constant: +0:90 0.000000 +0:91 Constant: +0:91 0.000000 +0:92 Constant: +0:92 0.000000 +0:93 Constant: +0:93 0.000000 +0:94 Constant: +0:94 0.000000 +0:95 Constant: +0:95 0.000000 +0:96 Constant: +0:96 0.000000 +0:97 Constant: +0:97 0.000000 +0:98 Constant: +0:98 0.000000 +0:99 Constant: +0:99 0.000000 +0:100 Constant: +0:100 0.000000 +0:101 Constant: +0:101 0.000000 +0:102 Constant: +0:102 0.000000 +0:103 Constant: +0:103 0.000000 +0:104 Constant: +0:104 0.000000 +0:105 Constant: +0:105 0.000000 +0:106 Constant: +0:106 0.000000 +0:107 Constant: +0:107 0.000000 +0:108 Constant: +0:108 0.000000 +0:109 Constant: +0:109 0.000000 +0:110 Constant: +0:110 0.000000 +0:111 Constant: +0:111 0.000000 +0:112 Constant: +0:112 0.000000 +0:113 Constant: +0:113 0.000000 +0:114 Constant: +0:114 0.000000 +0:115 Constant: +0:115 0.000000 +0:116 Constant: +0:116 0.000000 +0:117 Constant: +0:117 0.000000 +0:118 Constant: +0:118 0.000000 +0:119 Constant: +0:119 0.000000 +0:120 Constant: +0:120 0.000000 +0:121 Constant: +0:121 0.000000 +0:122 Constant: +0:122 0.000000 +0:123 Constant: +0:123 0.000000 +0:127 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:175 Function Definition: VertexShaderFunction(vf3;vf3;vf3;vi3; (temp 3-component vector of float) +0:131 Function Parameters: +0:131 'inF0' (in 3-component vector of float) +0:131 'inF1' (in 3-component vector of float) +0:131 'inF2' (in 3-component vector of float) +0:131 'inI0' (in 3-component vector of int) +0:? Sequence +0:134 Constant: +0:134 0.000000 +0:135 Constant: +0:135 0.000000 +0:136 Constant: +0:136 0.000000 +0:137 Constant: +0:137 0.000000 +0:138 Constant: +0:138 0.000000 +0:139 Constant: +0:139 0.000000 +0:140 Constant: +0:140 0.000000 +0:141 Constant: +0:141 0.000000 +0:142 Constant: +0:142 0.000000 +0:143 Constant: +0:143 0.000000 +0:144 Constant: +0:144 0.000000 +0:145 Constant: +0:145 0.000000 +0:146 Constant: +0:146 0.000000 +0:147 Constant: +0:147 0.000000 +0:148 Constant: +0:148 0.000000 +0:149 Constant: +0:149 0.000000 +0:150 Constant: +0:150 0.000000 +0:151 Constant: +0:151 0.000000 +0:152 Constant: +0:152 0.000000 +0:153 Constant: +0:153 0.000000 +0:154 Constant: +0:154 0.000000 +0:155 Constant: +0:155 0.000000 +0:156 Constant: +0:156 0.000000 +0:157 Constant: +0:157 0.000000 +0:158 Constant: +0:158 0.000000 +0:159 Constant: +0:159 0.000000 +0:160 Constant: +0:160 0.000000 +0:161 Constant: +0:161 0.000000 +0:162 Constant: +0:162 0.000000 +0:163 Constant: +0:163 0.000000 +0:164 Constant: +0:164 0.000000 +0:165 Constant: +0:165 0.000000 +0:166 Constant: +0:166 0.000000 +0:167 Constant: +0:167 0.000000 +0:168 Constant: +0:168 0.000000 +0:172 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:251 Function Definition: VertexShaderFunction(vf4;vf4;vf4;vi4; (temp 4-component vector of float) +0:176 Function Parameters: +0:176 'inF0' (in 4-component vector of float) +0:176 'inF1' (in 4-component vector of float) +0:176 'inF2' (in 4-component vector of float) +0:176 'inI0' (in 4-component vector of int) +0:? Sequence +0:179 Constant: +0:179 0.000000 +0:180 Constant: +0:180 0.000000 +0:181 Constant: +0:181 0.000000 +0:182 Constant: +0:182 0.000000 +0:183 Constant: +0:183 0.000000 +0:184 Constant: +0:184 0.000000 +0:185 Constant: +0:185 0.000000 +0:186 Constant: +0:186 0.000000 +0:187 Constant: +0:187 0.000000 +0:188 Constant: +0:188 0.000000 +0:189 Constant: +0:189 0.000000 +0:190 Constant: +0:190 0.000000 +0:191 Constant: +0:191 0.000000 +0:192 Constant: +0:192 0.000000 +0:193 Constant: +0:193 0.000000 +0:194 Constant: +0:194 0.000000 +0:195 Constant: +0:195 0.000000 +0:196 Constant: +0:196 0.000000 +0:197 Constant: +0:197 0.000000 +0:198 Constant: +0:198 0.000000 +0:199 Constant: +0:199 0.000000 +0:200 Constant: +0:200 0.000000 +0:201 Constant: +0:201 0.000000 +0:202 Constant: +0:202 0.000000 +0:203 Constant: +0:203 0.000000 +0:204 Constant: +0:204 0.000000 +0:205 Constant: +0:205 0.000000 +0:206 Constant: +0:206 0.000000 +0:207 Constant: +0:207 0.000000 +0:208 Constant: +0:208 0.000000 +0:209 Constant: +0:209 0.000000 +0:210 Constant: +0:210 0.000000 +0:211 Constant: +0:211 0.000000 +0:212 Constant: +0:212 0.000000 +0:213 Constant: +0:213 0.000000 +0:217 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:259 Function Definition: VertexShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float) +0:252 Function Parameters: +0:252 'inF0' (in 2X2 matrix of float) +0:252 'inF1' (in 2X2 matrix of float) +0:252 'inF2' (in 2X2 matrix of float) +0:? Sequence +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:254 Constant: +0:254 0.000000 +0:256 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:267 Function Definition: VertexShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float) +0:260 Function Parameters: +0:260 'inF0' (in 3X3 matrix of float) +0:260 'inF1' (in 3X3 matrix of float) +0:260 'inF2' (in 3X3 matrix of float) +0:? Sequence +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:262 Constant: +0:262 0.000000 +0:264 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:274 Function Definition: VertexShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float) +0:268 Function Parameters: +0:268 'inF0' (in 4X4 matrix of float) +0:268 'inF1' (in 4X4 matrix of float) +0:268 'inF2' (in 4X4 matrix of float) +0:? Sequence +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:270 Constant: +0:270 0.000000 +0:272 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? Linker Objects +0:? 'gs_ua' (temp uint) +0:? 'gs_ub' (temp uint) +0:? 'gs_uc' (temp uint) +0:? 'gs_ua2' (temp 2-component vector of uint) +0:? 'gs_ub2' (temp 2-component vector of uint) +0:? 'gs_uc2' (temp 2-component vector of uint) +0:? 'gs_ua3' (temp 3-component vector of uint) +0:? 'gs_ub3' (temp 3-component vector of uint) +0:? 'gs_uc3' (temp 3-component vector of uint) +0:? 'gs_ua4' (temp 4-component vector of uint) +0:? 'gs_ub4' (temp 4-component vector of uint) +0:? 'gs_uc4' (temp 4-component vector of uint) + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out new file mode 100644 index 00000000..d4c9706d --- /dev/null +++ b/Test/baseResults/hlsl.intrinsics.vert.out @@ -0,0 +1,2927 @@ +hlsl.intrinsics.vert +Shader version: 450 +0:? Sequence +0:62 Function Definition: VertexShaderFunction(f1;f1;f1;u1;u1; (temp float) +0:2 Function Parameters: +0:2 'inF0' (in float) +0:2 'inF1' (in float) +0:2 'inF2' (in float) +0:2 'inU0' (in uint) +0:2 'inU1' (in uint) +0:? Sequence +0:3 all (global bool) +0:3 'inF0' (in float) +0:4 Absolute value (global float) +0:4 'inF0' (in float) +0:5 arc cosine (global float) +0:5 'inF0' (in float) +0:6 any (global bool) +0:6 'inF0' (in float) +0:7 arc sine (global float) +0:7 'inF0' (in float) +0:8 floatBitsToInt (global int) +0:8 'inF0' (in float) +0:9 floatBitsToUint (global uint) +0:9 'inF0' (in float) +0:10 intBitsToFloat (global float) +0:10 'inU0' (in uint) +0:12 arc tangent (global float) +0:12 'inF0' (in float) +0:13 arc tangent (global float) +0:13 'inF0' (in float) +0:13 'inF1' (in float) +0:14 Ceiling (global float) +0:14 'inF0' (in float) +0:15 clamp (global float) +0:15 'inF0' (in float) +0:15 'inF1' (in float) +0:15 'inF2' (in float) +0:16 cosine (global float) +0:16 'inF0' (in float) +0:17 hyp. cosine (global float) +0:17 'inF0' (in float) +0:18 bitCount (global uint) +0:18 Constant: +0:18 7 (const uint) +0:19 degrees (global float) +0:19 'inF0' (in float) +0:23 exp (global float) +0:23 'inF0' (in float) +0:24 exp2 (global float) +0:24 'inF0' (in float) +0:25 findMSB (global int) +0:25 Constant: +0:25 7 (const int) +0:26 findLSB (global int) +0:26 Constant: +0:26 7 (const int) +0:27 Floor (global float) +0:27 'inF0' (in float) +0:29 mod (global float) +0:29 'inF0' (in float) +0:29 'inF1' (in float) +0:30 Fraction (global float) +0:30 'inF0' (in float) +0:31 frexp (global float) +0:31 'inF0' (in float) +0:31 'inF1' (in float) +0:32 isinf (global bool) +0:32 'inF0' (in float) +0:33 isnan (global bool) +0:33 'inF0' (in float) +0:34 ldexp (global float) +0:34 'inF0' (in float) +0:34 'inF1' (in float) +0:35 log (global float) +0:35 'inF0' (in float) +0:36 component-wise multiply (temp float) +0:36 log2 (temp float) +0:36 'inF0' (in float) +0:36 Constant: +0:36 0.301030 +0:37 log2 (global float) +0:37 'inF0' (in float) +0:38 max (global float) +0:38 'inF0' (in float) +0:38 'inF1' (in float) +0:39 min (global float) +0:39 'inF0' (in float) +0:39 'inF1' (in float) +0:41 pow (global float) +0:41 'inF0' (in float) +0:41 'inF1' (in float) +0:42 radians (global float) +0:42 'inF0' (in float) +0:43 bitFieldReverse (global uint) +0:43 Constant: +0:43 2 (const uint) +0:44 roundEven (global float) +0:44 'inF0' (in float) +0:45 inverse sqrt (global float) +0:45 'inF0' (in float) +0:46 clamp (temp float) +0:46 'inF0' (in float) +0:46 Constant: +0:46 0.000000 +0:46 Constant: +0:46 1.000000 +0:47 Sign (global float) +0:47 'inF0' (in float) +0:48 sine (global float) +0:48 'inF0' (in float) +0:49 Sequence +0:49 move second child to first child (temp float) +0:49 'inF1' (in float) +0:49 sine (temp float) +0:49 'inF0' (in float) +0:49 move second child to first child (temp float) +0:49 'inF2' (in float) +0:49 cosine (temp float) +0:49 'inF0' (in float) +0:50 hyp. sine (global float) +0:50 'inF0' (in float) +0:51 smoothstep (global float) +0:51 'inF0' (in float) +0:51 'inF1' (in float) +0:51 'inF2' (in float) +0:52 sqrt (global float) +0:52 'inF0' (in float) +0:53 step (global float) +0:53 'inF0' (in float) +0:53 'inF1' (in float) +0:54 tangent (global float) +0:54 'inF0' (in float) +0:55 hyp. tangent (global float) +0:55 'inF0' (in float) +0:57 trunc (global float) +0:57 'inF0' (in float) +0:59 Branch: Return with expression +0:59 Constant: +0:59 0.000000 +0:68 Function Definition: VertexShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float) +0:63 Function Parameters: +0:63 'inF0' (in 1-component vector of float) +0:63 'inF1' (in 1-component vector of float) +0:63 'inF2' (in 1-component vector of float) +0:? Sequence +0:65 Branch: Return with expression +0:65 Constant: +0:65 0.000000 +0:137 Function Definition: VertexShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float) +0:69 Function Parameters: +0:69 'inF0' (in 2-component vector of float) +0:69 'inF1' (in 2-component vector of float) +0:69 'inF2' (in 2-component vector of float) +0:69 'inU0' (in 2-component vector of uint) +0:69 'inU1' (in 2-component vector of uint) +0:? Sequence +0:70 all (global bool) +0:70 'inF0' (in 2-component vector of float) +0:71 Absolute value (global 2-component vector of float) +0:71 'inF0' (in 2-component vector of float) +0:72 arc cosine (global 2-component vector of float) +0:72 'inF0' (in 2-component vector of float) +0:73 any (global bool) +0:73 'inF0' (in 2-component vector of float) +0:74 arc sine (global 2-component vector of float) +0:74 'inF0' (in 2-component vector of float) +0:75 floatBitsToInt (global 2-component vector of int) +0:75 'inF0' (in 2-component vector of float) +0:76 floatBitsToUint (global 2-component vector of uint) +0:76 'inF0' (in 2-component vector of float) +0:77 intBitsToFloat (global 2-component vector of float) +0:77 'inU0' (in 2-component vector of uint) +0:79 arc tangent (global 2-component vector of float) +0:79 'inF0' (in 2-component vector of float) +0:80 arc tangent (global 2-component vector of float) +0:80 'inF0' (in 2-component vector of float) +0:80 'inF1' (in 2-component vector of float) +0:81 Ceiling (global 2-component vector of float) +0:81 'inF0' (in 2-component vector of float) +0:82 clamp (global 2-component vector of float) +0:82 'inF0' (in 2-component vector of float) +0:82 'inF1' (in 2-component vector of float) +0:82 'inF2' (in 2-component vector of float) +0:83 cosine (global 2-component vector of float) +0:83 'inF0' (in 2-component vector of float) +0:84 hyp. cosine (global 2-component vector of float) +0:84 'inF0' (in 2-component vector of float) +0:? bitCount (global 2-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:86 degrees (global 2-component vector of float) +0:86 'inF0' (in 2-component vector of float) +0:87 distance (global float) +0:87 'inF0' (in 2-component vector of float) +0:87 'inF1' (in 2-component vector of float) +0:88 dot-product (global float) +0:88 'inF0' (in 2-component vector of float) +0:88 'inF1' (in 2-component vector of float) +0:92 exp (global 2-component vector of float) +0:92 'inF0' (in 2-component vector of float) +0:93 exp2 (global 2-component vector of float) +0:93 'inF0' (in 2-component vector of float) +0:94 face-forward (global 2-component vector of float) +0:94 'inF0' (in 2-component vector of float) +0:94 'inF1' (in 2-component vector of float) +0:94 'inF2' (in 2-component vector of float) +0:95 findMSB (global int) +0:95 Constant: +0:95 7 (const int) +0:96 findLSB (global int) +0:96 Constant: +0:96 7 (const int) +0:97 Floor (global 2-component vector of float) +0:97 'inF0' (in 2-component vector of float) +0:99 mod (global 2-component vector of float) +0:99 'inF0' (in 2-component vector of float) +0:99 'inF1' (in 2-component vector of float) +0:100 Fraction (global 2-component vector of float) +0:100 'inF0' (in 2-component vector of float) +0:101 frexp (global 2-component vector of float) +0:101 'inF0' (in 2-component vector of float) +0:101 'inF1' (in 2-component vector of float) +0:102 isinf (global 2-component vector of bool) +0:102 'inF0' (in 2-component vector of float) +0:103 isnan (global 2-component vector of bool) +0:103 'inF0' (in 2-component vector of float) +0:104 ldexp (global 2-component vector of float) +0:104 'inF0' (in 2-component vector of float) +0:104 'inF1' (in 2-component vector of float) +0:105 length (global float) +0:105 'inF0' (in 2-component vector of float) +0:106 log (global 2-component vector of float) +0:106 'inF0' (in 2-component vector of float) +0:107 vector-scale (temp 2-component vector of float) +0:107 log2 (temp 2-component vector of float) +0:107 'inF0' (in 2-component vector of float) +0:107 Constant: +0:107 0.301030 +0:108 log2 (global 2-component vector of float) +0:108 'inF0' (in 2-component vector of float) +0:109 max (global 2-component vector of float) +0:109 'inF0' (in 2-component vector of float) +0:109 'inF1' (in 2-component vector of float) +0:110 min (global 2-component vector of float) +0:110 'inF0' (in 2-component vector of float) +0:110 'inF1' (in 2-component vector of float) +0:112 normalize (global 2-component vector of float) +0:112 'inF0' (in 2-component vector of float) +0:113 pow (global 2-component vector of float) +0:113 'inF0' (in 2-component vector of float) +0:113 'inF1' (in 2-component vector of float) +0:114 radians (global 2-component vector of float) +0:114 'inF0' (in 2-component vector of float) +0:115 reflect (global 2-component vector of float) +0:115 'inF0' (in 2-component vector of float) +0:115 'inF1' (in 2-component vector of float) +0:116 refract (global 2-component vector of float) +0:116 'inF0' (in 2-component vector of float) +0:116 'inF1' (in 2-component vector of float) +0:116 Constant: +0:116 2.000000 +0:? bitFieldReverse (global 2-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:118 roundEven (global 2-component vector of float) +0:118 'inF0' (in 2-component vector of float) +0:119 inverse sqrt (global 2-component vector of float) +0:119 'inF0' (in 2-component vector of float) +0:120 clamp (temp 2-component vector of float) +0:120 'inF0' (in 2-component vector of float) +0:120 Constant: +0:120 0.000000 +0:120 Constant: +0:120 1.000000 +0:121 Sign (global 2-component vector of float) +0:121 'inF0' (in 2-component vector of float) +0:122 sine (global 2-component vector of float) +0:122 'inF0' (in 2-component vector of float) +0:123 Sequence +0:123 move second child to first child (temp 2-component vector of float) +0:123 'inF1' (in 2-component vector of float) +0:123 sine (temp 2-component vector of float) +0:123 'inF0' (in 2-component vector of float) +0:123 move second child to first child (temp 2-component vector of float) +0:123 'inF2' (in 2-component vector of float) +0:123 cosine (temp 2-component vector of float) +0:123 'inF0' (in 2-component vector of float) +0:124 hyp. sine (global 2-component vector of float) +0:124 'inF0' (in 2-component vector of float) +0:125 smoothstep (global 2-component vector of float) +0:125 'inF0' (in 2-component vector of float) +0:125 'inF1' (in 2-component vector of float) +0:125 'inF2' (in 2-component vector of float) +0:126 sqrt (global 2-component vector of float) +0:126 'inF0' (in 2-component vector of float) +0:127 step (global 2-component vector of float) +0:127 'inF0' (in 2-component vector of float) +0:127 'inF1' (in 2-component vector of float) +0:128 tangent (global 2-component vector of float) +0:128 'inF0' (in 2-component vector of float) +0:129 hyp. tangent (global 2-component vector of float) +0:129 'inF0' (in 2-component vector of float) +0:131 trunc (global 2-component vector of float) +0:131 'inF0' (in 2-component vector of float) +0:134 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:207 Function Definition: VertexShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float) +0:138 Function Parameters: +0:138 'inF0' (in 3-component vector of float) +0:138 'inF1' (in 3-component vector of float) +0:138 'inF2' (in 3-component vector of float) +0:138 'inU0' (in 3-component vector of uint) +0:138 'inU1' (in 3-component vector of uint) +0:? Sequence +0:139 all (global bool) +0:139 'inF0' (in 3-component vector of float) +0:140 Absolute value (global 3-component vector of float) +0:140 'inF0' (in 3-component vector of float) +0:141 arc cosine (global 3-component vector of float) +0:141 'inF0' (in 3-component vector of float) +0:142 any (global bool) +0:142 'inF0' (in 3-component vector of float) +0:143 arc sine (global 3-component vector of float) +0:143 'inF0' (in 3-component vector of float) +0:144 floatBitsToInt (global 3-component vector of int) +0:144 'inF0' (in 3-component vector of float) +0:145 floatBitsToUint (global 3-component vector of uint) +0:145 'inF0' (in 3-component vector of float) +0:146 intBitsToFloat (global 3-component vector of float) +0:146 'inU0' (in 3-component vector of uint) +0:148 arc tangent (global 3-component vector of float) +0:148 'inF0' (in 3-component vector of float) +0:149 arc tangent (global 3-component vector of float) +0:149 'inF0' (in 3-component vector of float) +0:149 'inF1' (in 3-component vector of float) +0:150 Ceiling (global 3-component vector of float) +0:150 'inF0' (in 3-component vector of float) +0:151 clamp (global 3-component vector of float) +0:151 'inF0' (in 3-component vector of float) +0:151 'inF1' (in 3-component vector of float) +0:151 'inF2' (in 3-component vector of float) +0:152 cosine (global 3-component vector of float) +0:152 'inF0' (in 3-component vector of float) +0:153 hyp. cosine (global 3-component vector of float) +0:153 'inF0' (in 3-component vector of float) +0:? bitCount (global 3-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:? 5 (const uint) +0:155 cross-product (global 3-component vector of float) +0:155 'inF0' (in 3-component vector of float) +0:155 'inF1' (in 3-component vector of float) +0:156 degrees (global 3-component vector of float) +0:156 'inF0' (in 3-component vector of float) +0:157 distance (global float) +0:157 'inF0' (in 3-component vector of float) +0:157 'inF1' (in 3-component vector of float) +0:158 dot-product (global float) +0:158 'inF0' (in 3-component vector of float) +0:158 'inF1' (in 3-component vector of float) +0:162 exp (global 3-component vector of float) +0:162 'inF0' (in 3-component vector of float) +0:163 exp2 (global 3-component vector of float) +0:163 'inF0' (in 3-component vector of float) +0:164 face-forward (global 3-component vector of float) +0:164 'inF0' (in 3-component vector of float) +0:164 'inF1' (in 3-component vector of float) +0:164 'inF2' (in 3-component vector of float) +0:165 findMSB (global int) +0:165 Constant: +0:165 7 (const int) +0:166 findLSB (global int) +0:166 Constant: +0:166 7 (const int) +0:167 Floor (global 3-component vector of float) +0:167 'inF0' (in 3-component vector of float) +0:169 mod (global 3-component vector of float) +0:169 'inF0' (in 3-component vector of float) +0:169 'inF1' (in 3-component vector of float) +0:170 Fraction (global 3-component vector of float) +0:170 'inF0' (in 3-component vector of float) +0:171 frexp (global 3-component vector of float) +0:171 'inF0' (in 3-component vector of float) +0:171 'inF1' (in 3-component vector of float) +0:172 isinf (global 3-component vector of bool) +0:172 'inF0' (in 3-component vector of float) +0:173 isnan (global 3-component vector of bool) +0:173 'inF0' (in 3-component vector of float) +0:174 ldexp (global 3-component vector of float) +0:174 'inF0' (in 3-component vector of float) +0:174 'inF1' (in 3-component vector of float) +0:175 length (global float) +0:175 'inF0' (in 3-component vector of float) +0:176 log (global 3-component vector of float) +0:176 'inF0' (in 3-component vector of float) +0:177 vector-scale (temp 3-component vector of float) +0:177 log2 (temp 3-component vector of float) +0:177 'inF0' (in 3-component vector of float) +0:177 Constant: +0:177 0.301030 +0:178 log2 (global 3-component vector of float) +0:178 'inF0' (in 3-component vector of float) +0:179 max (global 3-component vector of float) +0:179 'inF0' (in 3-component vector of float) +0:179 'inF1' (in 3-component vector of float) +0:180 min (global 3-component vector of float) +0:180 'inF0' (in 3-component vector of float) +0:180 'inF1' (in 3-component vector of float) +0:182 normalize (global 3-component vector of float) +0:182 'inF0' (in 3-component vector of float) +0:183 pow (global 3-component vector of float) +0:183 'inF0' (in 3-component vector of float) +0:183 'inF1' (in 3-component vector of float) +0:184 radians (global 3-component vector of float) +0:184 'inF0' (in 3-component vector of float) +0:185 reflect (global 3-component vector of float) +0:185 'inF0' (in 3-component vector of float) +0:185 'inF1' (in 3-component vector of float) +0:186 refract (global 3-component vector of float) +0:186 'inF0' (in 3-component vector of float) +0:186 'inF1' (in 3-component vector of float) +0:186 Constant: +0:186 2.000000 +0:? bitFieldReverse (global 3-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:188 roundEven (global 3-component vector of float) +0:188 'inF0' (in 3-component vector of float) +0:189 inverse sqrt (global 3-component vector of float) +0:189 'inF0' (in 3-component vector of float) +0:190 clamp (temp 3-component vector of float) +0:190 'inF0' (in 3-component vector of float) +0:190 Constant: +0:190 0.000000 +0:190 Constant: +0:190 1.000000 +0:191 Sign (global 3-component vector of float) +0:191 'inF0' (in 3-component vector of float) +0:192 sine (global 3-component vector of float) +0:192 'inF0' (in 3-component vector of float) +0:193 Sequence +0:193 move second child to first child (temp 3-component vector of float) +0:193 'inF1' (in 3-component vector of float) +0:193 sine (temp 3-component vector of float) +0:193 'inF0' (in 3-component vector of float) +0:193 move second child to first child (temp 3-component vector of float) +0:193 'inF2' (in 3-component vector of float) +0:193 cosine (temp 3-component vector of float) +0:193 'inF0' (in 3-component vector of float) +0:194 hyp. sine (global 3-component vector of float) +0:194 'inF0' (in 3-component vector of float) +0:195 smoothstep (global 3-component vector of float) +0:195 'inF0' (in 3-component vector of float) +0:195 'inF1' (in 3-component vector of float) +0:195 'inF2' (in 3-component vector of float) +0:196 sqrt (global 3-component vector of float) +0:196 'inF0' (in 3-component vector of float) +0:197 step (global 3-component vector of float) +0:197 'inF0' (in 3-component vector of float) +0:197 'inF1' (in 3-component vector of float) +0:198 tangent (global 3-component vector of float) +0:198 'inF0' (in 3-component vector of float) +0:199 hyp. tangent (global 3-component vector of float) +0:199 'inF0' (in 3-component vector of float) +0:201 trunc (global 3-component vector of float) +0:201 'inF0' (in 3-component vector of float) +0:204 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:330 Function Definition: VertexShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float) +0:208 Function Parameters: +0:208 'inF0' (in 4-component vector of float) +0:208 'inF1' (in 4-component vector of float) +0:208 'inF2' (in 4-component vector of float) +0:208 'inU0' (in 4-component vector of uint) +0:208 'inU1' (in 4-component vector of uint) +0:? Sequence +0:209 all (global bool) +0:209 'inF0' (in 4-component vector of float) +0:210 Absolute value (global 4-component vector of float) +0:210 'inF0' (in 4-component vector of float) +0:211 arc cosine (global 4-component vector of float) +0:211 'inF0' (in 4-component vector of float) +0:212 any (global bool) +0:212 'inF0' (in 4-component vector of float) +0:213 arc sine (global 4-component vector of float) +0:213 'inF0' (in 4-component vector of float) +0:214 floatBitsToInt (global 4-component vector of int) +0:214 'inF0' (in 4-component vector of float) +0:215 floatBitsToUint (global 4-component vector of uint) +0:215 'inF0' (in 4-component vector of float) +0:216 intBitsToFloat (global 4-component vector of float) +0:216 'inU0' (in 4-component vector of uint) +0:218 arc tangent (global 4-component vector of float) +0:218 'inF0' (in 4-component vector of float) +0:219 arc tangent (global 4-component vector of float) +0:219 'inF0' (in 4-component vector of float) +0:219 'inF1' (in 4-component vector of float) +0:220 Ceiling (global 4-component vector of float) +0:220 'inF0' (in 4-component vector of float) +0:221 clamp (global 4-component vector of float) +0:221 'inF0' (in 4-component vector of float) +0:221 'inF1' (in 4-component vector of float) +0:221 'inF2' (in 4-component vector of float) +0:222 cosine (global 4-component vector of float) +0:222 'inF0' (in 4-component vector of float) +0:223 hyp. cosine (global 4-component vector of float) +0:223 'inF0' (in 4-component vector of float) +0:? bitCount (global 4-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:? 5 (const uint) +0:? 2 (const uint) +0:225 degrees (global 4-component vector of float) +0:225 'inF0' (in 4-component vector of float) +0:226 distance (global float) +0:226 'inF0' (in 4-component vector of float) +0:226 'inF1' (in 4-component vector of float) +0:227 dot-product (global float) +0:227 'inF0' (in 4-component vector of float) +0:227 'inF1' (in 4-component vector of float) +0:228 Construct vec4 (temp 4-component vector of float) +0:228 Constant: +0:228 1.000000 +0:228 component-wise multiply (temp float) +0:228 direct index (temp float) +0:228 'inF0' (in 4-component vector of float) +0:228 Constant: +0:228 1 (const int) +0:228 direct index (temp float) +0:228 'inF1' (in 4-component vector of float) +0:228 Constant: +0:228 1 (const int) +0:228 direct index (temp float) +0:228 'inF0' (in 4-component vector of float) +0:228 Constant: +0:228 2 (const int) +0:228 direct index (temp float) +0:228 'inF1' (in 4-component vector of float) +0:228 Constant: +0:228 3 (const int) +0:232 exp (global 4-component vector of float) +0:232 'inF0' (in 4-component vector of float) +0:233 exp2 (global 4-component vector of float) +0:233 'inF0' (in 4-component vector of float) +0:234 face-forward (global 4-component vector of float) +0:234 'inF0' (in 4-component vector of float) +0:234 'inF1' (in 4-component vector of float) +0:234 'inF2' (in 4-component vector of float) +0:235 findMSB (global int) +0:235 Constant: +0:235 7 (const int) +0:236 findLSB (global int) +0:236 Constant: +0:236 7 (const int) +0:237 Floor (global 4-component vector of float) +0:237 'inF0' (in 4-component vector of float) +0:239 mod (global 4-component vector of float) +0:239 'inF0' (in 4-component vector of float) +0:239 'inF1' (in 4-component vector of float) +0:240 Fraction (global 4-component vector of float) +0:240 'inF0' (in 4-component vector of float) +0:241 frexp (global 4-component vector of float) +0:241 'inF0' (in 4-component vector of float) +0:241 'inF1' (in 4-component vector of float) +0:242 isinf (global 4-component vector of bool) +0:242 'inF0' (in 4-component vector of float) +0:243 isnan (global 4-component vector of bool) +0:243 'inF0' (in 4-component vector of float) +0:244 ldexp (global 4-component vector of float) +0:244 'inF0' (in 4-component vector of float) +0:244 'inF1' (in 4-component vector of float) +0:245 length (global float) +0:245 'inF0' (in 4-component vector of float) +0:246 log (global 4-component vector of float) +0:246 'inF0' (in 4-component vector of float) +0:247 vector-scale (temp 4-component vector of float) +0:247 log2 (temp 4-component vector of float) +0:247 'inF0' (in 4-component vector of float) +0:247 Constant: +0:247 0.301030 +0:248 log2 (global 4-component vector of float) +0:248 'inF0' (in 4-component vector of float) +0:249 max (global 4-component vector of float) +0:249 'inF0' (in 4-component vector of float) +0:249 'inF1' (in 4-component vector of float) +0:250 min (global 4-component vector of float) +0:250 'inF0' (in 4-component vector of float) +0:250 'inF1' (in 4-component vector of float) +0:252 normalize (global 4-component vector of float) +0:252 'inF0' (in 4-component vector of float) +0:253 pow (global 4-component vector of float) +0:253 'inF0' (in 4-component vector of float) +0:253 'inF1' (in 4-component vector of float) +0:254 radians (global 4-component vector of float) +0:254 'inF0' (in 4-component vector of float) +0:255 reflect (global 4-component vector of float) +0:255 'inF0' (in 4-component vector of float) +0:255 'inF1' (in 4-component vector of float) +0:256 refract (global 4-component vector of float) +0:256 'inF0' (in 4-component vector of float) +0:256 'inF1' (in 4-component vector of float) +0:256 Constant: +0:256 2.000000 +0:? bitFieldReverse (global 4-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:258 roundEven (global 4-component vector of float) +0:258 'inF0' (in 4-component vector of float) +0:259 inverse sqrt (global 4-component vector of float) +0:259 'inF0' (in 4-component vector of float) +0:260 clamp (temp 4-component vector of float) +0:260 'inF0' (in 4-component vector of float) +0:260 Constant: +0:260 0.000000 +0:260 Constant: +0:260 1.000000 +0:261 Sign (global 4-component vector of float) +0:261 'inF0' (in 4-component vector of float) +0:262 sine (global 4-component vector of float) +0:262 'inF0' (in 4-component vector of float) +0:263 Sequence +0:263 move second child to first child (temp 4-component vector of float) +0:263 'inF1' (in 4-component vector of float) +0:263 sine (temp 4-component vector of float) +0:263 'inF0' (in 4-component vector of float) +0:263 move second child to first child (temp 4-component vector of float) +0:263 'inF2' (in 4-component vector of float) +0:263 cosine (temp 4-component vector of float) +0:263 'inF0' (in 4-component vector of float) +0:264 hyp. sine (global 4-component vector of float) +0:264 'inF0' (in 4-component vector of float) +0:265 smoothstep (global 4-component vector of float) +0:265 'inF0' (in 4-component vector of float) +0:265 'inF1' (in 4-component vector of float) +0:265 'inF2' (in 4-component vector of float) +0:266 sqrt (global 4-component vector of float) +0:266 'inF0' (in 4-component vector of float) +0:267 step (global 4-component vector of float) +0:267 'inF0' (in 4-component vector of float) +0:267 'inF1' (in 4-component vector of float) +0:268 tangent (global 4-component vector of float) +0:268 'inF0' (in 4-component vector of float) +0:269 hyp. tangent (global 4-component vector of float) +0:269 'inF0' (in 4-component vector of float) +0:271 trunc (global 4-component vector of float) +0:271 'inF0' (in 4-component vector of float) +0:274 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:339 Function Definition: VertexShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float) +0:331 Function Parameters: +0:331 'inF0' (in 2X2 matrix of float) +0:331 'inF1' (in 2X2 matrix of float) +0:331 'inF2' (in 2X2 matrix of float) +0:? Sequence +0:333 all (global bool) +0:333 'inF0' (in 2X2 matrix of float) +0:333 Absolute value (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 arc cosine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 any (global bool) +0:333 'inF0' (in 2X2 matrix of float) +0:333 arc sine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 arc tangent (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 arc tangent (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 Ceiling (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 clamp (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 'inF2' (in 2X2 matrix of float) +0:333 cosine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 hyp. cosine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 degrees (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 determinant (global float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 exp (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 exp2 (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 findMSB (global int) +0:333 Constant: +0:333 7 (const int) +0:333 findLSB (global int) +0:333 Constant: +0:333 7 (const int) +0:333 Floor (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 mod (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 Fraction (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 frexp (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 ldexp (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 log (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 matrix-scale (temp 2X2 matrix of float) +0:333 log2 (temp 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 Constant: +0:333 0.301030 +0:333 log2 (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 max (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 min (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 pow (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 radians (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 roundEven (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 inverse sqrt (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 clamp (temp 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 Constant: +0:333 0.000000 +0:333 Constant: +0:333 1.000000 +0:333 Sign (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 sine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 Sequence +0:333 move second child to first child (temp 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 sine (temp 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 move second child to first child (temp 2X2 matrix of float) +0:333 'inF2' (in 2X2 matrix of float) +0:333 cosine (temp 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 hyp. sine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 smoothstep (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 'inF2' (in 2X2 matrix of float) +0:333 sqrt (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 step (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 tangent (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 hyp. tangent (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 transpose (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 trunc (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:336 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:348 Function Definition: VertexShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float) +0:340 Function Parameters: +0:340 'inF0' (in 3X3 matrix of float) +0:340 'inF1' (in 3X3 matrix of float) +0:340 'inF2' (in 3X3 matrix of float) +0:? Sequence +0:342 all (global bool) +0:342 'inF0' (in 3X3 matrix of float) +0:342 Absolute value (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 arc cosine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 any (global bool) +0:342 'inF0' (in 3X3 matrix of float) +0:342 arc sine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 arc tangent (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 arc tangent (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 Ceiling (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 clamp (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 'inF2' (in 3X3 matrix of float) +0:342 cosine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 hyp. cosine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 degrees (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 determinant (global float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 exp (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 exp2 (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 findMSB (global int) +0:342 Constant: +0:342 7 (const int) +0:342 findLSB (global int) +0:342 Constant: +0:342 7 (const int) +0:342 Floor (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 mod (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 Fraction (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 frexp (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 ldexp (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 log (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 matrix-scale (temp 3X3 matrix of float) +0:342 log2 (temp 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 Constant: +0:342 0.301030 +0:342 log2 (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 max (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 min (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 pow (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 radians (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 roundEven (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 inverse sqrt (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 clamp (temp 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 Constant: +0:342 0.000000 +0:342 Constant: +0:342 1.000000 +0:342 Sign (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 sine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 Sequence +0:342 move second child to first child (temp 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 sine (temp 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 move second child to first child (temp 3X3 matrix of float) +0:342 'inF2' (in 3X3 matrix of float) +0:342 cosine (temp 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 hyp. sine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 smoothstep (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 'inF2' (in 3X3 matrix of float) +0:342 sqrt (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 step (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 tangent (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 hyp. tangent (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 transpose (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 trunc (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:345 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:369 Function Definition: VertexShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float) +0:349 Function Parameters: +0:349 'inF0' (in 4X4 matrix of float) +0:349 'inF1' (in 4X4 matrix of float) +0:349 'inF2' (in 4X4 matrix of float) +0:? Sequence +0:351 all (global bool) +0:351 'inF0' (in 4X4 matrix of float) +0:351 Absolute value (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 arc cosine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 any (global bool) +0:351 'inF0' (in 4X4 matrix of float) +0:351 arc sine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 arc tangent (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 arc tangent (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 Ceiling (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 clamp (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 'inF2' (in 4X4 matrix of float) +0:351 cosine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 hyp. cosine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 degrees (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 determinant (global float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 exp (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 exp2 (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 findMSB (global int) +0:351 Constant: +0:351 7 (const int) +0:351 findLSB (global int) +0:351 Constant: +0:351 7 (const int) +0:351 Floor (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 mod (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 Fraction (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 frexp (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 ldexp (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 log (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 matrix-scale (temp 4X4 matrix of float) +0:351 log2 (temp 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 Constant: +0:351 0.301030 +0:351 log2 (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 max (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 min (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 pow (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 radians (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 roundEven (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 inverse sqrt (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 clamp (temp 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 Constant: +0:351 0.000000 +0:351 Constant: +0:351 1.000000 +0:351 Sign (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 sine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 Sequence +0:351 move second child to first child (temp 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 sine (temp 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 move second child to first child (temp 4X4 matrix of float) +0:351 'inF2' (in 4X4 matrix of float) +0:351 cosine (temp 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 hyp. sine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 smoothstep (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 'inF2' (in 4X4 matrix of float) +0:351 sqrt (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 step (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 tangent (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 hyp. tangent (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 transpose (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 trunc (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:354 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:376 Function Definition: TestGenMul(f1;f1;vf2;vf2;mf22;mf22; (temp void) +0:372 Function Parameters: +0:372 'inF0' (in float) +0:372 'inF1' (in float) +0:372 'inFV0' (in 2-component vector of float) +0:372 'inFV1' (in 2-component vector of float) +0:372 'inFM0' (in 2X2 matrix of float) +0:372 'inFM1' (in 2X2 matrix of float) +0:? Sequence +0:373 move second child to first child (temp float) +0:373 'r0' (temp float) +0:373 component-wise multiply (temp float) +0:373 'inF0' (in float) +0:373 'inF1' (in float) +0:373 move second child to first child (temp 2-component vector of float) +0:373 'r1' (temp 2-component vector of float) +0:373 vector-scale (temp 2-component vector of float) +0:373 'inFV0' (in 2-component vector of float) +0:373 'inF0' (in float) +0:373 move second child to first child (temp 2-component vector of float) +0:373 'r2' (temp 2-component vector of float) +0:373 vector-scale (temp 2-component vector of float) +0:373 'inF0' (in float) +0:373 'inFV0' (in 2-component vector of float) +0:373 move second child to first child (temp float) +0:373 'r3' (temp float) +0:373 dot-product (global float) +0:373 'inFV0' (in 2-component vector of float) +0:373 'inFV1' (in 2-component vector of float) +0:373 move second child to first child (temp 2-component vector of float) +0:373 'r4' (temp 2-component vector of float) +0:373 matrix-times-vector (temp 2-component vector of float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 'inFV0' (in 2-component vector of float) +0:373 move second child to first child (temp 2-component vector of float) +0:373 'r5' (temp 2-component vector of float) +0:373 vector-times-matrix (temp 2-component vector of float) +0:373 'inFV0' (in 2-component vector of float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 move second child to first child (temp 2X2 matrix of float) +0:373 'r6' (temp 2X2 matrix of float) +0:373 matrix-scale (temp 2X2 matrix of float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 'inF0' (in float) +0:373 move second child to first child (temp 2X2 matrix of float) +0:373 'r7' (temp 2X2 matrix of float) +0:373 matrix-scale (temp 2X2 matrix of float) +0:373 'inF0' (in float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 move second child to first child (temp 2X2 matrix of float) +0:373 'r8' (temp 2X2 matrix of float) +0:373 matrix-multiply (temp 2X2 matrix of float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 'inFM1' (in 2X2 matrix of float) +0:383 Function Definition: TestGenMul(f1;f1;vf3;vf3;mf33;mf33; (temp void) +0:379 Function Parameters: +0:379 'inF0' (in float) +0:379 'inF1' (in float) +0:379 'inFV0' (in 3-component vector of float) +0:379 'inFV1' (in 3-component vector of float) +0:379 'inFM0' (in 3X3 matrix of float) +0:379 'inFM1' (in 3X3 matrix of float) +0:? Sequence +0:380 move second child to first child (temp float) +0:380 'r0' (temp float) +0:380 component-wise multiply (temp float) +0:380 'inF0' (in float) +0:380 'inF1' (in float) +0:380 move second child to first child (temp 3-component vector of float) +0:380 'r1' (temp 3-component vector of float) +0:380 vector-scale (temp 3-component vector of float) +0:380 'inFV0' (in 3-component vector of float) +0:380 'inF0' (in float) +0:380 move second child to first child (temp 3-component vector of float) +0:380 'r2' (temp 3-component vector of float) +0:380 vector-scale (temp 3-component vector of float) +0:380 'inF0' (in float) +0:380 'inFV0' (in 3-component vector of float) +0:380 move second child to first child (temp float) +0:380 'r3' (temp float) +0:380 dot-product (global float) +0:380 'inFV0' (in 3-component vector of float) +0:380 'inFV1' (in 3-component vector of float) +0:380 move second child to first child (temp 3-component vector of float) +0:380 'r4' (temp 3-component vector of float) +0:380 matrix-times-vector (temp 3-component vector of float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 'inFV0' (in 3-component vector of float) +0:380 move second child to first child (temp 3-component vector of float) +0:380 'r5' (temp 3-component vector of float) +0:380 vector-times-matrix (temp 3-component vector of float) +0:380 'inFV0' (in 3-component vector of float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 move second child to first child (temp 3X3 matrix of float) +0:380 'r6' (temp 3X3 matrix of float) +0:380 matrix-scale (temp 3X3 matrix of float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 'inF0' (in float) +0:380 move second child to first child (temp 3X3 matrix of float) +0:380 'r7' (temp 3X3 matrix of float) +0:380 matrix-scale (temp 3X3 matrix of float) +0:380 'inF0' (in float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 move second child to first child (temp 3X3 matrix of float) +0:380 'r8' (temp 3X3 matrix of float) +0:380 matrix-multiply (temp 3X3 matrix of float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 'inFM1' (in 3X3 matrix of float) +0:389 Function Definition: TestGenMul(f1;f1;vf4;vf4;mf44;mf44; (temp void) +0:386 Function Parameters: +0:386 'inF0' (in float) +0:386 'inF1' (in float) +0:386 'inFV0' (in 4-component vector of float) +0:386 'inFV1' (in 4-component vector of float) +0:386 'inFM0' (in 4X4 matrix of float) +0:386 'inFM1' (in 4X4 matrix of float) +0:? Sequence +0:387 move second child to first child (temp float) +0:387 'r0' (temp float) +0:387 component-wise multiply (temp float) +0:387 'inF0' (in float) +0:387 'inF1' (in float) +0:387 move second child to first child (temp 4-component vector of float) +0:387 'r1' (temp 4-component vector of float) +0:387 vector-scale (temp 4-component vector of float) +0:387 'inFV0' (in 4-component vector of float) +0:387 'inF0' (in float) +0:387 move second child to first child (temp 4-component vector of float) +0:387 'r2' (temp 4-component vector of float) +0:387 vector-scale (temp 4-component vector of float) +0:387 'inF0' (in float) +0:387 'inFV0' (in 4-component vector of float) +0:387 move second child to first child (temp float) +0:387 'r3' (temp float) +0:387 dot-product (global float) +0:387 'inFV0' (in 4-component vector of float) +0:387 'inFV1' (in 4-component vector of float) +0:387 move second child to first child (temp 4-component vector of float) +0:387 'r4' (temp 4-component vector of float) +0:387 matrix-times-vector (temp 4-component vector of float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 'inFV0' (in 4-component vector of float) +0:387 move second child to first child (temp 4-component vector of float) +0:387 'r5' (temp 4-component vector of float) +0:387 vector-times-matrix (temp 4-component vector of float) +0:387 'inFV0' (in 4-component vector of float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 move second child to first child (temp 4X4 matrix of float) +0:387 'r6' (temp 4X4 matrix of float) +0:387 matrix-scale (temp 4X4 matrix of float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 'inF0' (in float) +0:387 move second child to first child (temp 4X4 matrix of float) +0:387 'r7' (temp 4X4 matrix of float) +0:387 matrix-scale (temp 4X4 matrix of float) +0:387 'inF0' (in float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 move second child to first child (temp 4X4 matrix of float) +0:387 'r8' (temp 4X4 matrix of float) +0:387 matrix-multiply (temp 4X4 matrix of float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 'inFM1' (in 4X4 matrix of float) +0:? Linker Objects + + +Linked vertex stage: + + +Shader version: 450 +0:? Sequence +0:62 Function Definition: VertexShaderFunction(f1;f1;f1;u1;u1; (temp float) +0:2 Function Parameters: +0:2 'inF0' (in float) +0:2 'inF1' (in float) +0:2 'inF2' (in float) +0:2 'inU0' (in uint) +0:2 'inU1' (in uint) +0:? Sequence +0:3 all (global bool) +0:3 'inF0' (in float) +0:4 Absolute value (global float) +0:4 'inF0' (in float) +0:5 arc cosine (global float) +0:5 'inF0' (in float) +0:6 any (global bool) +0:6 'inF0' (in float) +0:7 arc sine (global float) +0:7 'inF0' (in float) +0:8 floatBitsToInt (global int) +0:8 'inF0' (in float) +0:9 floatBitsToUint (global uint) +0:9 'inF0' (in float) +0:10 intBitsToFloat (global float) +0:10 'inU0' (in uint) +0:12 arc tangent (global float) +0:12 'inF0' (in float) +0:13 arc tangent (global float) +0:13 'inF0' (in float) +0:13 'inF1' (in float) +0:14 Ceiling (global float) +0:14 'inF0' (in float) +0:15 clamp (global float) +0:15 'inF0' (in float) +0:15 'inF1' (in float) +0:15 'inF2' (in float) +0:16 cosine (global float) +0:16 'inF0' (in float) +0:17 hyp. cosine (global float) +0:17 'inF0' (in float) +0:18 bitCount (global uint) +0:18 Constant: +0:18 7 (const uint) +0:19 degrees (global float) +0:19 'inF0' (in float) +0:23 exp (global float) +0:23 'inF0' (in float) +0:24 exp2 (global float) +0:24 'inF0' (in float) +0:25 findMSB (global int) +0:25 Constant: +0:25 7 (const int) +0:26 findLSB (global int) +0:26 Constant: +0:26 7 (const int) +0:27 Floor (global float) +0:27 'inF0' (in float) +0:29 mod (global float) +0:29 'inF0' (in float) +0:29 'inF1' (in float) +0:30 Fraction (global float) +0:30 'inF0' (in float) +0:31 frexp (global float) +0:31 'inF0' (in float) +0:31 'inF1' (in float) +0:32 isinf (global bool) +0:32 'inF0' (in float) +0:33 isnan (global bool) +0:33 'inF0' (in float) +0:34 ldexp (global float) +0:34 'inF0' (in float) +0:34 'inF1' (in float) +0:35 log (global float) +0:35 'inF0' (in float) +0:36 component-wise multiply (temp float) +0:36 log2 (temp float) +0:36 'inF0' (in float) +0:36 Constant: +0:36 0.301030 +0:37 log2 (global float) +0:37 'inF0' (in float) +0:38 max (global float) +0:38 'inF0' (in float) +0:38 'inF1' (in float) +0:39 min (global float) +0:39 'inF0' (in float) +0:39 'inF1' (in float) +0:41 pow (global float) +0:41 'inF0' (in float) +0:41 'inF1' (in float) +0:42 radians (global float) +0:42 'inF0' (in float) +0:43 bitFieldReverse (global uint) +0:43 Constant: +0:43 2 (const uint) +0:44 roundEven (global float) +0:44 'inF0' (in float) +0:45 inverse sqrt (global float) +0:45 'inF0' (in float) +0:46 clamp (temp float) +0:46 'inF0' (in float) +0:46 Constant: +0:46 0.000000 +0:46 Constant: +0:46 1.000000 +0:47 Sign (global float) +0:47 'inF0' (in float) +0:48 sine (global float) +0:48 'inF0' (in float) +0:49 Sequence +0:49 move second child to first child (temp float) +0:49 'inF1' (in float) +0:49 sine (temp float) +0:49 'inF0' (in float) +0:49 move second child to first child (temp float) +0:49 'inF2' (in float) +0:49 cosine (temp float) +0:49 'inF0' (in float) +0:50 hyp. sine (global float) +0:50 'inF0' (in float) +0:51 smoothstep (global float) +0:51 'inF0' (in float) +0:51 'inF1' (in float) +0:51 'inF2' (in float) +0:52 sqrt (global float) +0:52 'inF0' (in float) +0:53 step (global float) +0:53 'inF0' (in float) +0:53 'inF1' (in float) +0:54 tangent (global float) +0:54 'inF0' (in float) +0:55 hyp. tangent (global float) +0:55 'inF0' (in float) +0:57 trunc (global float) +0:57 'inF0' (in float) +0:59 Branch: Return with expression +0:59 Constant: +0:59 0.000000 +0:68 Function Definition: VertexShaderFunction(vf1;vf1;vf1; (temp 1-component vector of float) +0:63 Function Parameters: +0:63 'inF0' (in 1-component vector of float) +0:63 'inF1' (in 1-component vector of float) +0:63 'inF2' (in 1-component vector of float) +0:? Sequence +0:65 Branch: Return with expression +0:65 Constant: +0:65 0.000000 +0:137 Function Definition: VertexShaderFunction(vf2;vf2;vf2;vu2;vu2; (temp 2-component vector of float) +0:69 Function Parameters: +0:69 'inF0' (in 2-component vector of float) +0:69 'inF1' (in 2-component vector of float) +0:69 'inF2' (in 2-component vector of float) +0:69 'inU0' (in 2-component vector of uint) +0:69 'inU1' (in 2-component vector of uint) +0:? Sequence +0:70 all (global bool) +0:70 'inF0' (in 2-component vector of float) +0:71 Absolute value (global 2-component vector of float) +0:71 'inF0' (in 2-component vector of float) +0:72 arc cosine (global 2-component vector of float) +0:72 'inF0' (in 2-component vector of float) +0:73 any (global bool) +0:73 'inF0' (in 2-component vector of float) +0:74 arc sine (global 2-component vector of float) +0:74 'inF0' (in 2-component vector of float) +0:75 floatBitsToInt (global 2-component vector of int) +0:75 'inF0' (in 2-component vector of float) +0:76 floatBitsToUint (global 2-component vector of uint) +0:76 'inF0' (in 2-component vector of float) +0:77 intBitsToFloat (global 2-component vector of float) +0:77 'inU0' (in 2-component vector of uint) +0:79 arc tangent (global 2-component vector of float) +0:79 'inF0' (in 2-component vector of float) +0:80 arc tangent (global 2-component vector of float) +0:80 'inF0' (in 2-component vector of float) +0:80 'inF1' (in 2-component vector of float) +0:81 Ceiling (global 2-component vector of float) +0:81 'inF0' (in 2-component vector of float) +0:82 clamp (global 2-component vector of float) +0:82 'inF0' (in 2-component vector of float) +0:82 'inF1' (in 2-component vector of float) +0:82 'inF2' (in 2-component vector of float) +0:83 cosine (global 2-component vector of float) +0:83 'inF0' (in 2-component vector of float) +0:84 hyp. cosine (global 2-component vector of float) +0:84 'inF0' (in 2-component vector of float) +0:? bitCount (global 2-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:86 degrees (global 2-component vector of float) +0:86 'inF0' (in 2-component vector of float) +0:87 distance (global float) +0:87 'inF0' (in 2-component vector of float) +0:87 'inF1' (in 2-component vector of float) +0:88 dot-product (global float) +0:88 'inF0' (in 2-component vector of float) +0:88 'inF1' (in 2-component vector of float) +0:92 exp (global 2-component vector of float) +0:92 'inF0' (in 2-component vector of float) +0:93 exp2 (global 2-component vector of float) +0:93 'inF0' (in 2-component vector of float) +0:94 face-forward (global 2-component vector of float) +0:94 'inF0' (in 2-component vector of float) +0:94 'inF1' (in 2-component vector of float) +0:94 'inF2' (in 2-component vector of float) +0:95 findMSB (global int) +0:95 Constant: +0:95 7 (const int) +0:96 findLSB (global int) +0:96 Constant: +0:96 7 (const int) +0:97 Floor (global 2-component vector of float) +0:97 'inF0' (in 2-component vector of float) +0:99 mod (global 2-component vector of float) +0:99 'inF0' (in 2-component vector of float) +0:99 'inF1' (in 2-component vector of float) +0:100 Fraction (global 2-component vector of float) +0:100 'inF0' (in 2-component vector of float) +0:101 frexp (global 2-component vector of float) +0:101 'inF0' (in 2-component vector of float) +0:101 'inF1' (in 2-component vector of float) +0:102 isinf (global 2-component vector of bool) +0:102 'inF0' (in 2-component vector of float) +0:103 isnan (global 2-component vector of bool) +0:103 'inF0' (in 2-component vector of float) +0:104 ldexp (global 2-component vector of float) +0:104 'inF0' (in 2-component vector of float) +0:104 'inF1' (in 2-component vector of float) +0:105 length (global float) +0:105 'inF0' (in 2-component vector of float) +0:106 log (global 2-component vector of float) +0:106 'inF0' (in 2-component vector of float) +0:107 vector-scale (temp 2-component vector of float) +0:107 log2 (temp 2-component vector of float) +0:107 'inF0' (in 2-component vector of float) +0:107 Constant: +0:107 0.301030 +0:108 log2 (global 2-component vector of float) +0:108 'inF0' (in 2-component vector of float) +0:109 max (global 2-component vector of float) +0:109 'inF0' (in 2-component vector of float) +0:109 'inF1' (in 2-component vector of float) +0:110 min (global 2-component vector of float) +0:110 'inF0' (in 2-component vector of float) +0:110 'inF1' (in 2-component vector of float) +0:112 normalize (global 2-component vector of float) +0:112 'inF0' (in 2-component vector of float) +0:113 pow (global 2-component vector of float) +0:113 'inF0' (in 2-component vector of float) +0:113 'inF1' (in 2-component vector of float) +0:114 radians (global 2-component vector of float) +0:114 'inF0' (in 2-component vector of float) +0:115 reflect (global 2-component vector of float) +0:115 'inF0' (in 2-component vector of float) +0:115 'inF1' (in 2-component vector of float) +0:116 refract (global 2-component vector of float) +0:116 'inF0' (in 2-component vector of float) +0:116 'inF1' (in 2-component vector of float) +0:116 Constant: +0:116 2.000000 +0:? bitFieldReverse (global 2-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:118 roundEven (global 2-component vector of float) +0:118 'inF0' (in 2-component vector of float) +0:119 inverse sqrt (global 2-component vector of float) +0:119 'inF0' (in 2-component vector of float) +0:120 clamp (temp 2-component vector of float) +0:120 'inF0' (in 2-component vector of float) +0:120 Constant: +0:120 0.000000 +0:120 Constant: +0:120 1.000000 +0:121 Sign (global 2-component vector of float) +0:121 'inF0' (in 2-component vector of float) +0:122 sine (global 2-component vector of float) +0:122 'inF0' (in 2-component vector of float) +0:123 Sequence +0:123 move second child to first child (temp 2-component vector of float) +0:123 'inF1' (in 2-component vector of float) +0:123 sine (temp 2-component vector of float) +0:123 'inF0' (in 2-component vector of float) +0:123 move second child to first child (temp 2-component vector of float) +0:123 'inF2' (in 2-component vector of float) +0:123 cosine (temp 2-component vector of float) +0:123 'inF0' (in 2-component vector of float) +0:124 hyp. sine (global 2-component vector of float) +0:124 'inF0' (in 2-component vector of float) +0:125 smoothstep (global 2-component vector of float) +0:125 'inF0' (in 2-component vector of float) +0:125 'inF1' (in 2-component vector of float) +0:125 'inF2' (in 2-component vector of float) +0:126 sqrt (global 2-component vector of float) +0:126 'inF0' (in 2-component vector of float) +0:127 step (global 2-component vector of float) +0:127 'inF0' (in 2-component vector of float) +0:127 'inF1' (in 2-component vector of float) +0:128 tangent (global 2-component vector of float) +0:128 'inF0' (in 2-component vector of float) +0:129 hyp. tangent (global 2-component vector of float) +0:129 'inF0' (in 2-component vector of float) +0:131 trunc (global 2-component vector of float) +0:131 'inF0' (in 2-component vector of float) +0:134 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:207 Function Definition: VertexShaderFunction(vf3;vf3;vf3;vu3;vu3; (temp 3-component vector of float) +0:138 Function Parameters: +0:138 'inF0' (in 3-component vector of float) +0:138 'inF1' (in 3-component vector of float) +0:138 'inF2' (in 3-component vector of float) +0:138 'inU0' (in 3-component vector of uint) +0:138 'inU1' (in 3-component vector of uint) +0:? Sequence +0:139 all (global bool) +0:139 'inF0' (in 3-component vector of float) +0:140 Absolute value (global 3-component vector of float) +0:140 'inF0' (in 3-component vector of float) +0:141 arc cosine (global 3-component vector of float) +0:141 'inF0' (in 3-component vector of float) +0:142 any (global bool) +0:142 'inF0' (in 3-component vector of float) +0:143 arc sine (global 3-component vector of float) +0:143 'inF0' (in 3-component vector of float) +0:144 floatBitsToInt (global 3-component vector of int) +0:144 'inF0' (in 3-component vector of float) +0:145 floatBitsToUint (global 3-component vector of uint) +0:145 'inF0' (in 3-component vector of float) +0:146 intBitsToFloat (global 3-component vector of float) +0:146 'inU0' (in 3-component vector of uint) +0:148 arc tangent (global 3-component vector of float) +0:148 'inF0' (in 3-component vector of float) +0:149 arc tangent (global 3-component vector of float) +0:149 'inF0' (in 3-component vector of float) +0:149 'inF1' (in 3-component vector of float) +0:150 Ceiling (global 3-component vector of float) +0:150 'inF0' (in 3-component vector of float) +0:151 clamp (global 3-component vector of float) +0:151 'inF0' (in 3-component vector of float) +0:151 'inF1' (in 3-component vector of float) +0:151 'inF2' (in 3-component vector of float) +0:152 cosine (global 3-component vector of float) +0:152 'inF0' (in 3-component vector of float) +0:153 hyp. cosine (global 3-component vector of float) +0:153 'inF0' (in 3-component vector of float) +0:? bitCount (global 3-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:? 5 (const uint) +0:155 cross-product (global 3-component vector of float) +0:155 'inF0' (in 3-component vector of float) +0:155 'inF1' (in 3-component vector of float) +0:156 degrees (global 3-component vector of float) +0:156 'inF0' (in 3-component vector of float) +0:157 distance (global float) +0:157 'inF0' (in 3-component vector of float) +0:157 'inF1' (in 3-component vector of float) +0:158 dot-product (global float) +0:158 'inF0' (in 3-component vector of float) +0:158 'inF1' (in 3-component vector of float) +0:162 exp (global 3-component vector of float) +0:162 'inF0' (in 3-component vector of float) +0:163 exp2 (global 3-component vector of float) +0:163 'inF0' (in 3-component vector of float) +0:164 face-forward (global 3-component vector of float) +0:164 'inF0' (in 3-component vector of float) +0:164 'inF1' (in 3-component vector of float) +0:164 'inF2' (in 3-component vector of float) +0:165 findMSB (global int) +0:165 Constant: +0:165 7 (const int) +0:166 findLSB (global int) +0:166 Constant: +0:166 7 (const int) +0:167 Floor (global 3-component vector of float) +0:167 'inF0' (in 3-component vector of float) +0:169 mod (global 3-component vector of float) +0:169 'inF0' (in 3-component vector of float) +0:169 'inF1' (in 3-component vector of float) +0:170 Fraction (global 3-component vector of float) +0:170 'inF0' (in 3-component vector of float) +0:171 frexp (global 3-component vector of float) +0:171 'inF0' (in 3-component vector of float) +0:171 'inF1' (in 3-component vector of float) +0:172 isinf (global 3-component vector of bool) +0:172 'inF0' (in 3-component vector of float) +0:173 isnan (global 3-component vector of bool) +0:173 'inF0' (in 3-component vector of float) +0:174 ldexp (global 3-component vector of float) +0:174 'inF0' (in 3-component vector of float) +0:174 'inF1' (in 3-component vector of float) +0:175 length (global float) +0:175 'inF0' (in 3-component vector of float) +0:176 log (global 3-component vector of float) +0:176 'inF0' (in 3-component vector of float) +0:177 vector-scale (temp 3-component vector of float) +0:177 log2 (temp 3-component vector of float) +0:177 'inF0' (in 3-component vector of float) +0:177 Constant: +0:177 0.301030 +0:178 log2 (global 3-component vector of float) +0:178 'inF0' (in 3-component vector of float) +0:179 max (global 3-component vector of float) +0:179 'inF0' (in 3-component vector of float) +0:179 'inF1' (in 3-component vector of float) +0:180 min (global 3-component vector of float) +0:180 'inF0' (in 3-component vector of float) +0:180 'inF1' (in 3-component vector of float) +0:182 normalize (global 3-component vector of float) +0:182 'inF0' (in 3-component vector of float) +0:183 pow (global 3-component vector of float) +0:183 'inF0' (in 3-component vector of float) +0:183 'inF1' (in 3-component vector of float) +0:184 radians (global 3-component vector of float) +0:184 'inF0' (in 3-component vector of float) +0:185 reflect (global 3-component vector of float) +0:185 'inF0' (in 3-component vector of float) +0:185 'inF1' (in 3-component vector of float) +0:186 refract (global 3-component vector of float) +0:186 'inF0' (in 3-component vector of float) +0:186 'inF1' (in 3-component vector of float) +0:186 Constant: +0:186 2.000000 +0:? bitFieldReverse (global 3-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:188 roundEven (global 3-component vector of float) +0:188 'inF0' (in 3-component vector of float) +0:189 inverse sqrt (global 3-component vector of float) +0:189 'inF0' (in 3-component vector of float) +0:190 clamp (temp 3-component vector of float) +0:190 'inF0' (in 3-component vector of float) +0:190 Constant: +0:190 0.000000 +0:190 Constant: +0:190 1.000000 +0:191 Sign (global 3-component vector of float) +0:191 'inF0' (in 3-component vector of float) +0:192 sine (global 3-component vector of float) +0:192 'inF0' (in 3-component vector of float) +0:193 Sequence +0:193 move second child to first child (temp 3-component vector of float) +0:193 'inF1' (in 3-component vector of float) +0:193 sine (temp 3-component vector of float) +0:193 'inF0' (in 3-component vector of float) +0:193 move second child to first child (temp 3-component vector of float) +0:193 'inF2' (in 3-component vector of float) +0:193 cosine (temp 3-component vector of float) +0:193 'inF0' (in 3-component vector of float) +0:194 hyp. sine (global 3-component vector of float) +0:194 'inF0' (in 3-component vector of float) +0:195 smoothstep (global 3-component vector of float) +0:195 'inF0' (in 3-component vector of float) +0:195 'inF1' (in 3-component vector of float) +0:195 'inF2' (in 3-component vector of float) +0:196 sqrt (global 3-component vector of float) +0:196 'inF0' (in 3-component vector of float) +0:197 step (global 3-component vector of float) +0:197 'inF0' (in 3-component vector of float) +0:197 'inF1' (in 3-component vector of float) +0:198 tangent (global 3-component vector of float) +0:198 'inF0' (in 3-component vector of float) +0:199 hyp. tangent (global 3-component vector of float) +0:199 'inF0' (in 3-component vector of float) +0:201 trunc (global 3-component vector of float) +0:201 'inF0' (in 3-component vector of float) +0:204 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:330 Function Definition: VertexShaderFunction(vf4;vf4;vf4;vu4;vu4; (temp 4-component vector of float) +0:208 Function Parameters: +0:208 'inF0' (in 4-component vector of float) +0:208 'inF1' (in 4-component vector of float) +0:208 'inF2' (in 4-component vector of float) +0:208 'inU0' (in 4-component vector of uint) +0:208 'inU1' (in 4-component vector of uint) +0:? Sequence +0:209 all (global bool) +0:209 'inF0' (in 4-component vector of float) +0:210 Absolute value (global 4-component vector of float) +0:210 'inF0' (in 4-component vector of float) +0:211 arc cosine (global 4-component vector of float) +0:211 'inF0' (in 4-component vector of float) +0:212 any (global bool) +0:212 'inF0' (in 4-component vector of float) +0:213 arc sine (global 4-component vector of float) +0:213 'inF0' (in 4-component vector of float) +0:214 floatBitsToInt (global 4-component vector of int) +0:214 'inF0' (in 4-component vector of float) +0:215 floatBitsToUint (global 4-component vector of uint) +0:215 'inF0' (in 4-component vector of float) +0:216 intBitsToFloat (global 4-component vector of float) +0:216 'inU0' (in 4-component vector of uint) +0:218 arc tangent (global 4-component vector of float) +0:218 'inF0' (in 4-component vector of float) +0:219 arc tangent (global 4-component vector of float) +0:219 'inF0' (in 4-component vector of float) +0:219 'inF1' (in 4-component vector of float) +0:220 Ceiling (global 4-component vector of float) +0:220 'inF0' (in 4-component vector of float) +0:221 clamp (global 4-component vector of float) +0:221 'inF0' (in 4-component vector of float) +0:221 'inF1' (in 4-component vector of float) +0:221 'inF2' (in 4-component vector of float) +0:222 cosine (global 4-component vector of float) +0:222 'inF0' (in 4-component vector of float) +0:223 hyp. cosine (global 4-component vector of float) +0:223 'inF0' (in 4-component vector of float) +0:? bitCount (global 4-component vector of uint) +0:? Constant: +0:? 7 (const uint) +0:? 3 (const uint) +0:? 5 (const uint) +0:? 2 (const uint) +0:225 degrees (global 4-component vector of float) +0:225 'inF0' (in 4-component vector of float) +0:226 distance (global float) +0:226 'inF0' (in 4-component vector of float) +0:226 'inF1' (in 4-component vector of float) +0:227 dot-product (global float) +0:227 'inF0' (in 4-component vector of float) +0:227 'inF1' (in 4-component vector of float) +0:228 Construct vec4 (temp 4-component vector of float) +0:228 Constant: +0:228 1.000000 +0:228 component-wise multiply (temp float) +0:228 direct index (temp float) +0:228 'inF0' (in 4-component vector of float) +0:228 Constant: +0:228 1 (const int) +0:228 direct index (temp float) +0:228 'inF1' (in 4-component vector of float) +0:228 Constant: +0:228 1 (const int) +0:228 direct index (temp float) +0:228 'inF0' (in 4-component vector of float) +0:228 Constant: +0:228 2 (const int) +0:228 direct index (temp float) +0:228 'inF1' (in 4-component vector of float) +0:228 Constant: +0:228 3 (const int) +0:232 exp (global 4-component vector of float) +0:232 'inF0' (in 4-component vector of float) +0:233 exp2 (global 4-component vector of float) +0:233 'inF0' (in 4-component vector of float) +0:234 face-forward (global 4-component vector of float) +0:234 'inF0' (in 4-component vector of float) +0:234 'inF1' (in 4-component vector of float) +0:234 'inF2' (in 4-component vector of float) +0:235 findMSB (global int) +0:235 Constant: +0:235 7 (const int) +0:236 findLSB (global int) +0:236 Constant: +0:236 7 (const int) +0:237 Floor (global 4-component vector of float) +0:237 'inF0' (in 4-component vector of float) +0:239 mod (global 4-component vector of float) +0:239 'inF0' (in 4-component vector of float) +0:239 'inF1' (in 4-component vector of float) +0:240 Fraction (global 4-component vector of float) +0:240 'inF0' (in 4-component vector of float) +0:241 frexp (global 4-component vector of float) +0:241 'inF0' (in 4-component vector of float) +0:241 'inF1' (in 4-component vector of float) +0:242 isinf (global 4-component vector of bool) +0:242 'inF0' (in 4-component vector of float) +0:243 isnan (global 4-component vector of bool) +0:243 'inF0' (in 4-component vector of float) +0:244 ldexp (global 4-component vector of float) +0:244 'inF0' (in 4-component vector of float) +0:244 'inF1' (in 4-component vector of float) +0:245 length (global float) +0:245 'inF0' (in 4-component vector of float) +0:246 log (global 4-component vector of float) +0:246 'inF0' (in 4-component vector of float) +0:247 vector-scale (temp 4-component vector of float) +0:247 log2 (temp 4-component vector of float) +0:247 'inF0' (in 4-component vector of float) +0:247 Constant: +0:247 0.301030 +0:248 log2 (global 4-component vector of float) +0:248 'inF0' (in 4-component vector of float) +0:249 max (global 4-component vector of float) +0:249 'inF0' (in 4-component vector of float) +0:249 'inF1' (in 4-component vector of float) +0:250 min (global 4-component vector of float) +0:250 'inF0' (in 4-component vector of float) +0:250 'inF1' (in 4-component vector of float) +0:252 normalize (global 4-component vector of float) +0:252 'inF0' (in 4-component vector of float) +0:253 pow (global 4-component vector of float) +0:253 'inF0' (in 4-component vector of float) +0:253 'inF1' (in 4-component vector of float) +0:254 radians (global 4-component vector of float) +0:254 'inF0' (in 4-component vector of float) +0:255 reflect (global 4-component vector of float) +0:255 'inF0' (in 4-component vector of float) +0:255 'inF1' (in 4-component vector of float) +0:256 refract (global 4-component vector of float) +0:256 'inF0' (in 4-component vector of float) +0:256 'inF1' (in 4-component vector of float) +0:256 Constant: +0:256 2.000000 +0:? bitFieldReverse (global 4-component vector of uint) +0:? Constant: +0:? 1 (const uint) +0:? 2 (const uint) +0:? 3 (const uint) +0:? 4 (const uint) +0:258 roundEven (global 4-component vector of float) +0:258 'inF0' (in 4-component vector of float) +0:259 inverse sqrt (global 4-component vector of float) +0:259 'inF0' (in 4-component vector of float) +0:260 clamp (temp 4-component vector of float) +0:260 'inF0' (in 4-component vector of float) +0:260 Constant: +0:260 0.000000 +0:260 Constant: +0:260 1.000000 +0:261 Sign (global 4-component vector of float) +0:261 'inF0' (in 4-component vector of float) +0:262 sine (global 4-component vector of float) +0:262 'inF0' (in 4-component vector of float) +0:263 Sequence +0:263 move second child to first child (temp 4-component vector of float) +0:263 'inF1' (in 4-component vector of float) +0:263 sine (temp 4-component vector of float) +0:263 'inF0' (in 4-component vector of float) +0:263 move second child to first child (temp 4-component vector of float) +0:263 'inF2' (in 4-component vector of float) +0:263 cosine (temp 4-component vector of float) +0:263 'inF0' (in 4-component vector of float) +0:264 hyp. sine (global 4-component vector of float) +0:264 'inF0' (in 4-component vector of float) +0:265 smoothstep (global 4-component vector of float) +0:265 'inF0' (in 4-component vector of float) +0:265 'inF1' (in 4-component vector of float) +0:265 'inF2' (in 4-component vector of float) +0:266 sqrt (global 4-component vector of float) +0:266 'inF0' (in 4-component vector of float) +0:267 step (global 4-component vector of float) +0:267 'inF0' (in 4-component vector of float) +0:267 'inF1' (in 4-component vector of float) +0:268 tangent (global 4-component vector of float) +0:268 'inF0' (in 4-component vector of float) +0:269 hyp. tangent (global 4-component vector of float) +0:269 'inF0' (in 4-component vector of float) +0:271 trunc (global 4-component vector of float) +0:271 'inF0' (in 4-component vector of float) +0:274 Branch: Return with expression +0:? Constant: +0:? 1.000000 +0:? 2.000000 +0:? 3.000000 +0:? 4.000000 +0:339 Function Definition: VertexShaderFunction(mf22;mf22;mf22; (temp 2X2 matrix of float) +0:331 Function Parameters: +0:331 'inF0' (in 2X2 matrix of float) +0:331 'inF1' (in 2X2 matrix of float) +0:331 'inF2' (in 2X2 matrix of float) +0:? Sequence +0:333 all (global bool) +0:333 'inF0' (in 2X2 matrix of float) +0:333 Absolute value (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 arc cosine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 any (global bool) +0:333 'inF0' (in 2X2 matrix of float) +0:333 arc sine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 arc tangent (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 arc tangent (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 Ceiling (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 clamp (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 'inF2' (in 2X2 matrix of float) +0:333 cosine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 hyp. cosine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 degrees (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 determinant (global float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 exp (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 exp2 (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 findMSB (global int) +0:333 Constant: +0:333 7 (const int) +0:333 findLSB (global int) +0:333 Constant: +0:333 7 (const int) +0:333 Floor (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 mod (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 Fraction (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 frexp (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 ldexp (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 log (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 matrix-scale (temp 2X2 matrix of float) +0:333 log2 (temp 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 Constant: +0:333 0.301030 +0:333 log2 (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 max (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 min (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 pow (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 radians (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 roundEven (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 inverse sqrt (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 clamp (temp 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 Constant: +0:333 0.000000 +0:333 Constant: +0:333 1.000000 +0:333 Sign (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 sine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 Sequence +0:333 move second child to first child (temp 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 sine (temp 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 move second child to first child (temp 2X2 matrix of float) +0:333 'inF2' (in 2X2 matrix of float) +0:333 cosine (temp 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 hyp. sine (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 smoothstep (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 'inF2' (in 2X2 matrix of float) +0:333 sqrt (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 step (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 'inF1' (in 2X2 matrix of float) +0:333 tangent (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 hyp. tangent (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 transpose (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:333 trunc (global 2X2 matrix of float) +0:333 'inF0' (in 2X2 matrix of float) +0:336 Branch: Return with expression +0:? Constant: +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:? 2.000000 +0:348 Function Definition: VertexShaderFunction(mf33;mf33;mf33; (temp 3X3 matrix of float) +0:340 Function Parameters: +0:340 'inF0' (in 3X3 matrix of float) +0:340 'inF1' (in 3X3 matrix of float) +0:340 'inF2' (in 3X3 matrix of float) +0:? Sequence +0:342 all (global bool) +0:342 'inF0' (in 3X3 matrix of float) +0:342 Absolute value (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 arc cosine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 any (global bool) +0:342 'inF0' (in 3X3 matrix of float) +0:342 arc sine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 arc tangent (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 arc tangent (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 Ceiling (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 clamp (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 'inF2' (in 3X3 matrix of float) +0:342 cosine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 hyp. cosine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 degrees (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 determinant (global float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 exp (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 exp2 (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 findMSB (global int) +0:342 Constant: +0:342 7 (const int) +0:342 findLSB (global int) +0:342 Constant: +0:342 7 (const int) +0:342 Floor (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 mod (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 Fraction (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 frexp (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 ldexp (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 log (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 matrix-scale (temp 3X3 matrix of float) +0:342 log2 (temp 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 Constant: +0:342 0.301030 +0:342 log2 (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 max (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 min (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 pow (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 radians (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 roundEven (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 inverse sqrt (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 clamp (temp 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 Constant: +0:342 0.000000 +0:342 Constant: +0:342 1.000000 +0:342 Sign (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 sine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 Sequence +0:342 move second child to first child (temp 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 sine (temp 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 move second child to first child (temp 3X3 matrix of float) +0:342 'inF2' (in 3X3 matrix of float) +0:342 cosine (temp 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 hyp. sine (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 smoothstep (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 'inF2' (in 3X3 matrix of float) +0:342 sqrt (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 step (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 'inF1' (in 3X3 matrix of float) +0:342 tangent (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 hyp. tangent (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 transpose (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:342 trunc (global 3X3 matrix of float) +0:342 'inF0' (in 3X3 matrix of float) +0:345 Branch: Return with expression +0:? Constant: +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:? 3.000000 +0:369 Function Definition: VertexShaderFunction(mf44;mf44;mf44; (temp 4X4 matrix of float) +0:349 Function Parameters: +0:349 'inF0' (in 4X4 matrix of float) +0:349 'inF1' (in 4X4 matrix of float) +0:349 'inF2' (in 4X4 matrix of float) +0:? Sequence +0:351 all (global bool) +0:351 'inF0' (in 4X4 matrix of float) +0:351 Absolute value (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 arc cosine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 any (global bool) +0:351 'inF0' (in 4X4 matrix of float) +0:351 arc sine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 arc tangent (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 arc tangent (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 Ceiling (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 clamp (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 'inF2' (in 4X4 matrix of float) +0:351 cosine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 hyp. cosine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 degrees (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 determinant (global float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 exp (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 exp2 (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 findMSB (global int) +0:351 Constant: +0:351 7 (const int) +0:351 findLSB (global int) +0:351 Constant: +0:351 7 (const int) +0:351 Floor (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 mod (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 Fraction (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 frexp (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 ldexp (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 log (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 matrix-scale (temp 4X4 matrix of float) +0:351 log2 (temp 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 Constant: +0:351 0.301030 +0:351 log2 (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 max (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 min (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 pow (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 radians (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 roundEven (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 inverse sqrt (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 clamp (temp 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 Constant: +0:351 0.000000 +0:351 Constant: +0:351 1.000000 +0:351 Sign (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 sine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 Sequence +0:351 move second child to first child (temp 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 sine (temp 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 move second child to first child (temp 4X4 matrix of float) +0:351 'inF2' (in 4X4 matrix of float) +0:351 cosine (temp 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 hyp. sine (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 smoothstep (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 'inF2' (in 4X4 matrix of float) +0:351 sqrt (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 step (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 'inF1' (in 4X4 matrix of float) +0:351 tangent (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 hyp. tangent (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 transpose (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:351 trunc (global 4X4 matrix of float) +0:351 'inF0' (in 4X4 matrix of float) +0:354 Branch: Return with expression +0:? Constant: +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:? 4.000000 +0:376 Function Definition: TestGenMul(f1;f1;vf2;vf2;mf22;mf22; (temp void) +0:372 Function Parameters: +0:372 'inF0' (in float) +0:372 'inF1' (in float) +0:372 'inFV0' (in 2-component vector of float) +0:372 'inFV1' (in 2-component vector of float) +0:372 'inFM0' (in 2X2 matrix of float) +0:372 'inFM1' (in 2X2 matrix of float) +0:? Sequence +0:373 move second child to first child (temp float) +0:373 'r0' (temp float) +0:373 component-wise multiply (temp float) +0:373 'inF0' (in float) +0:373 'inF1' (in float) +0:373 move second child to first child (temp 2-component vector of float) +0:373 'r1' (temp 2-component vector of float) +0:373 vector-scale (temp 2-component vector of float) +0:373 'inFV0' (in 2-component vector of float) +0:373 'inF0' (in float) +0:373 move second child to first child (temp 2-component vector of float) +0:373 'r2' (temp 2-component vector of float) +0:373 vector-scale (temp 2-component vector of float) +0:373 'inF0' (in float) +0:373 'inFV0' (in 2-component vector of float) +0:373 move second child to first child (temp float) +0:373 'r3' (temp float) +0:373 dot-product (global float) +0:373 'inFV0' (in 2-component vector of float) +0:373 'inFV1' (in 2-component vector of float) +0:373 move second child to first child (temp 2-component vector of float) +0:373 'r4' (temp 2-component vector of float) +0:373 matrix-times-vector (temp 2-component vector of float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 'inFV0' (in 2-component vector of float) +0:373 move second child to first child (temp 2-component vector of float) +0:373 'r5' (temp 2-component vector of float) +0:373 vector-times-matrix (temp 2-component vector of float) +0:373 'inFV0' (in 2-component vector of float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 move second child to first child (temp 2X2 matrix of float) +0:373 'r6' (temp 2X2 matrix of float) +0:373 matrix-scale (temp 2X2 matrix of float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 'inF0' (in float) +0:373 move second child to first child (temp 2X2 matrix of float) +0:373 'r7' (temp 2X2 matrix of float) +0:373 matrix-scale (temp 2X2 matrix of float) +0:373 'inF0' (in float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 move second child to first child (temp 2X2 matrix of float) +0:373 'r8' (temp 2X2 matrix of float) +0:373 matrix-multiply (temp 2X2 matrix of float) +0:373 'inFM0' (in 2X2 matrix of float) +0:373 'inFM1' (in 2X2 matrix of float) +0:383 Function Definition: TestGenMul(f1;f1;vf3;vf3;mf33;mf33; (temp void) +0:379 Function Parameters: +0:379 'inF0' (in float) +0:379 'inF1' (in float) +0:379 'inFV0' (in 3-component vector of float) +0:379 'inFV1' (in 3-component vector of float) +0:379 'inFM0' (in 3X3 matrix of float) +0:379 'inFM1' (in 3X3 matrix of float) +0:? Sequence +0:380 move second child to first child (temp float) +0:380 'r0' (temp float) +0:380 component-wise multiply (temp float) +0:380 'inF0' (in float) +0:380 'inF1' (in float) +0:380 move second child to first child (temp 3-component vector of float) +0:380 'r1' (temp 3-component vector of float) +0:380 vector-scale (temp 3-component vector of float) +0:380 'inFV0' (in 3-component vector of float) +0:380 'inF0' (in float) +0:380 move second child to first child (temp 3-component vector of float) +0:380 'r2' (temp 3-component vector of float) +0:380 vector-scale (temp 3-component vector of float) +0:380 'inF0' (in float) +0:380 'inFV0' (in 3-component vector of float) +0:380 move second child to first child (temp float) +0:380 'r3' (temp float) +0:380 dot-product (global float) +0:380 'inFV0' (in 3-component vector of float) +0:380 'inFV1' (in 3-component vector of float) +0:380 move second child to first child (temp 3-component vector of float) +0:380 'r4' (temp 3-component vector of float) +0:380 matrix-times-vector (temp 3-component vector of float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 'inFV0' (in 3-component vector of float) +0:380 move second child to first child (temp 3-component vector of float) +0:380 'r5' (temp 3-component vector of float) +0:380 vector-times-matrix (temp 3-component vector of float) +0:380 'inFV0' (in 3-component vector of float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 move second child to first child (temp 3X3 matrix of float) +0:380 'r6' (temp 3X3 matrix of float) +0:380 matrix-scale (temp 3X3 matrix of float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 'inF0' (in float) +0:380 move second child to first child (temp 3X3 matrix of float) +0:380 'r7' (temp 3X3 matrix of float) +0:380 matrix-scale (temp 3X3 matrix of float) +0:380 'inF0' (in float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 move second child to first child (temp 3X3 matrix of float) +0:380 'r8' (temp 3X3 matrix of float) +0:380 matrix-multiply (temp 3X3 matrix of float) +0:380 'inFM0' (in 3X3 matrix of float) +0:380 'inFM1' (in 3X3 matrix of float) +0:389 Function Definition: TestGenMul(f1;f1;vf4;vf4;mf44;mf44; (temp void) +0:386 Function Parameters: +0:386 'inF0' (in float) +0:386 'inF1' (in float) +0:386 'inFV0' (in 4-component vector of float) +0:386 'inFV1' (in 4-component vector of float) +0:386 'inFM0' (in 4X4 matrix of float) +0:386 'inFM1' (in 4X4 matrix of float) +0:? Sequence +0:387 move second child to first child (temp float) +0:387 'r0' (temp float) +0:387 component-wise multiply (temp float) +0:387 'inF0' (in float) +0:387 'inF1' (in float) +0:387 move second child to first child (temp 4-component vector of float) +0:387 'r1' (temp 4-component vector of float) +0:387 vector-scale (temp 4-component vector of float) +0:387 'inFV0' (in 4-component vector of float) +0:387 'inF0' (in float) +0:387 move second child to first child (temp 4-component vector of float) +0:387 'r2' (temp 4-component vector of float) +0:387 vector-scale (temp 4-component vector of float) +0:387 'inF0' (in float) +0:387 'inFV0' (in 4-component vector of float) +0:387 move second child to first child (temp float) +0:387 'r3' (temp float) +0:387 dot-product (global float) +0:387 'inFV0' (in 4-component vector of float) +0:387 'inFV1' (in 4-component vector of float) +0:387 move second child to first child (temp 4-component vector of float) +0:387 'r4' (temp 4-component vector of float) +0:387 matrix-times-vector (temp 4-component vector of float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 'inFV0' (in 4-component vector of float) +0:387 move second child to first child (temp 4-component vector of float) +0:387 'r5' (temp 4-component vector of float) +0:387 vector-times-matrix (temp 4-component vector of float) +0:387 'inFV0' (in 4-component vector of float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 move second child to first child (temp 4X4 matrix of float) +0:387 'r6' (temp 4X4 matrix of float) +0:387 matrix-scale (temp 4X4 matrix of float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 'inF0' (in float) +0:387 move second child to first child (temp 4X4 matrix of float) +0:387 'r7' (temp 4X4 matrix of float) +0:387 matrix-scale (temp 4X4 matrix of float) +0:387 'inF0' (in float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 move second child to first child (temp 4X4 matrix of float) +0:387 'r8' (temp 4X4 matrix of float) +0:387 matrix-multiply (temp 4X4 matrix of float) +0:387 'inFM0' (in 4X4 matrix of float) +0:387 'inFM1' (in 4X4 matrix of float) +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 1090 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "VertexShaderFunction" 48 67 73 80 174 192 198 205 321 339 345 352 470 488 494 501 626 640 647 742 756 763 861 875 882 + Source HLSL 450 + Name 4 "VertexShaderFunction" + Name 19 "TestGenMul(f1;f1;vf2;vf2;mf22;mf22;" + Name 13 "inF0" + Name 14 "inF1" + Name 15 "inFV0" + Name 16 "inFV1" + Name 17 "inFM0" + Name 18 "inFM1" + Name 32 "TestGenMul(f1;f1;vf3;vf3;mf33;mf33;" + Name 26 "inF0" + Name 27 "inF1" + Name 28 "inFV0" + Name 29 "inFV1" + Name 30 "inFM0" + Name 31 "inFM1" + Name 45 "TestGenMul(f1;f1;vf4;vf4;mf44;mf44;" + Name 39 "inF0" + Name 40 "inF1" + Name 41 "inFV0" + Name 42 "inFV1" + Name 43 "inFM0" + Name 44 "inFM1" + Name 48 "inF0" + Name 67 "inU0" + Name 73 "inF1" + Name 80 "inF2" + Name 106 "ResType" + Name 174 "inF0" + Name 192 "inU0" + Name 198 "inF1" + Name 205 "inF2" + Name 241 "ResType" + Name 321 "inF0" + Name 339 "inU0" + Name 345 "inF1" + Name 352 "inF2" + Name 391 "ResType" + Name 470 "inF0" + Name 488 "inU0" + Name 494 "inF1" + Name 501 "inF2" + Name 546 "ResType" + Name 626 "inF0" + Name 640 "inF1" + Name 647 "inF2" + Name 678 "ResType" + Name 742 "inF0" + Name 756 "inF1" + Name 763 "inF2" + Name 797 "ResType" + Name 861 "inF0" + Name 875 "inF1" + Name 882 "inF2" + Name 919 "ResType" + Name 982 "r0" + Name 986 "r1" + Name 990 "r2" + Name 994 "r3" + Name 998 "r4" + Name 1002 "r5" + Name 1006 "r6" + Name 1010 "r7" + Name 1014 "r8" + Name 1018 "r0" + Name 1022 "r1" + Name 1026 "r2" + Name 1030 "r3" + Name 1034 "r4" + Name 1038 "r5" + Name 1042 "r6" + Name 1046 "r7" + Name 1050 "r8" + Name 1054 "r0" + Name 1058 "r1" + Name 1062 "r2" + Name 1066 "r3" + Name 1070 "r4" + Name 1074 "r5" + Name 1078 "r6" + Name 1082 "r7" + Name 1086 "r8" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeVector 6(float) 2 + 9: TypePointer Function 8(fvec2) + 10: TypeMatrix 8(fvec2) 2 + 11: TypePointer Function 10 + 12: TypeFunction 2 7(ptr) 7(ptr) 9(ptr) 9(ptr) 11(ptr) 11(ptr) + 21: TypeVector 6(float) 3 + 22: TypePointer Function 21(fvec3) + 23: TypeMatrix 21(fvec3) 3 + 24: TypePointer Function 23 + 25: TypeFunction 2 7(ptr) 7(ptr) 22(ptr) 22(ptr) 24(ptr) 24(ptr) + 34: TypeVector 6(float) 4 + 35: TypePointer Function 34(fvec4) + 36: TypeMatrix 34(fvec4) 4 + 37: TypePointer Function 36 + 38: TypeFunction 2 7(ptr) 7(ptr) 35(ptr) 35(ptr) 37(ptr) 37(ptr) + 47: TypePointer Input 6(float) + 48(inF0): 47(ptr) Variable Input + 50: TypeBool + 61: TypeInt 32 1 + 64: TypeInt 32 0 + 66: TypePointer Input 64(int) + 67(inU0): 66(ptr) Variable Input + 73(inF1): 47(ptr) Variable Input + 80(inF2): 47(ptr) Variable Input + 87: 64(int) Constant 7 + 95: 61(int) Constant 7 + 106(ResType): TypeStruct 6(float) 61(int) + 121: 6(float) Constant 1050288283 + 136: 64(int) Constant 2 + 143: 6(float) Constant 0 + 144: 6(float) Constant 1065353216 + 173: TypePointer Input 8(fvec2) + 174(inF0): 173(ptr) Variable Input + 186: TypeVector 61(int) 2 + 189: TypeVector 64(int) 2 + 191: TypePointer Input 189(ivec2) + 192(inU0): 191(ptr) Variable Input + 198(inF1): 173(ptr) Variable Input + 205(inF2): 173(ptr) Variable Input + 212: 64(int) Constant 3 + 213: 189(ivec2) ConstantComposite 87 212 + 241(ResType): TypeStruct 8(fvec2) 186(ivec2) + 246: TypeVector 50(bool) 2 + 280: 6(float) Constant 1073741824 + 282: 64(int) Constant 1 + 283: 189(ivec2) ConstantComposite 282 136 + 318: 8(fvec2) ConstantComposite 144 280 + 320: TypePointer Input 21(fvec3) + 321(inF0): 320(ptr) Variable Input + 333: TypeVector 61(int) 3 + 336: TypeVector 64(int) 3 + 338: TypePointer Input 336(ivec3) + 339(inU0): 338(ptr) Variable Input + 345(inF1): 320(ptr) Variable Input + 352(inF2): 320(ptr) Variable Input + 359: 64(int) Constant 5 + 360: 336(ivec3) ConstantComposite 87 212 359 + 391(ResType): TypeStruct 21(fvec3) 333(ivec3) + 396: TypeVector 50(bool) 3 + 431: 336(ivec3) ConstantComposite 282 136 212 + 466: 6(float) Constant 1077936128 + 467: 21(fvec3) ConstantComposite 144 280 466 + 469: TypePointer Input 34(fvec4) + 470(inF0): 469(ptr) Variable Input + 482: TypeVector 61(int) 4 + 485: TypeVector 64(int) 4 + 487: TypePointer Input 485(ivec4) + 488(inU0): 487(ptr) Variable Input + 494(inF1): 469(ptr) Variable Input + 501(inF2): 469(ptr) Variable Input + 508: 485(ivec4) ConstantComposite 87 212 359 136 + 546(ResType): TypeStruct 34(fvec4) 482(ivec4) + 551: TypeVector 50(bool) 4 + 586: 64(int) Constant 4 + 587: 485(ivec4) ConstantComposite 282 136 212 586 + 622: 6(float) Constant 1082130432 + 623: 34(fvec4) ConstantComposite 144 280 466 622 + 625: TypePointer Input 10 + 626(inF0): 625(ptr) Variable Input + 640(inF1): 625(ptr) Variable Input + 647(inF2): 625(ptr) Variable Input + 678(ResType): TypeStruct 10 186(ivec2) + 738: 8(fvec2) ConstantComposite 280 280 + 739: 10 ConstantComposite 738 738 + 741: TypePointer Input 23 + 742(inF0): 741(ptr) Variable Input + 756(inF1): 741(ptr) Variable Input + 763(inF2): 741(ptr) Variable Input + 797(ResType): TypeStruct 23 333(ivec3) + 857: 21(fvec3) ConstantComposite 466 466 466 + 858: 23 ConstantComposite 857 857 857 + 860: TypePointer Input 36 + 861(inF0): 860(ptr) Variable Input + 875(inF1): 860(ptr) Variable Input + 882(inF2): 860(ptr) Variable Input + 919(ResType): TypeStruct 36 482(ivec4) + 979: 34(fvec4) ConstantComposite 622 622 622 622 + 980: 36 ConstantComposite 979 979 979 979 +4(VertexShaderFunction): 2 Function None 3 + 5: Label + 49: 6(float) Load 48(inF0) + 51: 50(bool) All 49 + 52: 6(float) Load 48(inF0) + 53: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 52 + 54: 6(float) Load 48(inF0) + 55: 6(float) ExtInst 1(GLSL.std.450) 17(Acos) 54 + 56: 6(float) Load 48(inF0) + 57: 50(bool) Any 56 + 58: 6(float) Load 48(inF0) + 59: 6(float) ExtInst 1(GLSL.std.450) 16(Asin) 58 + 60: 6(float) Load 48(inF0) + 62: 61(int) Bitcast 60 + 63: 6(float) Load 48(inF0) + 65: 64(int) Bitcast 63 + 68: 64(int) Load 67(inU0) + 69: 6(float) Bitcast 68 + 70: 6(float) Load 48(inF0) + 71: 6(float) ExtInst 1(GLSL.std.450) 18(Atan) 70 + 72: 6(float) Load 48(inF0) + 74: 6(float) Load 73(inF1) + 75: 6(float) ExtInst 1(GLSL.std.450) 25(Atan2) 72 74 + 76: 6(float) Load 48(inF0) + 77: 6(float) ExtInst 1(GLSL.std.450) 9(Ceil) 76 + 78: 6(float) Load 48(inF0) + 79: 6(float) Load 73(inF1) + 81: 6(float) Load 80(inF2) + 82: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 78 79 81 + 83: 6(float) Load 48(inF0) + 84: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 83 + 85: 6(float) Load 48(inF0) + 86: 6(float) ExtInst 1(GLSL.std.450) 20(Cosh) 85 + 88: 64(int) BitCount 87 + 89: 6(float) Load 48(inF0) + 90: 6(float) ExtInst 1(GLSL.std.450) 12(Degrees) 89 + 91: 6(float) Load 48(inF0) + 92: 6(float) ExtInst 1(GLSL.std.450) 27(Exp) 91 + 93: 6(float) Load 48(inF0) + 94: 6(float) ExtInst 1(GLSL.std.450) 29(Exp2) 93 + 96: 61(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 95 + 97: 61(int) ExtInst 1(GLSL.std.450) 73(FindILsb) 95 + 98: 6(float) Load 48(inF0) + 99: 6(float) ExtInst 1(GLSL.std.450) 8(Floor) 98 + 100: 6(float) Load 48(inF0) + 101: 6(float) Load 73(inF1) + 102: 6(float) FMod 100 101 + 103: 6(float) Load 48(inF0) + 104: 6(float) ExtInst 1(GLSL.std.450) 10(Fract) 103 + 105: 6(float) Load 48(inF0) + 107:106(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 105 + 108: 61(int) CompositeExtract 107 1 + Store 73(inF1) 108 + 109: 6(float) CompositeExtract 107 0 + 110: 6(float) Load 48(inF0) + 111: 50(bool) IsInf 110 + 112: 6(float) Load 48(inF0) + 113: 50(bool) IsNan 112 + 114: 6(float) Load 48(inF0) + 115: 6(float) Load 73(inF1) + 116: 6(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 114 115 + 117: 6(float) Load 48(inF0) + 118: 6(float) ExtInst 1(GLSL.std.450) 28(Log) 117 + 119: 6(float) Load 48(inF0) + 120: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 119 + 122: 6(float) FMul 120 121 + 123: 6(float) Load 48(inF0) + 124: 6(float) ExtInst 1(GLSL.std.450) 30(Log2) 123 + 125: 6(float) Load 48(inF0) + 126: 6(float) Load 73(inF1) + 127: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 125 126 + 128: 6(float) Load 48(inF0) + 129: 6(float) Load 73(inF1) + 130: 6(float) ExtInst 1(GLSL.std.450) 37(FMin) 128 129 + 131: 6(float) Load 48(inF0) + 132: 6(float) Load 73(inF1) + 133: 6(float) ExtInst 1(GLSL.std.450) 26(Pow) 131 132 + 134: 6(float) Load 48(inF0) + 135: 6(float) ExtInst 1(GLSL.std.450) 11(Radians) 134 + 137: 64(int) BitReverse 136 + 138: 6(float) Load 48(inF0) + 139: 6(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 138 + 140: 6(float) Load 48(inF0) + 141: 6(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 140 + 142: 6(float) Load 48(inF0) + 145: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 142 143 144 + 146: 6(float) Load 48(inF0) + 147: 6(float) ExtInst 1(GLSL.std.450) 6(FSign) 146 + 148: 6(float) Load 48(inF0) + 149: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 148 + 150: 6(float) Load 48(inF0) + 151: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 150 + Store 73(inF1) 151 + 152: 6(float) Load 48(inF0) + 153: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 152 + Store 80(inF2) 153 + 154: 6(float) Load 48(inF0) + 155: 6(float) ExtInst 1(GLSL.std.450) 19(Sinh) 154 + 156: 6(float) Load 48(inF0) + 157: 6(float) Load 73(inF1) + 158: 6(float) Load 80(inF2) + 159: 6(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 156 157 158 + 160: 6(float) Load 48(inF0) + 161: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 160 + 162: 6(float) Load 48(inF0) + 163: 6(float) Load 73(inF1) + 164: 6(float) ExtInst 1(GLSL.std.450) 48(Step) 162 163 + 165: 6(float) Load 48(inF0) + 166: 6(float) ExtInst 1(GLSL.std.450) 15(Tan) 165 + 167: 6(float) Load 48(inF0) + 168: 6(float) ExtInst 1(GLSL.std.450) 21(Tanh) 167 + 169: 6(float) Load 48(inF0) + 170: 6(float) ExtInst 1(GLSL.std.450) 3(Trunc) 169 + ReturnValue 143 + FunctionEnd +19(TestGenMul(f1;f1;vf2;vf2;mf22;mf22;): 2 Function None 12 + 13(inF0): 7(ptr) FunctionParameter + 14(inF1): 7(ptr) FunctionParameter + 15(inFV0): 9(ptr) FunctionParameter + 16(inFV1): 9(ptr) FunctionParameter + 17(inFM0): 11(ptr) FunctionParameter + 18(inFM1): 11(ptr) FunctionParameter + 20: Label + 982(r0): 7(ptr) Variable Function + 986(r1): 9(ptr) Variable Function + 990(r2): 9(ptr) Variable Function + 994(r3): 7(ptr) Variable Function + 998(r4): 9(ptr) Variable Function + 1002(r5): 9(ptr) Variable Function + 1006(r6): 11(ptr) Variable Function + 1010(r7): 11(ptr) Variable Function + 1014(r8): 11(ptr) Variable Function + 983: 6(float) Load 13(inF0) + 984: 6(float) Load 14(inF1) + 985: 6(float) FMul 983 984 + Store 982(r0) 985 + 987: 8(fvec2) Load 15(inFV0) + 988: 6(float) Load 13(inF0) + 989: 8(fvec2) VectorTimesScalar 987 988 + Store 986(r1) 989 + 991: 6(float) Load 13(inF0) + 992: 8(fvec2) Load 15(inFV0) + 993: 8(fvec2) VectorTimesScalar 992 991 + Store 990(r2) 993 + 995: 8(fvec2) Load 15(inFV0) + 996: 8(fvec2) Load 16(inFV1) + 997: 6(float) Dot 995 996 + Store 994(r3) 997 + 999: 10 Load 17(inFM0) + 1000: 8(fvec2) Load 15(inFV0) + 1001: 8(fvec2) MatrixTimesVector 999 1000 + Store 998(r4) 1001 + 1003: 8(fvec2) Load 15(inFV0) + 1004: 10 Load 17(inFM0) + 1005: 8(fvec2) VectorTimesMatrix 1003 1004 + Store 1002(r5) 1005 + 1007: 10 Load 17(inFM0) + 1008: 6(float) Load 13(inF0) + 1009: 10 MatrixTimesScalar 1007 1008 + Store 1006(r6) 1009 + 1011: 6(float) Load 13(inF0) + 1012: 10 Load 17(inFM0) + 1013: 10 MatrixTimesScalar 1012 1011 + Store 1010(r7) 1013 + 1015: 10 Load 17(inFM0) + 1016: 10 Load 18(inFM1) + 1017: 10 MatrixTimesMatrix 1015 1016 + Store 1014(r8) 1017 + Return + FunctionEnd +32(TestGenMul(f1;f1;vf3;vf3;mf33;mf33;): 2 Function None 25 + 26(inF0): 7(ptr) FunctionParameter + 27(inF1): 7(ptr) FunctionParameter + 28(inFV0): 22(ptr) FunctionParameter + 29(inFV1): 22(ptr) FunctionParameter + 30(inFM0): 24(ptr) FunctionParameter + 31(inFM1): 24(ptr) FunctionParameter + 33: Label + 1018(r0): 7(ptr) Variable Function + 1022(r1): 22(ptr) Variable Function + 1026(r2): 22(ptr) Variable Function + 1030(r3): 7(ptr) Variable Function + 1034(r4): 22(ptr) Variable Function + 1038(r5): 22(ptr) Variable Function + 1042(r6): 24(ptr) Variable Function + 1046(r7): 24(ptr) Variable Function + 1050(r8): 24(ptr) Variable Function + 1019: 6(float) Load 26(inF0) + 1020: 6(float) Load 27(inF1) + 1021: 6(float) FMul 1019 1020 + Store 1018(r0) 1021 + 1023: 21(fvec3) Load 28(inFV0) + 1024: 6(float) Load 26(inF0) + 1025: 21(fvec3) VectorTimesScalar 1023 1024 + Store 1022(r1) 1025 + 1027: 6(float) Load 26(inF0) + 1028: 21(fvec3) Load 28(inFV0) + 1029: 21(fvec3) VectorTimesScalar 1028 1027 + Store 1026(r2) 1029 + 1031: 21(fvec3) Load 28(inFV0) + 1032: 21(fvec3) Load 29(inFV1) + 1033: 6(float) Dot 1031 1032 + Store 1030(r3) 1033 + 1035: 23 Load 30(inFM0) + 1036: 21(fvec3) Load 28(inFV0) + 1037: 21(fvec3) MatrixTimesVector 1035 1036 + Store 1034(r4) 1037 + 1039: 21(fvec3) Load 28(inFV0) + 1040: 23 Load 30(inFM0) + 1041: 21(fvec3) VectorTimesMatrix 1039 1040 + Store 1038(r5) 1041 + 1043: 23 Load 30(inFM0) + 1044: 6(float) Load 26(inF0) + 1045: 23 MatrixTimesScalar 1043 1044 + Store 1042(r6) 1045 + 1047: 6(float) Load 26(inF0) + 1048: 23 Load 30(inFM0) + 1049: 23 MatrixTimesScalar 1048 1047 + Store 1046(r7) 1049 + 1051: 23 Load 30(inFM0) + 1052: 23 Load 31(inFM1) + 1053: 23 MatrixTimesMatrix 1051 1052 + Store 1050(r8) 1053 + Return + FunctionEnd +45(TestGenMul(f1;f1;vf4;vf4;mf44;mf44;): 2 Function None 38 + 39(inF0): 7(ptr) FunctionParameter + 40(inF1): 7(ptr) FunctionParameter + 41(inFV0): 35(ptr) FunctionParameter + 42(inFV1): 35(ptr) FunctionParameter + 43(inFM0): 37(ptr) FunctionParameter + 44(inFM1): 37(ptr) FunctionParameter + 46: Label + 1054(r0): 7(ptr) Variable Function + 1058(r1): 35(ptr) Variable Function + 1062(r2): 35(ptr) Variable Function + 1066(r3): 7(ptr) Variable Function + 1070(r4): 35(ptr) Variable Function + 1074(r5): 35(ptr) Variable Function + 1078(r6): 37(ptr) Variable Function + 1082(r7): 37(ptr) Variable Function + 1086(r8): 37(ptr) Variable Function + 1055: 6(float) Load 39(inF0) + 1056: 6(float) Load 40(inF1) + 1057: 6(float) FMul 1055 1056 + Store 1054(r0) 1057 + 1059: 34(fvec4) Load 41(inFV0) + 1060: 6(float) Load 39(inF0) + 1061: 34(fvec4) VectorTimesScalar 1059 1060 + Store 1058(r1) 1061 + 1063: 6(float) Load 39(inF0) + 1064: 34(fvec4) Load 41(inFV0) + 1065: 34(fvec4) VectorTimesScalar 1064 1063 + Store 1062(r2) 1065 + 1067: 34(fvec4) Load 41(inFV0) + 1068: 34(fvec4) Load 42(inFV1) + 1069: 6(float) Dot 1067 1068 + Store 1066(r3) 1069 + 1071: 36 Load 43(inFM0) + 1072: 34(fvec4) Load 41(inFV0) + 1073: 34(fvec4) MatrixTimesVector 1071 1072 + Store 1070(r4) 1073 + 1075: 34(fvec4) Load 41(inFV0) + 1076: 36 Load 43(inFM0) + 1077: 34(fvec4) VectorTimesMatrix 1075 1076 + Store 1074(r5) 1077 + 1079: 36 Load 43(inFM0) + 1080: 6(float) Load 39(inF0) + 1081: 36 MatrixTimesScalar 1079 1080 + Store 1078(r6) 1081 + 1083: 6(float) Load 39(inF0) + 1084: 36 Load 43(inFM0) + 1085: 36 MatrixTimesScalar 1084 1083 + Store 1082(r7) 1085 + 1087: 36 Load 43(inFM0) + 1088: 36 Load 44(inFM1) + 1089: 36 MatrixTimesMatrix 1087 1088 + Store 1086(r8) 1089 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out index 438a06a4..40dbd89f 100755 --- a/Test/baseResults/hlsl.matType.frag.out +++ b/Test/baseResults/hlsl.matType.frag.out @@ -1,5 +1,5 @@ hlsl.matType.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:1 move second child to first child (temp 1-component vector of float) @@ -8,8 +8,8 @@ gl_FragCoord origin is upper left 0:1 1.000000 0:11 Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float) 0:9 Function Parameters: -0:9 'inFloat1' (temp 1-component vector of float) -0:9 'inScalar' (temp float) +0:9 'inFloat1' (in 1-component vector of float) +0:9 'inScalar' (in float) 0:? Linker Objects 0:? 'f1' (temp 1-component vector of float) 0:? 'fmat11' (temp 1X1 matrix of float) @@ -22,7 +22,7 @@ gl_FragCoord origin is upper left Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:1 move second child to first child (temp 1-component vector of float) @@ -31,8 +31,8 @@ gl_FragCoord origin is upper left 0:1 1.000000 0:11 Function Definition: ShaderFunction(vf1;f1; (temp 1-component vector of float) 0:9 Function Parameters: -0:9 'inFloat1' (temp 1-component vector of float) -0:9 'inScalar' (temp float) +0:9 'inFloat1' (in 1-component vector of float) +0:9 'inScalar' (in float) 0:? Linker Objects 0:? 'f1' (temp 1-component vector of float) 0:? 'fmat11' (temp 1X1 matrix of float) @@ -51,7 +51,7 @@ gl_FragCoord origin is upper left MemoryModel Logical GLSL450 EntryPoint Fragment 4 "PixelShaderFunction" ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 11 "ShaderFunction(vf1;f1;" Name 9 "inFloat1" diff --git a/Test/baseResults/hlsl.max.frag.out b/Test/baseResults/hlsl.max.frag.out index addc965c..02f82bfe 100755 --- a/Test/baseResults/hlsl.max.frag.out +++ b/Test/baseResults/hlsl.max.frag.out @@ -1,34 +1,34 @@ hlsl.max.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:5 Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float) 0:2 Function Parameters: -0:2 'input1' (temp 4-component vector of float) -0:2 'input2' (temp 4-component vector of float) +0:2 'input1' (in 4-component vector of float) +0:2 'input2' (in 4-component vector of float) 0:? Sequence 0:3 Branch: Return with expression 0:3 max (global 4-component vector of float) -0:3 'input1' (temp 4-component vector of float) -0:3 'input2' (temp 4-component vector of float) +0:3 'input1' (in 4-component vector of float) +0:3 'input2' (in 4-component vector of float) 0:? Linker Objects Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:5 Function Definition: PixelShaderFunction(vf4;vf4; (temp 4-component vector of float) 0:2 Function Parameters: -0:2 'input1' (temp 4-component vector of float) -0:2 'input2' (temp 4-component vector of float) +0:2 'input1' (in 4-component vector of float) +0:2 'input2' (in 4-component vector of float) 0:? Sequence 0:3 Branch: Return with expression 0:3 max (global 4-component vector of float) -0:3 'input1' (temp 4-component vector of float) -0:3 'input2' (temp 4-component vector of float) +0:3 'input1' (in 4-component vector of float) +0:3 'input2' (in 4-component vector of float) 0:? Linker Objects // Module Version 10000 @@ -38,9 +38,9 @@ gl_FragCoord origin is upper left Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" + EntryPoint Fragment 4 "PixelShaderFunction" 9 11 ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 9 "input1" Name 11 "input2" @@ -48,11 +48,11 @@ gl_FragCoord origin is upper left 3: TypeFunction 2 6: TypeFloat 32 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) + 8: TypePointer Input 7(fvec4) + 9(input1): 8(ptr) Variable Input + 11(input2): 8(ptr) Variable Input 4(PixelShaderFunction): 2 Function None 3 5: Label - 9(input1): 8(ptr) Variable Function - 11(input2): 8(ptr) Variable Function 10: 7(fvec4) Load 9(input1) 12: 7(fvec4) Load 11(input2) 13: 7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 10 12 diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out index fc31f4b2..40e17894 100755 --- a/Test/baseResults/hlsl.precedence.frag.out +++ b/Test/baseResults/hlsl.precedence.frag.out @@ -1,46 +1,46 @@ hlsl.precedence.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:10 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float) 0:7 Function Parameters: -0:7 'a1' (temp 4-component vector of float) -0:7 'a2' (temp 4-component vector of float) -0:7 'a3' (temp 4-component vector of float) -0:7 'a4' (temp 4-component vector of float) +0:7 'a1' (in 4-component vector of float) +0:7 'a2' (in 4-component vector of float) +0:7 'a3' (in 4-component vector of float) +0:7 'a4' (in 4-component vector of float) 0:? Sequence 0:8 Branch: Return with expression 0:8 add (temp 4-component vector of float) 0:8 add (temp 4-component vector of float) -0:8 'a1' (temp 4-component vector of float) +0:8 'a1' (in 4-component vector of float) 0:8 component-wise multiply (temp 4-component vector of float) -0:8 'a2' (temp 4-component vector of float) -0:8 'a3' (temp 4-component vector of float) -0:8 'a4' (temp 4-component vector of float) +0:8 'a2' (in 4-component vector of float) +0:8 'a3' (in 4-component vector of float) +0:8 'a4' (in 4-component vector of float) 0:? Linker Objects Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:10 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vf4; (temp 4-component vector of float) 0:7 Function Parameters: -0:7 'a1' (temp 4-component vector of float) -0:7 'a2' (temp 4-component vector of float) -0:7 'a3' (temp 4-component vector of float) -0:7 'a4' (temp 4-component vector of float) +0:7 'a1' (in 4-component vector of float) +0:7 'a2' (in 4-component vector of float) +0:7 'a3' (in 4-component vector of float) +0:7 'a4' (in 4-component vector of float) 0:? Sequence 0:8 Branch: Return with expression 0:8 add (temp 4-component vector of float) 0:8 add (temp 4-component vector of float) -0:8 'a1' (temp 4-component vector of float) +0:8 'a1' (in 4-component vector of float) 0:8 component-wise multiply (temp 4-component vector of float) -0:8 'a2' (temp 4-component vector of float) -0:8 'a3' (temp 4-component vector of float) -0:8 'a4' (temp 4-component vector of float) +0:8 'a2' (in 4-component vector of float) +0:8 'a3' (in 4-component vector of float) +0:8 'a4' (in 4-component vector of float) 0:? Linker Objects // Module Version 10000 @@ -50,9 +50,9 @@ gl_FragCoord origin is upper left Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" + EntryPoint Fragment 4 "PixelShaderFunction" 9 11 13 17 ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 9 "a1" Name 11 "a2" @@ -62,13 +62,13 @@ gl_FragCoord origin is upper left 3: TypeFunction 2 6: TypeFloat 32 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) + 8: TypePointer Input 7(fvec4) + 9(a1): 8(ptr) Variable Input + 11(a2): 8(ptr) Variable Input + 13(a3): 8(ptr) Variable Input + 17(a4): 8(ptr) Variable Input 4(PixelShaderFunction): 2 Function None 3 5: Label - 9(a1): 8(ptr) Variable Function - 11(a2): 8(ptr) Variable Function - 13(a3): 8(ptr) Variable Function - 17(a4): 8(ptr) Variable Function 10: 7(fvec4) Load 9(a1) 12: 7(fvec4) Load 11(a2) 14: 7(fvec4) Load 13(a3) diff --git a/Test/baseResults/hlsl.precedence2.frag.out b/Test/baseResults/hlsl.precedence2.frag.out index fc4ae025..02b89951 100755 --- a/Test/baseResults/hlsl.precedence2.frag.out +++ b/Test/baseResults/hlsl.precedence2.frag.out @@ -1,62 +1,62 @@ hlsl.precedence2.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:10 Function Definition: PixelShaderFunction(i1;i1;i1;i1; (temp int) 0:7 Function Parameters: -0:7 'a1' (temp int) -0:7 'a2' (temp int) -0:7 'a3' (temp int) -0:7 'a4' (temp int) +0:7 'a1' (in int) +0:7 'a2' (in int) +0:7 'a3' (in int) +0:7 'a4' (in int) 0:? Sequence 0:8 Branch: Return with expression 0:8 add (temp int) 0:8 left-shift (temp int) 0:8 add (temp int) 0:8 component-wise multiply (temp int) -0:8 'a1' (temp int) -0:8 'a2' (temp int) -0:8 'a3' (temp int) -0:8 'a4' (temp int) +0:8 'a1' (in int) +0:8 'a2' (in int) +0:8 'a3' (in int) +0:8 'a4' (in int) 0:8 left-shift (temp int) -0:8 'a1' (temp int) +0:8 'a1' (in int) 0:8 add (temp int) -0:8 'a2' (temp int) +0:8 'a2' (in int) 0:8 component-wise multiply (temp int) -0:8 'a3' (temp int) -0:8 'a4' (temp int) +0:8 'a3' (in int) +0:8 'a4' (in int) 0:? Linker Objects Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:10 Function Definition: PixelShaderFunction(i1;i1;i1;i1; (temp int) 0:7 Function Parameters: -0:7 'a1' (temp int) -0:7 'a2' (temp int) -0:7 'a3' (temp int) -0:7 'a4' (temp int) +0:7 'a1' (in int) +0:7 'a2' (in int) +0:7 'a3' (in int) +0:7 'a4' (in int) 0:? Sequence 0:8 Branch: Return with expression 0:8 add (temp int) 0:8 left-shift (temp int) 0:8 add (temp int) 0:8 component-wise multiply (temp int) -0:8 'a1' (temp int) -0:8 'a2' (temp int) -0:8 'a3' (temp int) -0:8 'a4' (temp int) +0:8 'a1' (in int) +0:8 'a2' (in int) +0:8 'a3' (in int) +0:8 'a4' (in int) 0:8 left-shift (temp int) -0:8 'a1' (temp int) +0:8 'a1' (in int) 0:8 add (temp int) -0:8 'a2' (temp int) +0:8 'a2' (in int) 0:8 component-wise multiply (temp int) -0:8 'a3' (temp int) -0:8 'a4' (temp int) +0:8 'a3' (in int) +0:8 'a4' (in int) 0:? Linker Objects // Module Version 10000 @@ -66,9 +66,9 @@ gl_FragCoord origin is upper left Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" + EntryPoint Fragment 4 "PixelShaderFunction" 8 10 13 16 ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 8 "a1" Name 10 "a2" @@ -77,13 +77,13 @@ gl_FragCoord origin is upper left 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 - 7: TypePointer Function 6(int) + 7: TypePointer Input 6(int) + 8(a1): 7(ptr) Variable Input + 10(a2): 7(ptr) Variable Input + 13(a3): 7(ptr) Variable Input + 16(a4): 7(ptr) Variable Input 4(PixelShaderFunction): 2 Function None 3 5: Label - 8(a1): 7(ptr) Variable Function - 10(a2): 7(ptr) Variable Function - 13(a3): 7(ptr) Variable Function - 16(a4): 7(ptr) Variable Function 9: 6(int) Load 8(a1) 11: 6(int) Load 10(a2) 12: 6(int) IMul 9 11 diff --git a/Test/baseResults/hlsl.scope.frag.out b/Test/baseResults/hlsl.scope.frag.out new file mode 100755 index 00000000..97ac03e9 --- /dev/null +++ b/Test/baseResults/hlsl.scope.frag.out @@ -0,0 +1,150 @@ +hlsl.scope.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:31 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:4 'x' (temp int) +0:? Sequence +0:7 'x' (temp float) +0:? Sequence +0:10 'x' (temp bool) +0:? Sequence +0:13 'x' (temp 3-component vector of float) +0:15 'x' (temp bool) +0:17 'x' (temp float) +0:19 'x' (temp int) +0:21 Test condition and select (temp void) +0:21 Condition +0:21 Compare Greater Than (temp bool) +0:21 'x' (temp int) +0:21 Constant: +0:21 0 (const int) +0:21 true case is null +0:24 Loop with condition tested first +0:24 Loop Condition +0:24 Compare Greater Than (temp bool) +0:24 'x' (temp int) +0:24 Constant: +0:24 0 (const int) +0:24 No loop body +0:27 Loop with condition not tested first +0:27 Loop Condition +0:29 Compare Greater Than (temp bool) +0:29 'x' (temp int) +0:29 Constant: +0:29 0 (const int) +0:27 No loop body +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:31 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:4 'x' (temp int) +0:? Sequence +0:7 'x' (temp float) +0:? Sequence +0:10 'x' (temp bool) +0:? Sequence +0:13 'x' (temp 3-component vector of float) +0:15 'x' (temp bool) +0:17 'x' (temp float) +0:19 'x' (temp int) +0:21 Test condition and select (temp void) +0:21 Condition +0:21 Compare Greater Than (temp bool) +0:21 'x' (temp int) +0:21 Constant: +0:21 0 (const int) +0:21 true case is null +0:24 Loop with condition tested first +0:24 Loop Condition +0:24 Compare Greater Than (temp bool) +0:24 'x' (temp int) +0:24 Constant: +0:24 0 (const int) +0:24 No loop body +0:27 Loop with condition not tested first +0:27 Loop Condition +0:29 Compare Greater Than (temp bool) +0:29 'x' (temp int) +0:29 Constant: +0:29 0 (const int) +0:27 No loop body +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 36 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 8 "x" + Name 11 "x" + Name 14 "x" + Name 17 "x" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: TypeFloat 32 + 10: TypePointer Function 9(float) + 12: TypeBool + 13: TypePointer Function 12(bool) + 15: TypeVector 9(float) 3 + 16: TypePointer Function 15(fvec3) + 19: 6(int) Constant 0 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 8(x): 7(ptr) Variable Function + 11(x): 10(ptr) Variable Function + 14(x): 13(ptr) Variable Function + 17(x): 16(ptr) Variable Function + 18: 6(int) Load 8(x) + 20: 12(bool) SGreaterThan 18 19 + SelectionMerge 22 None + BranchConditional 20 21 22 + 21: Label + Branch 22 + 22: Label + Branch 23 + 23: Label + LoopMerge 25 26 None + Branch 27 + 27: Label + 28: 6(int) Load 8(x) + 29: 12(bool) SGreaterThan 28 19 + BranchConditional 29 24 25 + 24: Label + Branch 26 + 26: Label + Branch 23 + 25: Label + Branch 30 + 30: Label + LoopMerge 32 33 None + Branch 31 + 31: Label + Branch 33 + 33: Label + 34: 6(int) Load 8(x) + 35: 12(bool) SGreaterThan 34 19 + BranchConditional 35 30 32 + 32: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.sin.frag.out b/Test/baseResults/hlsl.sin.frag.out index 7d4f626d..c4875d52 100755 --- a/Test/baseResults/hlsl.sin.frag.out +++ b/Test/baseResults/hlsl.sin.frag.out @@ -1,30 +1,30 @@ hlsl.sin.frag -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:5 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) 0:2 Function Parameters: -0:2 'input' (temp 4-component vector of float) +0:2 'input' (in 4-component vector of float) 0:? Sequence 0:3 Branch: Return with expression 0:3 sine (global 4-component vector of float) -0:3 'input' (temp 4-component vector of float) +0:3 'input' (in 4-component vector of float) 0:? Linker Objects Linked fragment stage: -Shader version: 100 +Shader version: 450 gl_FragCoord origin is upper left 0:? Sequence 0:5 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) 0:2 Function Parameters: -0:2 'input' (temp 4-component vector of float) +0:2 'input' (in 4-component vector of float) 0:? Sequence 0:3 Branch: Return with expression 0:3 sine (global 4-component vector of float) -0:3 'input' (temp 4-component vector of float) +0:3 'input' (in 4-component vector of float) 0:? Linker Objects // Module Version 10000 @@ -34,19 +34,19 @@ gl_FragCoord origin is upper left Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "PixelShaderFunction" + EntryPoint Fragment 4 "PixelShaderFunction" 9 ExecutionMode 4 OriginUpperLeft - Source HLSL 100 + Source HLSL 450 Name 4 "PixelShaderFunction" Name 9 "input" 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) + 8: TypePointer Input 7(fvec4) + 9(input): 8(ptr) Variable Input 4(PixelShaderFunction): 2 Function None 3 5: Label - 9(input): 8(ptr) Variable Function 10: 7(fvec4) Load 9(input) 11: 7(fvec4) ExtInst 1(GLSL.std.450) 13(Sin) 10 ReturnValue 11 diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out new file mode 100755 index 00000000..43b1ecb3 --- /dev/null +++ b/Test/baseResults/hlsl.struct.frag.out @@ -0,0 +1,133 @@ +hlsl.struct.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:40 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:31 Function Parameters: +0:31 'input' (in 4-component vector of float) +0:? Sequence +0:36 Compare Equal (temp bool) +0:36 's3' (temp structure{temp 3-component vector of bool b3}) +0:36 's3' (temp structure{temp 3-component vector of bool b3}) +0:37 move second child to first child (temp 4-component vector of float) +0:37 i: direct index for structure (temp 4-component vector of float) +0:37 's2' (temp structure{temp 4-component vector of float i}) +0:37 Constant: +0:37 0 (const int) +0:37 ff4: direct index for structure (temp 4-component vector of float FragCoord) +0:37 's4' (temp structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4}) +0:37 Constant: +0:37 7 (const int) +0:39 Branch: Return with expression +0:39 'input' (in 4-component vector of float) +0:? Linker Objects +0:? 's1' (temp structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d}) +0:? 's2' (temp structure{temp 4-component vector of float i}) +0:? 's4' (temp structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4}) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:40 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:31 Function Parameters: +0:31 'input' (in 4-component vector of float) +0:? Sequence +0:36 Compare Equal (temp bool) +0:36 's3' (temp structure{temp 3-component vector of bool b3}) +0:36 's3' (temp structure{temp 3-component vector of bool b3}) +0:37 move second child to first child (temp 4-component vector of float) +0:37 i: direct index for structure (temp 4-component vector of float) +0:37 's2' (temp structure{temp 4-component vector of float i}) +0:37 Constant: +0:37 0 (const int) +0:37 ff4: direct index for structure (temp 4-component vector of float FragCoord) +0:37 's4' (temp structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4}) +0:37 Constant: +0:37 7 (const int) +0:39 Branch: Return with expression +0:39 'input' (in 4-component vector of float) +0:? Linker Objects +0:? 's1' (temp structure{temp bool b, temp bool c, temp 4-component vector of float a, temp 4-component vector of float d}) +0:? 's2' (temp structure{temp 4-component vector of float i}) +0:? 's4' (temp structure{smooth in 4-component vector of float a, flat temp bool b, centroid noperspective temp 1-component vector of float c, centroid sample temp 2-component vector of float d, temp bool Face ff1, temp bool ff2, temp bool ff3, temp 4-component vector of float FragCoord ff4}) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 40 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 34 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 8 "FS" + MemberName 8(FS) 0 "b3" + Name 10 "s3" + Name 19 "" + MemberName 19 0 "i" + Name 21 "s2" + Name 25 "" + MemberName 25 0 "a" + MemberName 25 1 "b" + MemberName 25 2 "c" + MemberName 25 3 "d" + MemberName 25 4 "ff1" + MemberName 25 5 "ff2" + MemberName 25 6 "ff3" + MemberName 25 7 "ff4" + Name 27 "s4" + Name 34 "input" + Name 37 "myS" + MemberName 37(myS) 0 "b" + MemberName 37(myS) 1 "c" + MemberName 37(myS) 2 "a" + MemberName 37(myS) 3 "d" + Name 39 "s1" + MemberDecorate 25 4 BuiltIn FrontFacing + MemberDecorate 25 7 BuiltIn FragCoord + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypeVector 6(bool) 3 + 8(FS): TypeStruct 7(bvec3) + 9: TypePointer Function 8(FS) + 17: TypeFloat 32 + 18: TypeVector 17(float) 4 + 19: TypeStruct 18(fvec4) + 20: TypePointer Function 19(struct) + 22: TypeInt 32 1 + 23: 22(int) Constant 0 + 24: TypeVector 17(float) 2 + 25: TypeStruct 18(fvec4) 6(bool) 17(float) 24(fvec2) 6(bool) 6(bool) 6(bool) 18(fvec4) + 26: TypePointer Function 25(struct) + 28: 22(int) Constant 7 + 29: TypePointer Function 18(fvec4) + 33: TypePointer Input 18(fvec4) + 34(input): 33(ptr) Variable Input + 37(myS): TypeStruct 6(bool) 6(bool) 18(fvec4) 18(fvec4) + 38: TypePointer Function 37(myS) +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 10(s3): 9(ptr) Variable Function + 21(s2): 20(ptr) Variable Function + 27(s4): 26(ptr) Variable Function + 39(s1): 38(ptr) Variable Function + 11: 8(FS) Load 10(s3) + 12: 8(FS) Load 10(s3) + 13: 7(bvec3) CompositeExtract 11 0 + 14: 7(bvec3) CompositeExtract 12 0 + 15: 7(bvec3) LogicalEqual 13 14 + 16: 6(bool) All 15 + 30: 29(ptr) AccessChain 27(s4) 28 + 31: 18(fvec4) Load 30 + 32: 29(ptr) AccessChain 21(s2) 23 + Store 32 31 + 35: 18(fvec4) Load 34(input) + ReturnValue 35 + FunctionEnd diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out new file mode 100755 index 00000000..ab9a0cc2 --- /dev/null +++ b/Test/baseResults/hlsl.swizzle.frag.out @@ -0,0 +1,113 @@ +hlsl.swizzle.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 move second child to first child (temp 4-component vector of float) +0:1 'AmbientColor' (temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 0.500000 +0:? 0.000000 +0:? 1.000000 +0:7 Function Definition: ShaderFunction(vf4; (temp 4-component vector of float) +0:4 Function Parameters: +0:4 'input' (in 4-component vector of float) +0:? Sequence +0:5 Branch: Return with expression +0:5 component-wise multiply (temp 4-component vector of float) +0:5 vector swizzle (temp 4-component vector of float) +0:5 'input' (in 4-component vector of float) +0:5 Sequence +0:5 Constant: +0:5 3 (const int) +0:5 Constant: +0:5 3 (const int) +0:5 Constant: +0:5 1 (const int) +0:5 Constant: +0:5 0 (const int) +0:5 Construct vec4 (temp 4-component vector of float) +0:5 direct index (temp float) +0:5 'AmbientColor' (temp 4-component vector of float) +0:5 Constant: +0:5 2 (const int) +0:? Linker Objects +0:? 'AmbientColor' (temp 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:1 move second child to first child (temp 4-component vector of float) +0:1 'AmbientColor' (temp 4-component vector of float) +0:? Constant: +0:? 1.000000 +0:? 0.500000 +0:? 0.000000 +0:? 1.000000 +0:7 Function Definition: ShaderFunction(vf4; (temp 4-component vector of float) +0:4 Function Parameters: +0:4 'input' (in 4-component vector of float) +0:? Sequence +0:5 Branch: Return with expression +0:5 component-wise multiply (temp 4-component vector of float) +0:5 vector swizzle (temp 4-component vector of float) +0:5 'input' (in 4-component vector of float) +0:5 Sequence +0:5 Constant: +0:5 3 (const int) +0:5 Constant: +0:5 3 (const int) +0:5 Constant: +0:5 1 (const int) +0:5 Constant: +0:5 0 (const int) +0:5 Construct vec4 (temp 4-component vector of float) +0:5 direct index (temp float) +0:5 'AmbientColor' (temp 4-component vector of float) +0:5 Constant: +0:5 2 (const int) +0:? Linker Objects +0:? 'AmbientColor' (temp 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 25 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 11 "ShaderFunction(vf4;" + Name 10 "input" + Name 15 "AmbientColor" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 7(fvec4) 8(ptr) + 16: TypeInt 32 0 + 17: 16(int) Constant 2 + 18: TypePointer Function 6(float) +4(PixelShaderFunction): 2 Function None 3 + 5: Label + FunctionEnd +11(ShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label +15(AmbientColor): 8(ptr) Variable Function + 13: 7(fvec4) Load 10(input) + 14: 7(fvec4) VectorShuffle 13 13 3 3 1 0 + 19: 18(ptr) AccessChain 15(AmbientColor) 17 + 20: 6(float) Load 19 + 21: 7(fvec4) CompositeConstruct 20 20 20 20 + 22: 7(fvec4) FMul 14 21 + ReturnValue 22 + FunctionEnd diff --git a/Test/baseResults/hlsl.void.frag.out b/Test/baseResults/hlsl.void.frag.out new file mode 100755 index 00000000..0ddc3310 --- /dev/null +++ b/Test/baseResults/hlsl.void.frag.out @@ -0,0 +1,64 @@ +hlsl.void.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: foo1( (temp void) +0:1 Function Parameters: +0:4 Function Definition: foo2( (temp void) +0:2 Function Parameters: +0:8 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:5 Function Parameters: +0:5 'input' (in 4-component vector of float) +0:? Sequence +0:6 Function Call: foo1( (temp void) +0:7 Function Call: foo2( (temp void) +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: foo1( (temp void) +0:1 Function Parameters: +0:4 Function Definition: foo2( (temp void) +0:2 Function Parameters: +0:8 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:5 Function Parameters: +0:5 'input' (in 4-component vector of float) +0:? Sequence +0:6 Function Call: foo1( (temp void) +0:7 Function Call: foo2( (temp void) +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 12 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 6 "foo1(" + Name 8 "foo2(" + 2: TypeVoid + 3: TypeFunction 2 +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 10: 2 FunctionCall 6(foo1() + 11: 2 FunctionCall 8(foo2() + Return + FunctionEnd + 6(foo1(): 2 Function None 3 + 7: Label + Return + FunctionEnd + 8(foo2(): 2 Function None 3 + 9: Label + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.whileLoop.frag.out b/Test/baseResults/hlsl.whileLoop.frag.out new file mode 100755 index 00000000..f4be34af --- /dev/null +++ b/Test/baseResults/hlsl.whileLoop.frag.out @@ -0,0 +1,145 @@ +hlsl.whileLoop.frag +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:3 Loop with condition tested first +0:3 Loop Condition +0:3 Compare Not Equal (temp bool) +0:3 'input' (in 4-component vector of float) +0:3 'input' (in 4-component vector of float) +0:3 Loop Body +0:? Sequence +0:3 Branch: Return with expression +0:3 'input' (in 4-component vector of float) +0:4 Loop with condition tested first +0:4 Loop Condition +0:4 Constant: +0:4 false (const bool) +0:4 No loop body +0:5 Loop with condition tested first +0:5 Loop Condition +0:5 Constant: +0:5 false (const bool) +0:5 No loop body +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Constant: +0:6 false (const bool) +0:6 No loop body +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 450 +gl_FragCoord origin is upper left +0:? Sequence +0:8 Function Definition: PixelShaderFunction(vf4; (temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' (in 4-component vector of float) +0:? Sequence +0:3 Loop with condition tested first +0:3 Loop Condition +0:3 Compare Not Equal (temp bool) +0:3 'input' (in 4-component vector of float) +0:3 'input' (in 4-component vector of float) +0:3 Loop Body +0:? Sequence +0:3 Branch: Return with expression +0:3 'input' (in 4-component vector of float) +0:4 Loop with condition tested first +0:4 Loop Condition +0:4 Constant: +0:4 false (const bool) +0:4 No loop body +0:5 Loop with condition tested first +0:5 Loop Condition +0:5 Constant: +0:5 false (const bool) +0:5 No loop body +0:6 Loop with condition tested first +0:6 Loop Condition +0:6 Constant: +0:6 false (const bool) +0:6 No loop body +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 39 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 14 + ExecutionMode 4 OriginUpperLeft + Source HLSL 450 + Name 4 "PixelShaderFunction" + Name 14 "input" + 2: TypeVoid + 3: TypeFunction 2 + 11: TypeFloat 32 + 12: TypeVector 11(float) 4 + 13: TypePointer Input 12(fvec4) + 14(input): 13(ptr) Variable Input + 17: TypeBool + 18: TypeVector 17(bool) 4 + 28: 17(bool) ConstantFalse +4(PixelShaderFunction): 2 Function None 3 + 5: Label + Branch 6 + 6: Label + LoopMerge 8 9 None + Branch 10 + 10: Label + 15: 12(fvec4) Load 14(input) + 16: 12(fvec4) Load 14(input) + 19: 18(bvec4) FOrdNotEqual 15 16 + 20: 17(bool) Any 19 + BranchConditional 20 7 8 + 7: Label + 21: 12(fvec4) Load 14(input) + ReturnValue 21 + 9: Label + Branch 6 + 8: Label + Branch 23 + 23: Label + LoopMerge 25 26 None + Branch 27 + 27: Label + BranchConditional 28 24 25 + 24: Label + Branch 26 + 26: Label + Branch 23 + 25: Label + Branch 29 + 29: Label + LoopMerge 31 32 None + Branch 33 + 33: Label + BranchConditional 28 30 31 + 30: Label + Branch 32 + 32: Label + Branch 29 + 31: Label + Branch 34 + 34: Label + LoopMerge 36 37 None + Branch 38 + 38: Label + BranchConditional 28 35 36 + 35: Label + Branch 37 + 37: Label + Branch 34 + 36: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out new file mode 100755 index 00000000..80df3b1a --- /dev/null +++ b/Test/baseResults/spv.310.bitcast.frag.out @@ -0,0 +1,234 @@ +spv.310.bitcast.frag +Warning, version 310 is not yet complete; most version-specific features are present, but some are missing. + + +Linked fragment stage: + + +// Module Version 10000 +// Generated by (magic number): 80001 +// Id's are bound by 153 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 14 26 37 48 89 98 107 116 122 130 139 148 + ExecutionMode 4 OriginUpperLeft + Source ESSL 310 + Name 4 "main" + Name 9 "idata" + Name 14 "f1" + Name 26 "f2" + Name 37 "f3" + Name 48 "f4" + Name 55 "udata" + Name 85 "fdata" + Name 89 "i1" + Name 98 "i2" + Name 107 "i3" + Name 116 "i4" + Name 122 "u1" + Name 130 "u2" + Name 139 "u3" + Name 148 "u4" + Decorate 14(f1) RelaxedPrecision + Decorate 15 RelaxedPrecision + Decorate 26(f2) RelaxedPrecision + Decorate 27 RelaxedPrecision + Decorate 37(f3) RelaxedPrecision + Decorate 38 RelaxedPrecision + Decorate 57 RelaxedPrecision + Decorate 64 RelaxedPrecision + Decorate 72 RelaxedPrecision + Decorate 89(i1) RelaxedPrecision + Decorate 89(i1) Flat + Decorate 90 RelaxedPrecision + Decorate 98(i2) RelaxedPrecision + Decorate 98(i2) Flat + Decorate 99 RelaxedPrecision + Decorate 107(i3) RelaxedPrecision + Decorate 107(i3) Flat + Decorate 108 RelaxedPrecision + Decorate 116(i4) Flat + Decorate 122(u1) RelaxedPrecision + Decorate 122(u1) Flat + Decorate 123 RelaxedPrecision + Decorate 130(u2) RelaxedPrecision + Decorate 130(u2) Flat + Decorate 131 RelaxedPrecision + Decorate 139(u3) RelaxedPrecision + Decorate 139(u3) Flat + Decorate 140 RelaxedPrecision + Decorate 148(u4) Flat + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypeVector 6(int) 4 + 8: TypePointer Function 7(ivec4) + 10: 6(int) Constant 0 + 11: 7(ivec4) ConstantComposite 10 10 10 10 + 12: TypeFloat 32 + 13: TypePointer Input 12(float) + 14(f1): 13(ptr) Variable Input + 17: TypeInt 32 0 + 18: 17(int) Constant 0 + 19: TypePointer Function 6(int) + 24: TypeVector 12(float) 2 + 25: TypePointer Input 24(fvec2) + 26(f2): 25(ptr) Variable Input + 28: TypeVector 6(int) 2 + 35: TypeVector 12(float) 3 + 36: TypePointer Input 35(fvec3) + 37(f3): 36(ptr) Variable Input + 39: TypeVector 6(int) 3 + 46: TypeVector 12(float) 4 + 47: TypePointer Input 46(fvec4) + 48(f4): 47(ptr) Variable Input + 53: TypeVector 17(int) 4 + 54: TypePointer Function 53(ivec4) + 56: 53(ivec4) ConstantComposite 18 18 18 18 + 59: TypePointer Function 17(int) + 65: TypeVector 17(int) 2 + 73: TypeVector 17(int) 3 + 84: TypePointer Function 46(fvec4) + 86: 12(float) Constant 0 + 87: 46(fvec4) ConstantComposite 86 86 86 86 + 88: TypePointer Input 6(int) + 89(i1): 88(ptr) Variable Input + 92: TypePointer Function 12(float) + 97: TypePointer Input 28(ivec2) + 98(i2): 97(ptr) Variable Input + 106: TypePointer Input 39(ivec3) + 107(i3): 106(ptr) Variable Input + 115: TypePointer Input 7(ivec4) + 116(i4): 115(ptr) Variable Input + 121: TypePointer Input 17(int) + 122(u1): 121(ptr) Variable Input + 129: TypePointer Input 65(ivec2) + 130(u2): 129(ptr) Variable Input + 138: TypePointer Input 73(ivec3) + 139(u3): 138(ptr) Variable Input + 147: TypePointer Input 53(ivec4) + 148(u4): 147(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 9(idata): 8(ptr) Variable Function + 55(udata): 54(ptr) Variable Function + 85(fdata): 84(ptr) Variable Function + Store 9(idata) 11 + 15: 12(float) Load 14(f1) + 16: 6(int) Bitcast 15 + 20: 19(ptr) AccessChain 9(idata) 18 + 21: 6(int) Load 20 + 22: 6(int) IAdd 21 16 + 23: 19(ptr) AccessChain 9(idata) 18 + Store 23 22 + 27: 24(fvec2) Load 26(f2) + 29: 28(ivec2) Bitcast 27 + 30: 7(ivec4) Load 9(idata) + 31: 28(ivec2) VectorShuffle 30 30 0 1 + 32: 28(ivec2) IAdd 31 29 + 33: 7(ivec4) Load 9(idata) + 34: 7(ivec4) VectorShuffle 33 32 4 5 2 3 + Store 9(idata) 34 + 38: 35(fvec3) Load 37(f3) + 40: 39(ivec3) Bitcast 38 + 41: 7(ivec4) Load 9(idata) + 42: 39(ivec3) VectorShuffle 41 41 0 1 2 + 43: 39(ivec3) IAdd 42 40 + 44: 7(ivec4) Load 9(idata) + 45: 7(ivec4) VectorShuffle 44 43 4 5 6 3 + Store 9(idata) 45 + 49: 46(fvec4) Load 48(f4) + 50: 7(ivec4) Bitcast 49 + 51: 7(ivec4) Load 9(idata) + 52: 7(ivec4) IAdd 51 50 + Store 9(idata) 52 + Store 55(udata) 56 + 57: 12(float) Load 14(f1) + 58: 17(int) Bitcast 57 + 60: 59(ptr) AccessChain 55(udata) 18 + 61: 17(int) Load 60 + 62: 17(int) IAdd 61 58 + 63: 59(ptr) AccessChain 55(udata) 18 + Store 63 62 + 64: 24(fvec2) Load 26(f2) + 66: 65(ivec2) Bitcast 64 + 67: 53(ivec4) Load 55(udata) + 68: 65(ivec2) VectorShuffle 67 67 0 1 + 69: 65(ivec2) IAdd 68 66 + 70: 53(ivec4) Load 55(udata) + 71: 53(ivec4) VectorShuffle 70 69 4 5 2 3 + Store 55(udata) 71 + 72: 35(fvec3) Load 37(f3) + 74: 73(ivec3) Bitcast 72 + 75: 53(ivec4) Load 55(udata) + 76: 73(ivec3) VectorShuffle 75 75 0 1 2 + 77: 73(ivec3) IAdd 76 74 + 78: 53(ivec4) Load 55(udata) + 79: 53(ivec4) VectorShuffle 78 77 4 5 6 3 + Store 55(udata) 79 + 80: 46(fvec4) Load 48(f4) + 81: 53(ivec4) Bitcast 80 + 82: 53(ivec4) Load 55(udata) + 83: 53(ivec4) IAdd 82 81 + Store 55(udata) 83 + Store 85(fdata) 87 + 90: 6(int) Load 89(i1) + 91: 12(float) Bitcast 90 + 93: 92(ptr) AccessChain 85(fdata) 18 + 94: 12(float) Load 93 + 95: 12(float) FAdd 94 91 + 96: 92(ptr) AccessChain 85(fdata) 18 + Store 96 95 + 99: 28(ivec2) Load 98(i2) + 100: 24(fvec2) Bitcast 99 + 101: 46(fvec4) Load 85(fdata) + 102: 24(fvec2) VectorShuffle 101 101 0 1 + 103: 24(fvec2) FAdd 102 100 + 104: 46(fvec4) Load 85(fdata) + 105: 46(fvec4) VectorShuffle 104 103 4 5 2 3 + Store 85(fdata) 105 + 108: 39(ivec3) Load 107(i3) + 109: 35(fvec3) Bitcast 108 + 110: 46(fvec4) Load 85(fdata) + 111: 35(fvec3) VectorShuffle 110 110 0 1 2 + 112: 35(fvec3) FAdd 111 109 + 113: 46(fvec4) Load 85(fdata) + 114: 46(fvec4) VectorShuffle 113 112 4 5 6 3 + Store 85(fdata) 114 + 117: 7(ivec4) Load 116(i4) + 118: 46(fvec4) Bitcast 117 + 119: 46(fvec4) Load 85(fdata) + 120: 46(fvec4) FAdd 119 118 + Store 85(fdata) 120 + 123: 17(int) Load 122(u1) + 124: 12(float) Bitcast 123 + 125: 92(ptr) AccessChain 85(fdata) 18 + 126: 12(float) Load 125 + 127: 12(float) FAdd 126 124 + 128: 92(ptr) AccessChain 85(fdata) 18 + Store 128 127 + 131: 65(ivec2) Load 130(u2) + 132: 24(fvec2) Bitcast 131 + 133: 46(fvec4) Load 85(fdata) + 134: 24(fvec2) VectorShuffle 133 133 0 1 + 135: 24(fvec2) FAdd 134 132 + 136: 46(fvec4) Load 85(fdata) + 137: 46(fvec4) VectorShuffle 136 135 4 5 2 3 + Store 85(fdata) 137 + 140: 73(ivec3) Load 139(u3) + 141: 35(fvec3) Bitcast 140 + 142: 46(fvec4) Load 85(fdata) + 143: 35(fvec3) VectorShuffle 142 142 0 1 2 + 144: 35(fvec3) FAdd 143 141 + 145: 46(fvec4) Load 85(fdata) + 146: 46(fvec4) VectorShuffle 145 144 4 5 6 3 + Store 85(fdata) 146 + 149: 53(ivec4) Load 148(u4) + 150: 46(fvec4) Bitcast 149 + 151: 46(fvec4) Load 85(fdata) + 152: 46(fvec4) FAdd 151 150 + Store 85(fdata) 152 + Return + FunctionEnd diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out index 4af713c4..f06b0fcd 100644 --- a/Test/baseResults/spv.400.frag.out +++ b/Test/baseResults/spv.400.frag.out @@ -7,7 +7,7 @@ Linked fragment stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 1112 +// Id's are bound by 1114 Capability Shader Capability Float64 @@ -16,7 +16,7 @@ Linked fragment stage: Capability SampledRect 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 13 1025 1031 1036 1048 1074 1095 1097 1103 1105 + EntryPoint Fragment 4 "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107 ExecutionMode 4 OriginUpperLeft Source GLSL 400 SourceExtension "GL_ARB_separate_shader_objects" @@ -25,45 +25,45 @@ Linked fragment stage: Name 8 "doubles(" Name 13 "outp" Name 17 "u2drs" - Name 39 "doublev" - Name 43 "dvec2v" - Name 48 "dvec3v" - Name 53 "dvec4v" - Name 428 "boolv" - Name 437 "bvec2v" - Name 446 "bvec3v" - Name 455 "bvec4v" - Name 737 "dmat2v" - Name 743 "dmat3v" - Name 749 "dmat4v" - Name 755 "dmat2x3v" - Name 761 "dmat3x2v" - Name 767 "dmat2x4v" - Name 773 "dmat4x2v" - Name 779 "dmat3x4v" - Name 785 "dmat4x3v" - Name 1017 "v" - Name 1023 "arrayedSampler" - Name 1025 "i" - Name 1031 "c2D" - Name 1036 "gl_ClipDistance" - Name 1048 "uoutp" - Name 1052 "samp2dr" - Name 1074 "ioutp" - Name 1078 "isamp2DA" - Name 1095 "gl_FragCoord" - Name 1097 "vl2" - Name 1103 "uo" - Name 1105 "u" + Name 41 "doublev" + Name 45 "dvec2v" + Name 50 "dvec3v" + Name 55 "dvec4v" + Name 430 "boolv" + Name 439 "bvec2v" + Name 448 "bvec3v" + Name 457 "bvec4v" + Name 739 "dmat2v" + Name 745 "dmat3v" + Name 751 "dmat4v" + Name 757 "dmat2x3v" + Name 763 "dmat3x2v" + Name 769 "dmat2x4v" + Name 775 "dmat4x2v" + Name 781 "dmat3x4v" + Name 787 "dmat4x3v" + Name 1019 "v" + Name 1025 "arrayedSampler" + Name 1027 "i" + Name 1033 "c2D" + Name 1038 "gl_ClipDistance" + Name 1050 "uoutp" + Name 1054 "samp2dr" + Name 1076 "ioutp" + Name 1080 "isamp2DA" + Name 1097 "gl_FragCoord" + Name 1099 "vl2" + Name 1105 "uo" + Name 1107 "u" Decorate 17(u2drs) DescriptorSet 0 - Decorate 1023(arrayedSampler) DescriptorSet 0 - Decorate 1025(i) Flat - Decorate 1036(gl_ClipDistance) BuiltIn ClipDistance - Decorate 1052(samp2dr) DescriptorSet 0 - Decorate 1078(isamp2DA) DescriptorSet 0 - Decorate 1095(gl_FragCoord) BuiltIn FragCoord - Decorate 1097(vl2) Location 6 - Decorate 1105(u) Flat + Decorate 1025(arrayedSampler) DescriptorSet 0 + Decorate 1027(i) Flat + Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance + Decorate 1054(samp2dr) DescriptorSet 0 + Decorate 1080(isamp2DA) DescriptorSet 0 + Decorate 1097(gl_FragCoord) BuiltIn FragCoord + Decorate 1099(vl2) Location 6 + Decorate 1107(u) Flat 2: TypeVoid 3: TypeFunction 2 10: TypeFloat 32 @@ -82,166 +82,166 @@ Linked fragment stage: 25: 23(int) Constant 3 26: 23(int) Constant 4 27: 24(ivec2) ConstantComposite 25 26 - 30: TypeInt 32 0 - 31: 30(int) Constant 0 - 32: TypePointer Output 10(float) - 37: TypeFloat 64 - 38: TypePointer Function 37(float) - 40: 37(float) Constant 2507418074 1073430332 - 41: TypeVector 37(float) 2 - 42: TypePointer Function 41(fvec2) - 44: 37(float) Constant 796182188 1073367658 - 45: 41(fvec2) ConstantComposite 44 44 - 46: TypeVector 37(float) 3 - 47: TypePointer Function 46(fvec3) - 49: 37(float) Constant 1719614413 1073127582 - 50: 46(fvec3) ConstantComposite 49 49 49 - 51: TypeVector 37(float) 4 - 52: TypePointer Function 51(fvec4) - 426: TypeBool - 427: TypePointer Function 426(bool) - 435: TypeVector 426(bool) 2 - 436: TypePointer Function 435(bvec2) - 444: TypeVector 426(bool) 3 - 445: TypePointer Function 444(bvec3) - 453: TypeVector 426(bool) 4 - 454: TypePointer Function 453(bvec4) - 561: 426(bool) ConstantFalse - 570: 435(bvec2) ConstantComposite 561 561 - 579: 444(bvec3) ConstantComposite 561 561 561 - 588: 453(bvec4) ConstantComposite 561 561 561 561 - 735: TypeMatrix 41(fvec2) 2 - 736: TypePointer Function 735 - 741: TypeMatrix 46(fvec3) 3 - 742: TypePointer Function 741 - 747: TypeMatrix 51(fvec4) 4 - 748: TypePointer Function 747 - 753: TypeMatrix 46(fvec3) 2 - 754: TypePointer Function 753 - 759: TypeMatrix 41(fvec2) 3 - 760: TypePointer Function 759 - 765: TypeMatrix 51(fvec4) 2 - 766: TypePointer Function 765 - 771: TypeMatrix 41(fvec2) 4 - 772: TypePointer Function 771 - 777: TypeMatrix 51(fvec4) 3 - 778: TypePointer Function 777 - 783: TypeMatrix 46(fvec3) 4 - 784: TypePointer Function 783 - 952: 30(int) Constant 1 - 956: 30(int) Constant 2 - 960: 30(int) Constant 3 - 964: 23(int) Constant 1 - 968: 23(int) Constant 2 - 994: 10(float) Constant 1065353216 - 1016: TypePointer Function 11(fvec4) - 1018: TypeImage 10(float) 2D sampled format:Unknown - 1019: TypeSampledImage 1018 - 1020: 30(int) Constant 5 - 1021: TypeArray 1019 1020 - 1022: TypePointer UniformConstant 1021 -1023(arrayedSampler): 1022(ptr) Variable UniformConstant - 1024: TypePointer Input 23(int) - 1025(i): 1024(ptr) Variable Input - 1027: TypePointer UniformConstant 1019 - 1030: TypePointer Input 20(fvec2) - 1031(c2D): 1030(ptr) Variable Input - 1034: TypeArray 10(float) 956 - 1035: TypePointer Input 1034 -1036(gl_ClipDistance): 1035(ptr) Variable Input - 1037: TypePointer Input 10(float) - 1041: TypeVector 10(float) 3 - 1046: TypeVector 30(int) 4 - 1047: TypePointer Output 1046(ivec4) - 1048(uoutp): 1047(ptr) Variable Output - 1049: TypeImage 30(int) Rect sampled format:Unknown - 1050: TypeSampledImage 1049 - 1051: TypePointer UniformConstant 1050 - 1052(samp2dr): 1051(ptr) Variable UniformConstant - 1055: 30(int) Constant 4 - 1056: TypeArray 24(ivec2) 1055 - 1057: 24(ivec2) ConstantComposite 964 968 - 1058: 23(int) Constant 15 - 1059: 23(int) Constant 16 - 1060: 24(ivec2) ConstantComposite 1058 1059 - 1061: 23(int) Constant 4294967294 - 1062: 23(int) Constant 0 - 1063: 24(ivec2) ConstantComposite 1061 1062 - 1064: 1056 ConstantComposite 1057 27 1060 1063 - 1072: TypeVector 23(int) 4 - 1073: TypePointer Output 1072(ivec4) - 1074(ioutp): 1073(ptr) Variable Output - 1075: TypeImage 23(int) 2D array sampled format:Unknown - 1076: TypeSampledImage 1075 - 1077: TypePointer UniformConstant 1076 - 1078(isamp2DA): 1077(ptr) Variable UniformConstant - 1080: 10(float) Constant 1036831949 - 1081: 1041(fvec3) ConstantComposite 1080 1080 1080 - 1082: 24(ivec2) ConstantComposite 964 964 - 1094: TypePointer Input 11(fvec4) -1095(gl_FragCoord): 1094(ptr) Variable Input - 1097(vl2): 1094(ptr) Variable Input - 1102: TypePointer Output 30(int) - 1103(uo): 1102(ptr) Variable Output - 1104: TypePointer Input 30(int) - 1105(u): 1104(ptr) Variable Input + 32: TypeInt 32 0 + 33: 32(int) Constant 0 + 34: TypePointer Output 10(float) + 39: TypeFloat 64 + 40: TypePointer Function 39(float) + 42: 39(float) Constant 2507418074 1073430332 + 43: TypeVector 39(float) 2 + 44: TypePointer Function 43(fvec2) + 46: 39(float) Constant 796182188 1073367658 + 47: 43(fvec2) ConstantComposite 46 46 + 48: TypeVector 39(float) 3 + 49: TypePointer Function 48(fvec3) + 51: 39(float) Constant 1719614413 1073127582 + 52: 48(fvec3) ConstantComposite 51 51 51 + 53: TypeVector 39(float) 4 + 54: TypePointer Function 53(fvec4) + 428: TypeBool + 429: TypePointer Function 428(bool) + 437: TypeVector 428(bool) 2 + 438: TypePointer Function 437(bvec2) + 446: TypeVector 428(bool) 3 + 447: TypePointer Function 446(bvec3) + 455: TypeVector 428(bool) 4 + 456: TypePointer Function 455(bvec4) + 563: 428(bool) ConstantFalse + 572: 437(bvec2) ConstantComposite 563 563 + 581: 446(bvec3) ConstantComposite 563 563 563 + 590: 455(bvec4) ConstantComposite 563 563 563 563 + 737: TypeMatrix 43(fvec2) 2 + 738: TypePointer Function 737 + 743: TypeMatrix 48(fvec3) 3 + 744: TypePointer Function 743 + 749: TypeMatrix 53(fvec4) 4 + 750: TypePointer Function 749 + 755: TypeMatrix 48(fvec3) 2 + 756: TypePointer Function 755 + 761: TypeMatrix 43(fvec2) 3 + 762: TypePointer Function 761 + 767: TypeMatrix 53(fvec4) 2 + 768: TypePointer Function 767 + 773: TypeMatrix 43(fvec2) 4 + 774: TypePointer Function 773 + 779: TypeMatrix 53(fvec4) 3 + 780: TypePointer Function 779 + 785: TypeMatrix 48(fvec3) 4 + 786: TypePointer Function 785 + 954: 32(int) Constant 1 + 958: 32(int) Constant 2 + 962: 32(int) Constant 3 + 966: 23(int) Constant 1 + 970: 23(int) Constant 2 + 996: 10(float) Constant 1065353216 + 1018: TypePointer Function 11(fvec4) + 1020: TypeImage 10(float) 2D sampled format:Unknown + 1021: TypeSampledImage 1020 + 1022: 32(int) Constant 5 + 1023: TypeArray 1021 1022 + 1024: TypePointer UniformConstant 1023 +1025(arrayedSampler): 1024(ptr) Variable UniformConstant + 1026: TypePointer Input 23(int) + 1027(i): 1026(ptr) Variable Input + 1029: TypePointer UniformConstant 1021 + 1032: TypePointer Input 20(fvec2) + 1033(c2D): 1032(ptr) Variable Input + 1036: TypeArray 10(float) 958 + 1037: TypePointer Input 1036 +1038(gl_ClipDistance): 1037(ptr) Variable Input + 1039: TypePointer Input 10(float) + 1043: TypeVector 10(float) 3 + 1048: TypeVector 32(int) 4 + 1049: TypePointer Output 1048(ivec4) + 1050(uoutp): 1049(ptr) Variable Output + 1051: TypeImage 32(int) Rect sampled format:Unknown + 1052: TypeSampledImage 1051 + 1053: TypePointer UniformConstant 1052 + 1054(samp2dr): 1053(ptr) Variable UniformConstant + 1057: 32(int) Constant 4 + 1058: TypeArray 24(ivec2) 1057 + 1059: 24(ivec2) ConstantComposite 966 970 + 1060: 23(int) Constant 15 + 1061: 23(int) Constant 16 + 1062: 24(ivec2) ConstantComposite 1060 1061 + 1063: 23(int) Constant 4294967294 + 1064: 23(int) Constant 0 + 1065: 24(ivec2) ConstantComposite 1063 1064 + 1066: 1058 ConstantComposite 1059 27 1062 1065 + 1074: TypeVector 23(int) 4 + 1075: TypePointer Output 1074(ivec4) + 1076(ioutp): 1075(ptr) Variable Output + 1077: TypeImage 23(int) 2D array sampled format:Unknown + 1078: TypeSampledImage 1077 + 1079: TypePointer UniformConstant 1078 + 1080(isamp2DA): 1079(ptr) Variable UniformConstant + 1082: 10(float) Constant 1036831949 + 1083: 1043(fvec3) ConstantComposite 1082 1082 1082 + 1084: 24(ivec2) ConstantComposite 966 966 + 1096: TypePointer Input 11(fvec4) +1097(gl_FragCoord): 1096(ptr) Variable Input + 1099(vl2): 1096(ptr) Variable Input + 1104: TypePointer Output 32(int) + 1105(uo): 1104(ptr) Variable Output + 1106: TypePointer Input 32(int) + 1107(u): 1106(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 1017(v): 1016(ptr) Variable Function - 1026: 23(int) Load 1025(i) - 1028: 1027(ptr) AccessChain 1023(arrayedSampler) 1026 - 1029: 1019 Load 1028 - 1032: 20(fvec2) Load 1031(c2D) - 1033: 11(fvec4) ImageSampleImplicitLod 1029 1032 - Store 1017(v) 1033 - 1038: 1037(ptr) AccessChain 1036(gl_ClipDistance) 964 - 1039: 10(float) Load 1038 - 1040: 32(ptr) AccessChain 13(outp) 31 - Store 1040 1039 - 1042: 11(fvec4) Load 1017(v) - 1043: 1041(fvec3) VectorShuffle 1042 1042 1 2 3 - 1044: 11(fvec4) Load 13(outp) - 1045: 11(fvec4) VectorShuffle 1044 1043 0 4 5 6 - Store 13(outp) 1045 - 1053: 1050 Load 1052(samp2dr) - 1054: 20(fvec2) Load 1031(c2D) - 1065: 1046(ivec4) ImageGather 1053 1054 968 ConstOffsets 1064 - Store 1048(uoutp) 1065 - 1066: 1027(ptr) AccessChain 1023(arrayedSampler) 1062 - 1067: 1019 Load 1066 - 1068: 20(fvec2) Load 1031(c2D) - 1069: 11(fvec4) ImageGather 1067 1068 1062 - 1070: 11(fvec4) Load 13(outp) - 1071: 11(fvec4) FAdd 1070 1069 - Store 13(outp) 1071 - 1079: 1076 Load 1078(isamp2DA) - 1083: 1072(ivec4) ImageGather 1079 1081 25 ConstOffset 1082 - Store 1074(ioutp) 1083 - 1084: 1076 Load 1078(isamp2DA) - 1085: 1072(ivec4) ImageGather 1084 1081 25 ConstOffset 1082 - 1086: 1072(ivec4) Load 1074(ioutp) - 1087: 1072(ivec4) IAdd 1086 1085 - Store 1074(ioutp) 1087 - 1088: 1076 Load 1078(isamp2DA) - 1089: 23(int) Load 1025(i) - 1090: 24(ivec2) CompositeConstruct 1089 1089 - 1091: 1072(ivec4) ImageGather 1088 1081 1062 Offset 1090 - 1092: 1072(ivec4) Load 1074(ioutp) - 1093: 1072(ivec4) IAdd 1092 1091 - Store 1074(ioutp) 1093 - 1096: 11(fvec4) Load 1095(gl_FragCoord) - 1098: 11(fvec4) Load 1097(vl2) - 1099: 11(fvec4) FAdd 1096 1098 - 1100: 11(fvec4) Load 13(outp) - 1101: 11(fvec4) FAdd 1100 1099 - Store 13(outp) 1101 - 1106: 30(int) Load 1105(u) - 1107: 23(int) Load 1025(i) - 1108: 30(int) Bitcast 1107 - 1109: 30(int) UMod 1106 1108 - Store 1103(uo) 1109 - 1110: 2 FunctionCall 6(foo23() - 1111: 2 FunctionCall 8(doubles() + 1019(v): 1018(ptr) Variable Function + 1028: 23(int) Load 1027(i) + 1030: 1029(ptr) AccessChain 1025(arrayedSampler) 1028 + 1031: 1021 Load 1030 + 1034: 20(fvec2) Load 1033(c2D) + 1035: 11(fvec4) ImageSampleImplicitLod 1031 1034 + Store 1019(v) 1035 + 1040: 1039(ptr) AccessChain 1038(gl_ClipDistance) 966 + 1041: 10(float) Load 1040 + 1042: 34(ptr) AccessChain 13(outp) 33 + Store 1042 1041 + 1044: 11(fvec4) Load 1019(v) + 1045: 1043(fvec3) VectorShuffle 1044 1044 1 2 3 + 1046: 11(fvec4) Load 13(outp) + 1047: 11(fvec4) VectorShuffle 1046 1045 0 4 5 6 + Store 13(outp) 1047 + 1055: 1052 Load 1054(samp2dr) + 1056: 20(fvec2) Load 1033(c2D) + 1067: 1048(ivec4) ImageGather 1055 1056 970 ConstOffsets 1066 + Store 1050(uoutp) 1067 + 1068: 1029(ptr) AccessChain 1025(arrayedSampler) 1064 + 1069: 1021 Load 1068 + 1070: 20(fvec2) Load 1033(c2D) + 1071: 11(fvec4) ImageGather 1069 1070 1064 + 1072: 11(fvec4) Load 13(outp) + 1073: 11(fvec4) FAdd 1072 1071 + Store 13(outp) 1073 + 1081: 1078 Load 1080(isamp2DA) + 1085: 1074(ivec4) ImageGather 1081 1083 25 ConstOffset 1084 + Store 1076(ioutp) 1085 + 1086: 1078 Load 1080(isamp2DA) + 1087: 1074(ivec4) ImageGather 1086 1083 25 ConstOffset 1084 + 1088: 1074(ivec4) Load 1076(ioutp) + 1089: 1074(ivec4) IAdd 1088 1087 + Store 1076(ioutp) 1089 + 1090: 1078 Load 1080(isamp2DA) + 1091: 23(int) Load 1027(i) + 1092: 24(ivec2) CompositeConstruct 1091 1091 + 1093: 1074(ivec4) ImageGather 1090 1083 1064 Offset 1092 + 1094: 1074(ivec4) Load 1076(ioutp) + 1095: 1074(ivec4) IAdd 1094 1093 + Store 1076(ioutp) 1095 + 1098: 11(fvec4) Load 1097(gl_FragCoord) + 1100: 11(fvec4) Load 1099(vl2) + 1101: 11(fvec4) FAdd 1098 1100 + 1102: 11(fvec4) Load 13(outp) + 1103: 11(fvec4) FAdd 1102 1101 + Store 13(outp) 1103 + 1108: 32(int) Load 1107(u) + 1109: 23(int) Load 1027(i) + 1110: 32(int) Bitcast 1109 + 1111: 32(int) UMod 1108 1110 + Store 1105(uo) 1111 + 1112: 2 FunctionCall 6(foo23() + 1113: 2 FunctionCall 8(doubles() Return FunctionEnd 6(foo23(): 2 Function None 3 @@ -249,1137 +249,1139 @@ Linked fragment stage: 18: 15 Load 17(u2drs) 19: 11(fvec4) Load 13(outp) 28: 10(float) CompositeExtract 19 2 - 29: 10(float) ImageSampleProjDrefExplicitLod 18 19 28 Grad ConstOffset 22 22 27 - 33: 32(ptr) AccessChain 13(outp) 31 - 34: 10(float) Load 33 - 35: 10(float) FAdd 34 29 - 36: 32(ptr) AccessChain 13(outp) 31 - Store 36 35 + 29: 10(float) CompositeExtract 19 3 + 30: 11(fvec4) CompositeInsert 29 19 2 + 31: 10(float) ImageSampleProjDrefExplicitLod 18 30 28 Grad ConstOffset 22 22 27 + 35: 34(ptr) AccessChain 13(outp) 33 + 36: 10(float) Load 35 + 37: 10(float) FAdd 36 31 + 38: 34(ptr) AccessChain 13(outp) 33 + Store 38 37 Return FunctionEnd 8(doubles(): 2 Function None 3 9: Label - 39(doublev): 38(ptr) Variable Function - 43(dvec2v): 42(ptr) Variable Function - 48(dvec3v): 47(ptr) Variable Function - 53(dvec4v): 52(ptr) Variable Function - 428(boolv): 427(ptr) Variable Function - 437(bvec2v): 436(ptr) Variable Function - 446(bvec3v): 445(ptr) Variable Function - 455(bvec4v): 454(ptr) Variable Function - 554: 427(ptr) Variable Function - 563: 436(ptr) Variable Function - 572: 445(ptr) Variable Function - 581: 454(ptr) Variable Function - 737(dmat2v): 736(ptr) Variable Function - 743(dmat3v): 742(ptr) Variable Function - 749(dmat4v): 748(ptr) Variable Function - 755(dmat2x3v): 754(ptr) Variable Function - 761(dmat3x2v): 760(ptr) Variable Function - 767(dmat2x4v): 766(ptr) Variable Function - 773(dmat4x2v): 772(ptr) Variable Function - 779(dmat3x4v): 778(ptr) Variable Function - 785(dmat4x3v): 784(ptr) Variable Function - Store 39(doublev) 40 - Store 43(dvec2v) 45 - Store 48(dvec3v) 50 - 54: 37(float) Load 39(doublev) - 55: 51(fvec4) CompositeConstruct 54 54 54 54 - 56: 51(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 55 - Store 53(dvec4v) 56 - 57: 37(float) Load 39(doublev) - 58: 37(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 57 - 59: 37(float) Load 39(doublev) - 60: 37(float) FAdd 59 58 - Store 39(doublev) 60 - 61: 41(fvec2) Load 43(dvec2v) - 62: 41(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 61 - 63: 41(fvec2) Load 43(dvec2v) - 64: 41(fvec2) FAdd 63 62 - Store 43(dvec2v) 64 - 65: 46(fvec3) Load 48(dvec3v) - 66: 46(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 65 - 67: 46(fvec3) Load 48(dvec3v) - 68: 46(fvec3) FAdd 67 66 - Store 48(dvec3v) 68 - 69: 51(fvec4) Load 53(dvec4v) - 70: 51(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 69 - 71: 51(fvec4) Load 53(dvec4v) - 72: 51(fvec4) FAdd 71 70 - Store 53(dvec4v) 72 - 73: 37(float) Load 39(doublev) - 74: 37(float) ExtInst 1(GLSL.std.450) 4(FAbs) 73 - 75: 37(float) Load 39(doublev) - 76: 37(float) FAdd 75 74 - Store 39(doublev) 76 - 77: 41(fvec2) Load 43(dvec2v) - 78: 41(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 77 - 79: 41(fvec2) Load 43(dvec2v) - 80: 41(fvec2) FAdd 79 78 - Store 43(dvec2v) 80 - 81: 46(fvec3) Load 48(dvec3v) - 82: 46(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 81 - 83: 46(fvec3) Load 48(dvec3v) - 84: 46(fvec3) FAdd 83 82 - Store 48(dvec3v) 84 - 85: 51(fvec4) Load 53(dvec4v) - 86: 51(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 85 - 87: 51(fvec4) Load 53(dvec4v) - 88: 51(fvec4) FAdd 87 86 - Store 53(dvec4v) 88 - 89: 37(float) Load 39(doublev) - 90: 37(float) ExtInst 1(GLSL.std.450) 6(FSign) 89 - 91: 37(float) Load 39(doublev) - 92: 37(float) FAdd 91 90 - Store 39(doublev) 92 - 93: 41(fvec2) Load 43(dvec2v) - 94: 41(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 93 - 95: 41(fvec2) Load 43(dvec2v) - 96: 41(fvec2) FAdd 95 94 - Store 43(dvec2v) 96 - 97: 46(fvec3) Load 48(dvec3v) - 98: 46(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 97 - 99: 46(fvec3) Load 48(dvec3v) - 100: 46(fvec3) FAdd 99 98 - Store 48(dvec3v) 100 - 101: 51(fvec4) Load 53(dvec4v) - 102: 51(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 101 - 103: 51(fvec4) Load 53(dvec4v) - 104: 51(fvec4) FAdd 103 102 - Store 53(dvec4v) 104 - 105: 37(float) Load 39(doublev) - 106: 37(float) ExtInst 1(GLSL.std.450) 8(Floor) 105 - 107: 37(float) Load 39(doublev) - 108: 37(float) FAdd 107 106 - Store 39(doublev) 108 - 109: 41(fvec2) Load 43(dvec2v) - 110: 41(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 109 - 111: 41(fvec2) Load 43(dvec2v) - 112: 41(fvec2) FAdd 111 110 - Store 43(dvec2v) 112 - 113: 46(fvec3) Load 48(dvec3v) - 114: 46(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 113 - 115: 46(fvec3) Load 48(dvec3v) - 116: 46(fvec3) FAdd 115 114 - Store 48(dvec3v) 116 - 117: 51(fvec4) Load 53(dvec4v) - 118: 51(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 117 - 119: 51(fvec4) Load 53(dvec4v) - 120: 51(fvec4) FAdd 119 118 - Store 53(dvec4v) 120 - 121: 37(float) Load 39(doublev) - 122: 37(float) ExtInst 1(GLSL.std.450) 3(Trunc) 121 - 123: 37(float) Load 39(doublev) - 124: 37(float) FAdd 123 122 - Store 39(doublev) 124 - 125: 41(fvec2) Load 43(dvec2v) - 126: 41(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 125 - 127: 41(fvec2) Load 43(dvec2v) - 128: 41(fvec2) FAdd 127 126 - Store 43(dvec2v) 128 - 129: 46(fvec3) Load 48(dvec3v) - 130: 46(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 129 - 131: 46(fvec3) Load 48(dvec3v) - 132: 46(fvec3) FAdd 131 130 - Store 48(dvec3v) 132 - 133: 51(fvec4) Load 53(dvec4v) - 134: 51(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 133 - 135: 51(fvec4) Load 53(dvec4v) - 136: 51(fvec4) FAdd 135 134 - Store 53(dvec4v) 136 - 137: 37(float) Load 39(doublev) - 138: 37(float) ExtInst 1(GLSL.std.450) 1(Round) 137 - 139: 37(float) Load 39(doublev) - 140: 37(float) FAdd 139 138 - Store 39(doublev) 140 - 141: 41(fvec2) Load 43(dvec2v) - 142: 41(fvec2) ExtInst 1(GLSL.std.450) 1(Round) 141 - 143: 41(fvec2) Load 43(dvec2v) - 144: 41(fvec2) FAdd 143 142 - Store 43(dvec2v) 144 - 145: 46(fvec3) Load 48(dvec3v) - 146: 46(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 145 - 147: 46(fvec3) Load 48(dvec3v) - 148: 46(fvec3) FAdd 147 146 - Store 48(dvec3v) 148 - 149: 51(fvec4) Load 53(dvec4v) - 150: 51(fvec4) ExtInst 1(GLSL.std.450) 1(Round) 149 - 151: 51(fvec4) Load 53(dvec4v) - 152: 51(fvec4) FAdd 151 150 - Store 53(dvec4v) 152 - 153: 37(float) Load 39(doublev) - 154: 37(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 153 - 155: 37(float) Load 39(doublev) - 156: 37(float) FAdd 155 154 - Store 39(doublev) 156 - 157: 41(fvec2) Load 43(dvec2v) - 158: 41(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 157 - 159: 41(fvec2) Load 43(dvec2v) - 160: 41(fvec2) FAdd 159 158 - Store 43(dvec2v) 160 - 161: 46(fvec3) Load 48(dvec3v) - 162: 46(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 161 - 163: 46(fvec3) Load 48(dvec3v) - 164: 46(fvec3) FAdd 163 162 - Store 48(dvec3v) 164 - 165: 51(fvec4) Load 53(dvec4v) - 166: 51(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 165 - 167: 51(fvec4) Load 53(dvec4v) - 168: 51(fvec4) FAdd 167 166 - Store 53(dvec4v) 168 - 169: 37(float) Load 39(doublev) - 170: 37(float) ExtInst 1(GLSL.std.450) 9(Ceil) 169 - 171: 37(float) Load 39(doublev) - 172: 37(float) FAdd 171 170 - Store 39(doublev) 172 - 173: 41(fvec2) Load 43(dvec2v) - 174: 41(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 173 - 175: 41(fvec2) Load 43(dvec2v) - 176: 41(fvec2) FAdd 175 174 - Store 43(dvec2v) 176 - 177: 46(fvec3) Load 48(dvec3v) - 178: 46(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 177 - 179: 46(fvec3) Load 48(dvec3v) - 180: 46(fvec3) FAdd 179 178 - Store 48(dvec3v) 180 - 181: 51(fvec4) Load 53(dvec4v) - 182: 51(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 181 - 183: 51(fvec4) Load 53(dvec4v) - 184: 51(fvec4) FAdd 183 182 - Store 53(dvec4v) 184 - 185: 37(float) Load 39(doublev) - 186: 37(float) ExtInst 1(GLSL.std.450) 10(Fract) 185 - 187: 37(float) Load 39(doublev) - 188: 37(float) FAdd 187 186 - Store 39(doublev) 188 - 189: 41(fvec2) Load 43(dvec2v) - 190: 41(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 189 - 191: 41(fvec2) Load 43(dvec2v) - 192: 41(fvec2) FAdd 191 190 - Store 43(dvec2v) 192 - 193: 46(fvec3) Load 48(dvec3v) - 194: 46(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 193 - 195: 46(fvec3) Load 48(dvec3v) - 196: 46(fvec3) FAdd 195 194 - Store 48(dvec3v) 196 - 197: 51(fvec4) Load 53(dvec4v) - 198: 51(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 197 - 199: 51(fvec4) Load 53(dvec4v) - 200: 51(fvec4) FAdd 199 198 - Store 53(dvec4v) 200 - 201: 37(float) Load 39(doublev) - 202: 37(float) Load 39(doublev) - 203: 37(float) FMod 201 202 - 204: 37(float) Load 39(doublev) - 205: 37(float) FAdd 204 203 - Store 39(doublev) 205 - 206: 41(fvec2) Load 43(dvec2v) - 207: 37(float) Load 39(doublev) - 208: 41(fvec2) CompositeConstruct 207 207 - 209: 41(fvec2) FMod 206 208 - 210: 41(fvec2) Load 43(dvec2v) - 211: 41(fvec2) FAdd 210 209 - Store 43(dvec2v) 211 - 212: 46(fvec3) Load 48(dvec3v) - 213: 37(float) Load 39(doublev) - 214: 46(fvec3) CompositeConstruct 213 213 213 - 215: 46(fvec3) FMod 212 214 - 216: 46(fvec3) Load 48(dvec3v) - 217: 46(fvec3) FAdd 216 215 - Store 48(dvec3v) 217 - 218: 51(fvec4) Load 53(dvec4v) - 219: 37(float) Load 39(doublev) - 220: 51(fvec4) CompositeConstruct 219 219 219 219 - 221: 51(fvec4) FMod 218 220 - 222: 51(fvec4) Load 53(dvec4v) - 223: 51(fvec4) FAdd 222 221 - Store 53(dvec4v) 223 - 224: 41(fvec2) Load 43(dvec2v) - 225: 41(fvec2) Load 43(dvec2v) - 226: 41(fvec2) FMod 224 225 - 227: 41(fvec2) Load 43(dvec2v) - 228: 41(fvec2) FAdd 227 226 - Store 43(dvec2v) 228 - 229: 46(fvec3) Load 48(dvec3v) - 230: 46(fvec3) Load 48(dvec3v) - 231: 46(fvec3) FMod 229 230 - 232: 46(fvec3) Load 48(dvec3v) - 233: 46(fvec3) FAdd 232 231 - Store 48(dvec3v) 233 - 234: 51(fvec4) Load 53(dvec4v) - 235: 51(fvec4) Load 53(dvec4v) - 236: 51(fvec4) FMod 234 235 - 237: 51(fvec4) Load 53(dvec4v) - 238: 51(fvec4) FAdd 237 236 - Store 53(dvec4v) 238 - 239: 37(float) Load 39(doublev) - 240: 37(float) ExtInst 1(GLSL.std.450) 35(Modf) 239 39(doublev) - 241: 37(float) Load 39(doublev) - 242: 37(float) FAdd 241 240 - Store 39(doublev) 242 - 243: 41(fvec2) Load 43(dvec2v) - 244: 41(fvec2) ExtInst 1(GLSL.std.450) 35(Modf) 243 43(dvec2v) - 245: 41(fvec2) Load 43(dvec2v) - 246: 41(fvec2) FAdd 245 244 - Store 43(dvec2v) 246 - 247: 46(fvec3) Load 48(dvec3v) - 248: 46(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 247 48(dvec3v) - 249: 46(fvec3) Load 48(dvec3v) - 250: 46(fvec3) FAdd 249 248 - Store 48(dvec3v) 250 - 251: 51(fvec4) Load 53(dvec4v) - 252: 51(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 251 53(dvec4v) - 253: 51(fvec4) Load 53(dvec4v) - 254: 51(fvec4) FAdd 253 252 - Store 53(dvec4v) 254 - 255: 37(float) Load 39(doublev) - 256: 37(float) Load 39(doublev) - 257: 37(float) ExtInst 1(GLSL.std.450) 37(FMin) 255 256 - 258: 37(float) Load 39(doublev) - 259: 37(float) FAdd 258 257 - Store 39(doublev) 259 - 260: 41(fvec2) Load 43(dvec2v) - 261: 37(float) Load 39(doublev) - 262: 41(fvec2) CompositeConstruct 261 261 - 263: 41(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 260 262 - 264: 41(fvec2) Load 43(dvec2v) - 265: 41(fvec2) FAdd 264 263 - Store 43(dvec2v) 265 - 266: 46(fvec3) Load 48(dvec3v) - 267: 37(float) Load 39(doublev) - 268: 46(fvec3) CompositeConstruct 267 267 267 - 269: 46(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 266 268 - 270: 46(fvec3) Load 48(dvec3v) - 271: 46(fvec3) FAdd 270 269 - Store 48(dvec3v) 271 - 272: 51(fvec4) Load 53(dvec4v) - 273: 37(float) Load 39(doublev) - 274: 51(fvec4) CompositeConstruct 273 273 273 273 - 275: 51(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 272 274 - 276: 51(fvec4) Load 53(dvec4v) - 277: 51(fvec4) FAdd 276 275 - Store 53(dvec4v) 277 - 278: 41(fvec2) Load 43(dvec2v) - 279: 41(fvec2) Load 43(dvec2v) - 280: 41(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 278 279 - 281: 41(fvec2) Load 43(dvec2v) - 282: 41(fvec2) FAdd 281 280 - Store 43(dvec2v) 282 - 283: 46(fvec3) Load 48(dvec3v) - 284: 46(fvec3) Load 48(dvec3v) - 285: 46(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 283 284 - 286: 46(fvec3) Load 48(dvec3v) - 287: 46(fvec3) FAdd 286 285 - Store 48(dvec3v) 287 - 288: 51(fvec4) Load 53(dvec4v) - 289: 51(fvec4) Load 53(dvec4v) - 290: 51(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 288 289 - 291: 51(fvec4) Load 53(dvec4v) - 292: 51(fvec4) FAdd 291 290 - Store 53(dvec4v) 292 - 293: 37(float) Load 39(doublev) - 294: 37(float) Load 39(doublev) - 295: 37(float) ExtInst 1(GLSL.std.450) 40(FMax) 293 294 - 296: 37(float) Load 39(doublev) - 297: 37(float) FAdd 296 295 - Store 39(doublev) 297 - 298: 41(fvec2) Load 43(dvec2v) - 299: 37(float) Load 39(doublev) - 300: 41(fvec2) CompositeConstruct 299 299 - 301: 41(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 298 300 - 302: 41(fvec2) Load 43(dvec2v) - 303: 41(fvec2) FAdd 302 301 - Store 43(dvec2v) 303 - 304: 46(fvec3) Load 48(dvec3v) - 305: 37(float) Load 39(doublev) - 306: 46(fvec3) CompositeConstruct 305 305 305 - 307: 46(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 304 306 - 308: 46(fvec3) Load 48(dvec3v) - 309: 46(fvec3) FAdd 308 307 - Store 48(dvec3v) 309 - 310: 51(fvec4) Load 53(dvec4v) - 311: 37(float) Load 39(doublev) - 312: 51(fvec4) CompositeConstruct 311 311 311 311 - 313: 51(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 310 312 - 314: 51(fvec4) Load 53(dvec4v) - 315: 51(fvec4) FAdd 314 313 - Store 53(dvec4v) 315 - 316: 41(fvec2) Load 43(dvec2v) - 317: 41(fvec2) Load 43(dvec2v) - 318: 41(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 316 317 - 319: 41(fvec2) Load 43(dvec2v) - 320: 41(fvec2) FAdd 319 318 - Store 43(dvec2v) 320 - 321: 46(fvec3) Load 48(dvec3v) - 322: 46(fvec3) Load 48(dvec3v) - 323: 46(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 321 322 - 324: 46(fvec3) Load 48(dvec3v) - 325: 46(fvec3) FAdd 324 323 - Store 48(dvec3v) 325 - 326: 51(fvec4) Load 53(dvec4v) - 327: 51(fvec4) Load 53(dvec4v) - 328: 51(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 326 327 - 329: 51(fvec4) Load 53(dvec4v) - 330: 51(fvec4) FAdd 329 328 - Store 53(dvec4v) 330 - 331: 37(float) Load 39(doublev) - 332: 37(float) Load 39(doublev) - 333: 37(float) Load 39(doublev) - 334: 37(float) ExtInst 1(GLSL.std.450) 43(FClamp) 331 332 333 - 335: 37(float) Load 39(doublev) - 336: 37(float) FAdd 335 334 - Store 39(doublev) 336 - 337: 41(fvec2) Load 43(dvec2v) - 338: 37(float) Load 39(doublev) - 339: 37(float) Load 39(doublev) - 340: 41(fvec2) CompositeConstruct 338 338 - 341: 41(fvec2) CompositeConstruct 339 339 - 342: 41(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 337 340 341 - 343: 41(fvec2) Load 43(dvec2v) - 344: 41(fvec2) FAdd 343 342 - Store 43(dvec2v) 344 - 345: 46(fvec3) Load 48(dvec3v) - 346: 37(float) Load 39(doublev) - 347: 37(float) Load 39(doublev) - 348: 46(fvec3) CompositeConstruct 346 346 346 - 349: 46(fvec3) CompositeConstruct 347 347 347 - 350: 46(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 345 348 349 - 351: 46(fvec3) Load 48(dvec3v) - 352: 46(fvec3) FAdd 351 350 - Store 48(dvec3v) 352 - 353: 51(fvec4) Load 53(dvec4v) - 354: 37(float) Load 39(doublev) - 355: 37(float) Load 39(doublev) - 356: 51(fvec4) CompositeConstruct 354 354 354 354 - 357: 51(fvec4) CompositeConstruct 355 355 355 355 - 358: 51(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 353 356 357 - 359: 51(fvec4) Load 53(dvec4v) - 360: 51(fvec4) FAdd 359 358 - Store 53(dvec4v) 360 - 361: 41(fvec2) Load 43(dvec2v) - 362: 41(fvec2) Load 43(dvec2v) - 363: 41(fvec2) Load 43(dvec2v) - 364: 41(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 361 362 363 - 365: 41(fvec2) Load 43(dvec2v) - 366: 41(fvec2) FAdd 365 364 - Store 43(dvec2v) 366 - 367: 46(fvec3) Load 48(dvec3v) - 368: 46(fvec3) Load 48(dvec3v) - 369: 46(fvec3) Load 48(dvec3v) - 370: 46(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 367 368 369 - 371: 46(fvec3) Load 48(dvec3v) - 372: 46(fvec3) FAdd 371 370 - Store 48(dvec3v) 372 - 373: 51(fvec4) Load 53(dvec4v) - 374: 51(fvec4) Load 53(dvec4v) - 375: 51(fvec4) Load 53(dvec4v) - 376: 51(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 373 374 375 - 377: 51(fvec4) Load 53(dvec4v) - 378: 51(fvec4) FAdd 377 376 - Store 53(dvec4v) 378 - 379: 37(float) Load 39(doublev) - 380: 37(float) Load 39(doublev) - 381: 37(float) Load 39(doublev) - 382: 37(float) ExtInst 1(GLSL.std.450) 46(FMix) 379 380 381 - 383: 37(float) Load 39(doublev) - 384: 37(float) FAdd 383 382 - Store 39(doublev) 384 - 385: 41(fvec2) Load 43(dvec2v) - 386: 41(fvec2) Load 43(dvec2v) - 387: 37(float) Load 39(doublev) - 388: 41(fvec2) CompositeConstruct 387 387 - 389: 41(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 385 386 388 - 390: 41(fvec2) Load 43(dvec2v) - 391: 41(fvec2) FAdd 390 389 - Store 43(dvec2v) 391 - 392: 46(fvec3) Load 48(dvec3v) - 393: 46(fvec3) Load 48(dvec3v) - 394: 37(float) Load 39(doublev) - 395: 46(fvec3) CompositeConstruct 394 394 394 - 396: 46(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 392 393 395 - 397: 46(fvec3) Load 48(dvec3v) - 398: 46(fvec3) FAdd 397 396 - Store 48(dvec3v) 398 - 399: 51(fvec4) Load 53(dvec4v) - 400: 51(fvec4) Load 53(dvec4v) - 401: 37(float) Load 39(doublev) - 402: 51(fvec4) CompositeConstruct 401 401 401 401 - 403: 51(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 399 400 402 - 404: 51(fvec4) Load 53(dvec4v) - 405: 51(fvec4) FAdd 404 403 - Store 53(dvec4v) 405 - 406: 41(fvec2) Load 43(dvec2v) - 407: 41(fvec2) Load 43(dvec2v) - 408: 41(fvec2) Load 43(dvec2v) - 409: 41(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 406 407 408 - 410: 41(fvec2) Load 43(dvec2v) - 411: 41(fvec2) FAdd 410 409 - Store 43(dvec2v) 411 - 412: 46(fvec3) Load 48(dvec3v) - 413: 46(fvec3) Load 48(dvec3v) - 414: 46(fvec3) Load 48(dvec3v) - 415: 46(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 412 413 414 - 416: 46(fvec3) Load 48(dvec3v) - 417: 46(fvec3) FAdd 416 415 - Store 48(dvec3v) 417 - 418: 51(fvec4) Load 53(dvec4v) - 419: 51(fvec4) Load 53(dvec4v) - 420: 51(fvec4) Load 53(dvec4v) - 421: 51(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 418 419 420 - 422: 51(fvec4) Load 53(dvec4v) - 423: 51(fvec4) FAdd 422 421 - Store 53(dvec4v) 423 - 424: 37(float) Load 39(doublev) - 425: 37(float) Load 39(doublev) - 429: 426(bool) Load 428(boolv) - 430: 37(float) Select 429 425 424 - 431: 37(float) Load 39(doublev) - 432: 37(float) FAdd 431 430 - Store 39(doublev) 432 - 433: 41(fvec2) Load 43(dvec2v) - 434: 41(fvec2) Load 43(dvec2v) - 438: 435(bvec2) Load 437(bvec2v) - 439: 41(fvec2) Select 438 434 433 - 440: 41(fvec2) Load 43(dvec2v) - 441: 41(fvec2) FAdd 440 439 - Store 43(dvec2v) 441 - 442: 46(fvec3) Load 48(dvec3v) - 443: 46(fvec3) Load 48(dvec3v) - 447: 444(bvec3) Load 446(bvec3v) - 448: 46(fvec3) Select 447 443 442 - 449: 46(fvec3) Load 48(dvec3v) - 450: 46(fvec3) FAdd 449 448 - Store 48(dvec3v) 450 - 451: 51(fvec4) Load 53(dvec4v) - 452: 51(fvec4) Load 53(dvec4v) - 456: 453(bvec4) Load 455(bvec4v) - 457: 51(fvec4) Select 456 452 451 - 458: 51(fvec4) Load 53(dvec4v) - 459: 51(fvec4) FAdd 458 457 - Store 53(dvec4v) 459 - 460: 37(float) Load 39(doublev) - 461: 37(float) Load 39(doublev) - 462: 37(float) ExtInst 1(GLSL.std.450) 48(Step) 460 461 - 463: 37(float) Load 39(doublev) - 464: 37(float) FAdd 463 462 - Store 39(doublev) 464 - 465: 41(fvec2) Load 43(dvec2v) - 466: 41(fvec2) Load 43(dvec2v) - 467: 41(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 465 466 - 468: 41(fvec2) Load 43(dvec2v) - 469: 41(fvec2) FAdd 468 467 - Store 43(dvec2v) 469 - 470: 46(fvec3) Load 48(dvec3v) - 471: 46(fvec3) Load 48(dvec3v) - 472: 46(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 470 471 - 473: 46(fvec3) Load 48(dvec3v) - 474: 46(fvec3) FAdd 473 472 - Store 48(dvec3v) 474 - 475: 51(fvec4) Load 53(dvec4v) - 476: 51(fvec4) Load 53(dvec4v) - 477: 51(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 475 476 - 478: 51(fvec4) Load 53(dvec4v) - 479: 51(fvec4) FAdd 478 477 - Store 53(dvec4v) 479 - 480: 37(float) Load 39(doublev) - 481: 41(fvec2) Load 43(dvec2v) - 482: 41(fvec2) CompositeConstruct 480 480 - 483: 41(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 482 481 - 484: 41(fvec2) Load 43(dvec2v) - 485: 41(fvec2) FAdd 484 483 - Store 43(dvec2v) 485 - 486: 37(float) Load 39(doublev) - 487: 46(fvec3) Load 48(dvec3v) - 488: 46(fvec3) CompositeConstruct 486 486 486 - 489: 46(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 488 487 - 490: 46(fvec3) Load 48(dvec3v) - 491: 46(fvec3) FAdd 490 489 - Store 48(dvec3v) 491 - 492: 37(float) Load 39(doublev) - 493: 51(fvec4) Load 53(dvec4v) - 494: 51(fvec4) CompositeConstruct 492 492 492 492 - 495: 51(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 494 493 - 496: 51(fvec4) Load 53(dvec4v) - 497: 51(fvec4) FAdd 496 495 - Store 53(dvec4v) 497 - 498: 37(float) Load 39(doublev) - 499: 37(float) Load 39(doublev) - 500: 37(float) Load 39(doublev) - 501: 37(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 498 499 500 - 502: 37(float) Load 39(doublev) - 503: 37(float) FAdd 502 501 - Store 39(doublev) 503 - 504: 41(fvec2) Load 43(dvec2v) - 505: 41(fvec2) Load 43(dvec2v) - 506: 41(fvec2) Load 43(dvec2v) - 507: 41(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 504 505 506 - 508: 41(fvec2) Load 43(dvec2v) - 509: 41(fvec2) FAdd 508 507 - Store 43(dvec2v) 509 - 510: 46(fvec3) Load 48(dvec3v) - 511: 46(fvec3) Load 48(dvec3v) - 512: 46(fvec3) Load 48(dvec3v) - 513: 46(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 510 511 512 - 514: 46(fvec3) Load 48(dvec3v) - 515: 46(fvec3) FAdd 514 513 - Store 48(dvec3v) 515 - 516: 51(fvec4) Load 53(dvec4v) - 517: 51(fvec4) Load 53(dvec4v) - 518: 51(fvec4) Load 53(dvec4v) - 519: 51(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 516 517 518 - 520: 51(fvec4) Load 53(dvec4v) - 521: 51(fvec4) FAdd 520 519 - Store 53(dvec4v) 521 - 522: 37(float) Load 39(doublev) - 523: 37(float) Load 39(doublev) - 524: 41(fvec2) Load 43(dvec2v) - 525: 41(fvec2) CompositeConstruct 522 522 - 526: 41(fvec2) CompositeConstruct 523 523 - 527: 41(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 525 526 524 - 528: 41(fvec2) Load 43(dvec2v) - 529: 41(fvec2) FAdd 528 527 - Store 43(dvec2v) 529 - 530: 37(float) Load 39(doublev) - 531: 37(float) Load 39(doublev) - 532: 46(fvec3) Load 48(dvec3v) - 533: 46(fvec3) CompositeConstruct 530 530 530 - 534: 46(fvec3) CompositeConstruct 531 531 531 - 535: 46(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 533 534 532 - 536: 46(fvec3) Load 48(dvec3v) - 537: 46(fvec3) FAdd 536 535 - Store 48(dvec3v) 537 - 538: 37(float) Load 39(doublev) - 539: 37(float) Load 39(doublev) - 540: 51(fvec4) Load 53(dvec4v) - 541: 51(fvec4) CompositeConstruct 538 538 538 538 - 542: 51(fvec4) CompositeConstruct 539 539 539 539 - 543: 51(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 541 542 540 - 544: 51(fvec4) Load 53(dvec4v) - 545: 51(fvec4) FAdd 544 543 - Store 53(dvec4v) 545 - 546: 37(float) Load 39(doublev) - 547: 426(bool) IsNan 546 - Store 428(boolv) 547 - 548: 41(fvec2) Load 43(dvec2v) - 549: 435(bvec2) IsNan 548 - Store 437(bvec2v) 549 - 550: 46(fvec3) Load 48(dvec3v) - 551: 444(bvec3) IsNan 550 - Store 446(bvec3v) 551 - 552: 51(fvec4) Load 53(dvec4v) - 553: 453(bvec4) IsNan 552 - Store 455(bvec4v) 553 - 555: 426(bool) Load 428(boolv) - SelectionMerge 557 None - BranchConditional 555 556 560 - 556: Label - 558: 37(float) Load 39(doublev) - 559: 426(bool) IsInf 558 - Store 554 559 - Branch 557 - 560: Label - Store 554 561 - Branch 557 - 557: Label - 562: 426(bool) Load 554 - Store 428(boolv) 562 - 564: 426(bool) Load 428(boolv) - SelectionMerge 566 None - BranchConditional 564 565 569 - 565: Label - 567: 41(fvec2) Load 43(dvec2v) - 568: 435(bvec2) IsInf 567 - Store 563 568 - Branch 566 - 569: Label - Store 563 570 - Branch 566 - 566: Label - 571: 435(bvec2) Load 563 - Store 437(bvec2v) 571 - 573: 426(bool) Load 428(boolv) - SelectionMerge 575 None - BranchConditional 573 574 578 - 574: Label - 576: 46(fvec3) Load 48(dvec3v) - 577: 444(bvec3) IsInf 576 - Store 572 577 - Branch 575 - 578: Label - Store 572 579 - Branch 575 - 575: Label - 580: 444(bvec3) Load 572 - Store 446(bvec3v) 580 - 582: 426(bool) Load 428(boolv) - SelectionMerge 584 None - BranchConditional 582 583 587 - 583: Label - 585: 51(fvec4) Load 53(dvec4v) - 586: 453(bvec4) IsInf 585 - Store 581 586 - Branch 584 - 587: Label - Store 581 588 - Branch 584 - 584: Label - 589: 453(bvec4) Load 581 - Store 455(bvec4v) 589 - 590: 37(float) Load 39(doublev) - 591: 37(float) ExtInst 1(GLSL.std.450) 66(Length) 590 - 592: 37(float) Load 39(doublev) - 593: 37(float) FAdd 592 591 - Store 39(doublev) 593 - 594: 41(fvec2) Load 43(dvec2v) - 595: 37(float) ExtInst 1(GLSL.std.450) 66(Length) 594 - 596: 37(float) Load 39(doublev) - 597: 37(float) FAdd 596 595 - Store 39(doublev) 597 - 598: 46(fvec3) Load 48(dvec3v) - 599: 37(float) ExtInst 1(GLSL.std.450) 66(Length) 598 - 600: 37(float) Load 39(doublev) - 601: 37(float) FAdd 600 599 - Store 39(doublev) 601 - 602: 51(fvec4) Load 53(dvec4v) - 603: 37(float) ExtInst 1(GLSL.std.450) 66(Length) 602 - 604: 37(float) Load 39(doublev) - 605: 37(float) FAdd 604 603 - Store 39(doublev) 605 - 606: 37(float) Load 39(doublev) - 607: 37(float) Load 39(doublev) - 608: 37(float) ExtInst 1(GLSL.std.450) 67(Distance) 606 607 - 609: 37(float) Load 39(doublev) - 610: 37(float) FAdd 609 608 - Store 39(doublev) 610 - 611: 41(fvec2) Load 43(dvec2v) - 612: 41(fvec2) Load 43(dvec2v) - 613: 37(float) ExtInst 1(GLSL.std.450) 67(Distance) 611 612 - 614: 37(float) Load 39(doublev) - 615: 37(float) FAdd 614 613 - Store 39(doublev) 615 - 616: 46(fvec3) Load 48(dvec3v) - 617: 46(fvec3) Load 48(dvec3v) - 618: 37(float) ExtInst 1(GLSL.std.450) 67(Distance) 616 617 - 619: 37(float) Load 39(doublev) - 620: 37(float) FAdd 619 618 - Store 39(doublev) 620 - 621: 51(fvec4) Load 53(dvec4v) - 622: 51(fvec4) Load 53(dvec4v) - 623: 37(float) ExtInst 1(GLSL.std.450) 67(Distance) 621 622 - 624: 37(float) Load 39(doublev) - 625: 37(float) FAdd 624 623 - Store 39(doublev) 625 - 626: 37(float) Load 39(doublev) - 627: 37(float) Load 39(doublev) - 628: 37(float) FMul 626 627 - 629: 37(float) Load 39(doublev) - 630: 37(float) FAdd 629 628 - Store 39(doublev) 630 - 631: 41(fvec2) Load 43(dvec2v) - 632: 41(fvec2) Load 43(dvec2v) - 633: 37(float) Dot 631 632 - 634: 37(float) Load 39(doublev) - 635: 37(float) FAdd 634 633 - Store 39(doublev) 635 - 636: 46(fvec3) Load 48(dvec3v) - 637: 46(fvec3) Load 48(dvec3v) - 638: 37(float) Dot 636 637 - 639: 37(float) Load 39(doublev) - 640: 37(float) FAdd 639 638 - Store 39(doublev) 640 - 641: 51(fvec4) Load 53(dvec4v) - 642: 51(fvec4) Load 53(dvec4v) - 643: 37(float) Dot 641 642 - 644: 37(float) Load 39(doublev) - 645: 37(float) FAdd 644 643 - Store 39(doublev) 645 - 646: 46(fvec3) Load 48(dvec3v) - 647: 46(fvec3) Load 48(dvec3v) - 648: 46(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 646 647 - 649: 46(fvec3) Load 48(dvec3v) - 650: 46(fvec3) FAdd 649 648 - Store 48(dvec3v) 650 - 651: 37(float) Load 39(doublev) - 652: 37(float) ExtInst 1(GLSL.std.450) 69(Normalize) 651 - 653: 37(float) Load 39(doublev) - 654: 37(float) FAdd 653 652 - Store 39(doublev) 654 - 655: 41(fvec2) Load 43(dvec2v) - 656: 41(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 655 - 657: 41(fvec2) Load 43(dvec2v) - 658: 41(fvec2) FAdd 657 656 - Store 43(dvec2v) 658 - 659: 46(fvec3) Load 48(dvec3v) - 660: 46(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 659 - 661: 46(fvec3) Load 48(dvec3v) - 662: 46(fvec3) FAdd 661 660 - Store 48(dvec3v) 662 - 663: 51(fvec4) Load 53(dvec4v) - 664: 51(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 663 - 665: 51(fvec4) Load 53(dvec4v) - 666: 51(fvec4) FAdd 665 664 - Store 53(dvec4v) 666 - 667: 37(float) Load 39(doublev) - 668: 37(float) Load 39(doublev) - 669: 37(float) Load 39(doublev) - 670: 37(float) ExtInst 1(GLSL.std.450) 70(FaceForward) 667 668 669 - 671: 37(float) Load 39(doublev) - 672: 37(float) FAdd 671 670 - Store 39(doublev) 672 - 673: 41(fvec2) Load 43(dvec2v) - 674: 41(fvec2) Load 43(dvec2v) - 675: 41(fvec2) Load 43(dvec2v) - 676: 41(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 673 674 675 - 677: 41(fvec2) Load 43(dvec2v) - 678: 41(fvec2) FAdd 677 676 - Store 43(dvec2v) 678 - 679: 46(fvec3) Load 48(dvec3v) - 680: 46(fvec3) Load 48(dvec3v) - 681: 46(fvec3) Load 48(dvec3v) - 682: 46(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 679 680 681 - 683: 46(fvec3) Load 48(dvec3v) - 684: 46(fvec3) FAdd 683 682 - Store 48(dvec3v) 684 - 685: 51(fvec4) Load 53(dvec4v) - 686: 51(fvec4) Load 53(dvec4v) - 687: 51(fvec4) Load 53(dvec4v) - 688: 51(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 685 686 687 - 689: 51(fvec4) Load 53(dvec4v) - 690: 51(fvec4) FAdd 689 688 - Store 53(dvec4v) 690 - 691: 37(float) Load 39(doublev) - 692: 37(float) Load 39(doublev) - 693: 37(float) ExtInst 1(GLSL.std.450) 71(Reflect) 691 692 - 694: 37(float) Load 39(doublev) - 695: 37(float) FAdd 694 693 - Store 39(doublev) 695 - 696: 41(fvec2) Load 43(dvec2v) - 697: 41(fvec2) Load 43(dvec2v) - 698: 41(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 696 697 - 699: 41(fvec2) Load 43(dvec2v) - 700: 41(fvec2) FAdd 699 698 - Store 43(dvec2v) 700 - 701: 46(fvec3) Load 48(dvec3v) - 702: 46(fvec3) Load 48(dvec3v) - 703: 46(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 701 702 - 704: 46(fvec3) Load 48(dvec3v) - 705: 46(fvec3) FAdd 704 703 - Store 48(dvec3v) 705 - 706: 51(fvec4) Load 53(dvec4v) - 707: 51(fvec4) Load 53(dvec4v) - 708: 51(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 706 707 - 709: 51(fvec4) Load 53(dvec4v) - 710: 51(fvec4) FAdd 709 708 - Store 53(dvec4v) 710 - 711: 37(float) Load 39(doublev) - 712: 37(float) Load 39(doublev) - 713: 37(float) Load 39(doublev) - 714: 37(float) ExtInst 1(GLSL.std.450) 72(Refract) 711 712 713 - 715: 37(float) Load 39(doublev) - 716: 37(float) FAdd 715 714 - Store 39(doublev) 716 - 717: 41(fvec2) Load 43(dvec2v) - 718: 41(fvec2) Load 43(dvec2v) - 719: 37(float) Load 39(doublev) - 720: 41(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 717 718 719 - 721: 41(fvec2) Load 43(dvec2v) - 722: 41(fvec2) FAdd 721 720 - Store 43(dvec2v) 722 - 723: 46(fvec3) Load 48(dvec3v) - 724: 46(fvec3) Load 48(dvec3v) - 725: 37(float) Load 39(doublev) - 726: 46(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 723 724 725 - 727: 46(fvec3) Load 48(dvec3v) - 728: 46(fvec3) FAdd 727 726 - Store 48(dvec3v) 728 - 729: 51(fvec4) Load 53(dvec4v) - 730: 51(fvec4) Load 53(dvec4v) - 731: 37(float) Load 39(doublev) - 732: 51(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 729 730 731 - 733: 51(fvec4) Load 53(dvec4v) - 734: 51(fvec4) FAdd 733 732 - Store 53(dvec4v) 734 - 738: 41(fvec2) Load 43(dvec2v) - 739: 41(fvec2) Load 43(dvec2v) - 740: 735 OuterProduct 738 739 - Store 737(dmat2v) 740 - 744: 46(fvec3) Load 48(dvec3v) - 745: 46(fvec3) Load 48(dvec3v) - 746: 741 OuterProduct 744 745 - Store 743(dmat3v) 746 - 750: 51(fvec4) Load 53(dvec4v) - 751: 51(fvec4) Load 53(dvec4v) - 752: 747 OuterProduct 750 751 - Store 749(dmat4v) 752 - 756: 46(fvec3) Load 48(dvec3v) - 757: 41(fvec2) Load 43(dvec2v) - 758: 753 OuterProduct 756 757 - Store 755(dmat2x3v) 758 - 762: 41(fvec2) Load 43(dvec2v) - 763: 46(fvec3) Load 48(dvec3v) - 764: 759 OuterProduct 762 763 - Store 761(dmat3x2v) 764 - 768: 51(fvec4) Load 53(dvec4v) - 769: 41(fvec2) Load 43(dvec2v) - 770: 765 OuterProduct 768 769 - Store 767(dmat2x4v) 770 - 774: 41(fvec2) Load 43(dvec2v) - 775: 51(fvec4) Load 53(dvec4v) - 776: 771 OuterProduct 774 775 - Store 773(dmat4x2v) 776 - 780: 51(fvec4) Load 53(dvec4v) - 781: 46(fvec3) Load 48(dvec3v) - 782: 777 OuterProduct 780 781 - Store 779(dmat3x4v) 782 - 786: 46(fvec3) Load 48(dvec3v) - 787: 51(fvec4) Load 53(dvec4v) - 788: 783 OuterProduct 786 787 - Store 785(dmat4x3v) 788 - 789: 735 Load 737(dmat2v) - 790: 735 Load 737(dmat2v) - 791: 41(fvec2) CompositeExtract 789 0 - 792: 41(fvec2) CompositeExtract 790 0 - 793: 41(fvec2) FMul 791 792 - 794: 41(fvec2) CompositeExtract 789 1 - 795: 41(fvec2) CompositeExtract 790 1 - 796: 41(fvec2) FMul 794 795 - 797: 735 CompositeConstruct 793 796 - 798: 735 Load 737(dmat2v) - 799: 735 MatrixTimesMatrix 798 797 - Store 737(dmat2v) 799 - 800: 741 Load 743(dmat3v) - 801: 741 Load 743(dmat3v) - 802: 46(fvec3) CompositeExtract 800 0 - 803: 46(fvec3) CompositeExtract 801 0 - 804: 46(fvec3) FMul 802 803 - 805: 46(fvec3) CompositeExtract 800 1 - 806: 46(fvec3) CompositeExtract 801 1 - 807: 46(fvec3) FMul 805 806 - 808: 46(fvec3) CompositeExtract 800 2 - 809: 46(fvec3) CompositeExtract 801 2 - 810: 46(fvec3) FMul 808 809 - 811: 741 CompositeConstruct 804 807 810 - 812: 741 Load 743(dmat3v) - 813: 741 MatrixTimesMatrix 812 811 - Store 743(dmat3v) 813 - 814: 747 Load 749(dmat4v) - 815: 747 Load 749(dmat4v) - 816: 51(fvec4) CompositeExtract 814 0 - 817: 51(fvec4) CompositeExtract 815 0 - 818: 51(fvec4) FMul 816 817 - 819: 51(fvec4) CompositeExtract 814 1 - 820: 51(fvec4) CompositeExtract 815 1 - 821: 51(fvec4) FMul 819 820 - 822: 51(fvec4) CompositeExtract 814 2 - 823: 51(fvec4) CompositeExtract 815 2 - 824: 51(fvec4) FMul 822 823 - 825: 51(fvec4) CompositeExtract 814 3 - 826: 51(fvec4) CompositeExtract 815 3 - 827: 51(fvec4) FMul 825 826 - 828: 747 CompositeConstruct 818 821 824 827 - 829: 747 Load 749(dmat4v) - 830: 747 MatrixTimesMatrix 829 828 - Store 749(dmat4v) 830 - 831: 753 Load 755(dmat2x3v) - 832: 753 Load 755(dmat2x3v) - 833: 46(fvec3) CompositeExtract 831 0 - 834: 46(fvec3) CompositeExtract 832 0 - 835: 46(fvec3) FMul 833 834 - 836: 46(fvec3) CompositeExtract 831 1 - 837: 46(fvec3) CompositeExtract 832 1 - 838: 46(fvec3) FMul 836 837 - 839: 753 CompositeConstruct 835 838 - Store 755(dmat2x3v) 839 - 840: 765 Load 767(dmat2x4v) - 841: 765 Load 767(dmat2x4v) - 842: 51(fvec4) CompositeExtract 840 0 - 843: 51(fvec4) CompositeExtract 841 0 - 844: 51(fvec4) FMul 842 843 - 845: 51(fvec4) CompositeExtract 840 1 - 846: 51(fvec4) CompositeExtract 841 1 - 847: 51(fvec4) FMul 845 846 - 848: 765 CompositeConstruct 844 847 - Store 767(dmat2x4v) 848 - 849: 759 Load 761(dmat3x2v) - 850: 759 Load 761(dmat3x2v) - 851: 41(fvec2) CompositeExtract 849 0 - 852: 41(fvec2) CompositeExtract 850 0 - 853: 41(fvec2) FMul 851 852 - 854: 41(fvec2) CompositeExtract 849 1 - 855: 41(fvec2) CompositeExtract 850 1 - 856: 41(fvec2) FMul 854 855 - 857: 41(fvec2) CompositeExtract 849 2 - 858: 41(fvec2) CompositeExtract 850 2 - 859: 41(fvec2) FMul 857 858 - 860: 759 CompositeConstruct 853 856 859 - Store 761(dmat3x2v) 860 - 861: 777 Load 779(dmat3x4v) - 862: 777 Load 779(dmat3x4v) - 863: 51(fvec4) CompositeExtract 861 0 - 864: 51(fvec4) CompositeExtract 862 0 - 865: 51(fvec4) FMul 863 864 - 866: 51(fvec4) CompositeExtract 861 1 - 867: 51(fvec4) CompositeExtract 862 1 - 868: 51(fvec4) FMul 866 867 - 869: 51(fvec4) CompositeExtract 861 2 - 870: 51(fvec4) CompositeExtract 862 2 - 871: 51(fvec4) FMul 869 870 - 872: 777 CompositeConstruct 865 868 871 - Store 779(dmat3x4v) 872 - 873: 771 Load 773(dmat4x2v) - 874: 771 Load 773(dmat4x2v) - 875: 41(fvec2) CompositeExtract 873 0 - 876: 41(fvec2) CompositeExtract 874 0 - 877: 41(fvec2) FMul 875 876 - 878: 41(fvec2) CompositeExtract 873 1 - 879: 41(fvec2) CompositeExtract 874 1 - 880: 41(fvec2) FMul 878 879 - 881: 41(fvec2) CompositeExtract 873 2 - 882: 41(fvec2) CompositeExtract 874 2 - 883: 41(fvec2) FMul 881 882 - 884: 41(fvec2) CompositeExtract 873 3 - 885: 41(fvec2) CompositeExtract 874 3 - 886: 41(fvec2) FMul 884 885 - 887: 771 CompositeConstruct 877 880 883 886 - Store 773(dmat4x2v) 887 - 888: 783 Load 785(dmat4x3v) - 889: 783 Load 785(dmat4x3v) - 890: 46(fvec3) CompositeExtract 888 0 - 891: 46(fvec3) CompositeExtract 889 0 - 892: 46(fvec3) FMul 890 891 - 893: 46(fvec3) CompositeExtract 888 1 - 894: 46(fvec3) CompositeExtract 889 1 - 895: 46(fvec3) FMul 893 894 - 896: 46(fvec3) CompositeExtract 888 2 - 897: 46(fvec3) CompositeExtract 889 2 - 898: 46(fvec3) FMul 896 897 - 899: 46(fvec3) CompositeExtract 888 3 - 900: 46(fvec3) CompositeExtract 889 3 - 901: 46(fvec3) FMul 899 900 - 902: 783 CompositeConstruct 892 895 898 901 - Store 785(dmat4x3v) 902 - 903: 735 Load 737(dmat2v) - 904: 735 Transpose 903 - 905: 735 Load 737(dmat2v) - 906: 735 MatrixTimesMatrix 905 904 - Store 737(dmat2v) 906 - 907: 741 Load 743(dmat3v) - 908: 741 Transpose 907 - 909: 741 Load 743(dmat3v) - 910: 741 MatrixTimesMatrix 909 908 - Store 743(dmat3v) 910 - 911: 747 Load 749(dmat4v) - 912: 747 Transpose 911 - 913: 747 Load 749(dmat4v) - 914: 747 MatrixTimesMatrix 913 912 - Store 749(dmat4v) 914 - 915: 759 Load 761(dmat3x2v) - 916: 753 Transpose 915 - Store 755(dmat2x3v) 916 - 917: 753 Load 755(dmat2x3v) - 918: 759 Transpose 917 - Store 761(dmat3x2v) 918 - 919: 771 Load 773(dmat4x2v) - 920: 765 Transpose 919 - Store 767(dmat2x4v) 920 - 921: 765 Load 767(dmat2x4v) - 922: 771 Transpose 921 - Store 773(dmat4x2v) 922 - 923: 783 Load 785(dmat4x3v) - 924: 777 Transpose 923 - Store 779(dmat3x4v) 924 - 925: 777 Load 779(dmat3x4v) - 926: 783 Transpose 925 - Store 785(dmat4x3v) 926 - 927: 735 Load 737(dmat2v) - 928: 37(float) ExtInst 1(GLSL.std.450) 33(Determinant) 927 - 929: 37(float) Load 39(doublev) - 930: 37(float) FAdd 929 928 - Store 39(doublev) 930 - 931: 741 Load 743(dmat3v) - 932: 37(float) ExtInst 1(GLSL.std.450) 33(Determinant) 931 - 933: 37(float) Load 39(doublev) - 934: 37(float) FAdd 933 932 - Store 39(doublev) 934 - 935: 747 Load 749(dmat4v) - 936: 37(float) ExtInst 1(GLSL.std.450) 33(Determinant) 935 - 937: 37(float) Load 39(doublev) - 938: 37(float) FAdd 937 936 - Store 39(doublev) 938 - 939: 735 Load 737(dmat2v) - 940: 735 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 939 - 941: 735 Load 737(dmat2v) - 942: 735 MatrixTimesMatrix 941 940 - Store 737(dmat2v) 942 - 943: 741 Load 743(dmat3v) - 944: 741 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 943 - 945: 741 Load 743(dmat3v) - 946: 741 MatrixTimesMatrix 945 944 - Store 743(dmat3v) 946 - 947: 747 Load 749(dmat4v) - 948: 747 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 947 - 949: 747 Load 749(dmat4v) - 950: 747 MatrixTimesMatrix 949 948 - Store 749(dmat4v) 950 - 951: 37(float) Load 39(doublev) - 953: 38(ptr) AccessChain 43(dvec2v) 952 - 954: 37(float) Load 953 - 955: 37(float) FAdd 951 954 - 957: 38(ptr) AccessChain 48(dvec3v) 956 - 958: 37(float) Load 957 - 959: 37(float) FAdd 955 958 - 961: 38(ptr) AccessChain 53(dvec4v) 960 - 962: 37(float) Load 961 - 963: 37(float) FAdd 959 962 - 965: 38(ptr) AccessChain 737(dmat2v) 964 952 - 966: 37(float) Load 965 - 967: 37(float) FAdd 963 966 - 969: 38(ptr) AccessChain 743(dmat3v) 968 956 - 970: 37(float) Load 969 - 971: 37(float) FAdd 967 970 - 972: 38(ptr) AccessChain 749(dmat4v) 25 960 - 973: 37(float) Load 972 - 974: 37(float) FAdd 971 973 - 975: 38(ptr) AccessChain 755(dmat2x3v) 964 952 - 976: 37(float) Load 975 - 977: 37(float) FAdd 974 976 - 978: 38(ptr) AccessChain 761(dmat3x2v) 964 952 - 979: 37(float) Load 978 - 980: 37(float) FAdd 977 979 - 981: 38(ptr) AccessChain 779(dmat3x4v) 968 956 - 982: 37(float) Load 981 - 983: 37(float) FAdd 980 982 - 984: 38(ptr) AccessChain 785(dmat4x3v) 968 956 - 985: 37(float) Load 984 - 986: 37(float) FAdd 983 985 - 987: 38(ptr) AccessChain 767(dmat2x4v) 964 952 - 988: 37(float) Load 987 - 989: 37(float) FAdd 986 988 - 990: 38(ptr) AccessChain 773(dmat4x2v) 964 952 - 991: 37(float) Load 990 - 992: 37(float) FAdd 989 991 - 993: 426(bool) Load 428(boolv) - 995: 10(float) Select 993 994 21 - 996: 37(float) FConvert 995 - 997: 37(float) FAdd 992 996 - 998: 435(bvec2) Load 437(bvec2v) - 999: 426(bool) CompositeExtract 998 0 - 1000: 10(float) Select 999 994 21 - 1001: 37(float) FConvert 1000 - 1002: 37(float) FAdd 997 1001 - 1003: 444(bvec3) Load 446(bvec3v) - 1004: 426(bool) CompositeExtract 1003 0 - 1005: 10(float) Select 1004 994 21 - 1006: 37(float) FConvert 1005 - 1007: 37(float) FAdd 1002 1006 - 1008: 453(bvec4) Load 455(bvec4v) - 1009: 426(bool) CompositeExtract 1008 0 - 1010: 10(float) Select 1009 994 21 - 1011: 37(float) FConvert 1010 - 1012: 37(float) FAdd 1007 1011 - 1013: 10(float) FConvert 1012 - 1014: 11(fvec4) Load 13(outp) - 1015: 11(fvec4) VectorTimesScalar 1014 1013 - Store 13(outp) 1015 + 41(doublev): 40(ptr) Variable Function + 45(dvec2v): 44(ptr) Variable Function + 50(dvec3v): 49(ptr) Variable Function + 55(dvec4v): 54(ptr) Variable Function + 430(boolv): 429(ptr) Variable Function + 439(bvec2v): 438(ptr) Variable Function + 448(bvec3v): 447(ptr) Variable Function + 457(bvec4v): 456(ptr) Variable Function + 556: 429(ptr) Variable Function + 565: 438(ptr) Variable Function + 574: 447(ptr) Variable Function + 583: 456(ptr) Variable Function + 739(dmat2v): 738(ptr) Variable Function + 745(dmat3v): 744(ptr) Variable Function + 751(dmat4v): 750(ptr) Variable Function + 757(dmat2x3v): 756(ptr) Variable Function + 763(dmat3x2v): 762(ptr) Variable Function + 769(dmat2x4v): 768(ptr) Variable Function + 775(dmat4x2v): 774(ptr) Variable Function + 781(dmat3x4v): 780(ptr) Variable Function + 787(dmat4x3v): 786(ptr) Variable Function + Store 41(doublev) 42 + Store 45(dvec2v) 47 + Store 50(dvec3v) 52 + 56: 39(float) Load 41(doublev) + 57: 53(fvec4) CompositeConstruct 56 56 56 56 + 58: 53(fvec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 57 + Store 55(dvec4v) 58 + 59: 39(float) Load 41(doublev) + 60: 39(float) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 59 + 61: 39(float) Load 41(doublev) + 62: 39(float) FAdd 61 60 + Store 41(doublev) 62 + 63: 43(fvec2) Load 45(dvec2v) + 64: 43(fvec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 63 + 65: 43(fvec2) Load 45(dvec2v) + 66: 43(fvec2) FAdd 65 64 + Store 45(dvec2v) 66 + 67: 48(fvec3) Load 50(dvec3v) + 68: 48(fvec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 67 + 69: 48(fvec3) Load 50(dvec3v) + 70: 48(fvec3) FAdd 69 68 + Store 50(dvec3v) 70 + 71: 53(fvec4) Load 55(dvec4v) + 72: 53(fvec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 71 + 73: 53(fvec4) Load 55(dvec4v) + 74: 53(fvec4) FAdd 73 72 + Store 55(dvec4v) 74 + 75: 39(float) Load 41(doublev) + 76: 39(float) ExtInst 1(GLSL.std.450) 4(FAbs) 75 + 77: 39(float) Load 41(doublev) + 78: 39(float) FAdd 77 76 + Store 41(doublev) 78 + 79: 43(fvec2) Load 45(dvec2v) + 80: 43(fvec2) ExtInst 1(GLSL.std.450) 4(FAbs) 79 + 81: 43(fvec2) Load 45(dvec2v) + 82: 43(fvec2) FAdd 81 80 + Store 45(dvec2v) 82 + 83: 48(fvec3) Load 50(dvec3v) + 84: 48(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 83 + 85: 48(fvec3) Load 50(dvec3v) + 86: 48(fvec3) FAdd 85 84 + Store 50(dvec3v) 86 + 87: 53(fvec4) Load 55(dvec4v) + 88: 53(fvec4) ExtInst 1(GLSL.std.450) 4(FAbs) 87 + 89: 53(fvec4) Load 55(dvec4v) + 90: 53(fvec4) FAdd 89 88 + Store 55(dvec4v) 90 + 91: 39(float) Load 41(doublev) + 92: 39(float) ExtInst 1(GLSL.std.450) 6(FSign) 91 + 93: 39(float) Load 41(doublev) + 94: 39(float) FAdd 93 92 + Store 41(doublev) 94 + 95: 43(fvec2) Load 45(dvec2v) + 96: 43(fvec2) ExtInst 1(GLSL.std.450) 6(FSign) 95 + 97: 43(fvec2) Load 45(dvec2v) + 98: 43(fvec2) FAdd 97 96 + Store 45(dvec2v) 98 + 99: 48(fvec3) Load 50(dvec3v) + 100: 48(fvec3) ExtInst 1(GLSL.std.450) 6(FSign) 99 + 101: 48(fvec3) Load 50(dvec3v) + 102: 48(fvec3) FAdd 101 100 + Store 50(dvec3v) 102 + 103: 53(fvec4) Load 55(dvec4v) + 104: 53(fvec4) ExtInst 1(GLSL.std.450) 6(FSign) 103 + 105: 53(fvec4) Load 55(dvec4v) + 106: 53(fvec4) FAdd 105 104 + Store 55(dvec4v) 106 + 107: 39(float) Load 41(doublev) + 108: 39(float) ExtInst 1(GLSL.std.450) 8(Floor) 107 + 109: 39(float) Load 41(doublev) + 110: 39(float) FAdd 109 108 + Store 41(doublev) 110 + 111: 43(fvec2) Load 45(dvec2v) + 112: 43(fvec2) ExtInst 1(GLSL.std.450) 8(Floor) 111 + 113: 43(fvec2) Load 45(dvec2v) + 114: 43(fvec2) FAdd 113 112 + Store 45(dvec2v) 114 + 115: 48(fvec3) Load 50(dvec3v) + 116: 48(fvec3) ExtInst 1(GLSL.std.450) 8(Floor) 115 + 117: 48(fvec3) Load 50(dvec3v) + 118: 48(fvec3) FAdd 117 116 + Store 50(dvec3v) 118 + 119: 53(fvec4) Load 55(dvec4v) + 120: 53(fvec4) ExtInst 1(GLSL.std.450) 8(Floor) 119 + 121: 53(fvec4) Load 55(dvec4v) + 122: 53(fvec4) FAdd 121 120 + Store 55(dvec4v) 122 + 123: 39(float) Load 41(doublev) + 124: 39(float) ExtInst 1(GLSL.std.450) 3(Trunc) 123 + 125: 39(float) Load 41(doublev) + 126: 39(float) FAdd 125 124 + Store 41(doublev) 126 + 127: 43(fvec2) Load 45(dvec2v) + 128: 43(fvec2) ExtInst 1(GLSL.std.450) 3(Trunc) 127 + 129: 43(fvec2) Load 45(dvec2v) + 130: 43(fvec2) FAdd 129 128 + Store 45(dvec2v) 130 + 131: 48(fvec3) Load 50(dvec3v) + 132: 48(fvec3) ExtInst 1(GLSL.std.450) 3(Trunc) 131 + 133: 48(fvec3) Load 50(dvec3v) + 134: 48(fvec3) FAdd 133 132 + Store 50(dvec3v) 134 + 135: 53(fvec4) Load 55(dvec4v) + 136: 53(fvec4) ExtInst 1(GLSL.std.450) 3(Trunc) 135 + 137: 53(fvec4) Load 55(dvec4v) + 138: 53(fvec4) FAdd 137 136 + Store 55(dvec4v) 138 + 139: 39(float) Load 41(doublev) + 140: 39(float) ExtInst 1(GLSL.std.450) 1(Round) 139 + 141: 39(float) Load 41(doublev) + 142: 39(float) FAdd 141 140 + Store 41(doublev) 142 + 143: 43(fvec2) Load 45(dvec2v) + 144: 43(fvec2) ExtInst 1(GLSL.std.450) 1(Round) 143 + 145: 43(fvec2) Load 45(dvec2v) + 146: 43(fvec2) FAdd 145 144 + Store 45(dvec2v) 146 + 147: 48(fvec3) Load 50(dvec3v) + 148: 48(fvec3) ExtInst 1(GLSL.std.450) 1(Round) 147 + 149: 48(fvec3) Load 50(dvec3v) + 150: 48(fvec3) FAdd 149 148 + Store 50(dvec3v) 150 + 151: 53(fvec4) Load 55(dvec4v) + 152: 53(fvec4) ExtInst 1(GLSL.std.450) 1(Round) 151 + 153: 53(fvec4) Load 55(dvec4v) + 154: 53(fvec4) FAdd 153 152 + Store 55(dvec4v) 154 + 155: 39(float) Load 41(doublev) + 156: 39(float) ExtInst 1(GLSL.std.450) 2(RoundEven) 155 + 157: 39(float) Load 41(doublev) + 158: 39(float) FAdd 157 156 + Store 41(doublev) 158 + 159: 43(fvec2) Load 45(dvec2v) + 160: 43(fvec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 159 + 161: 43(fvec2) Load 45(dvec2v) + 162: 43(fvec2) FAdd 161 160 + Store 45(dvec2v) 162 + 163: 48(fvec3) Load 50(dvec3v) + 164: 48(fvec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 163 + 165: 48(fvec3) Load 50(dvec3v) + 166: 48(fvec3) FAdd 165 164 + Store 50(dvec3v) 166 + 167: 53(fvec4) Load 55(dvec4v) + 168: 53(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 167 + 169: 53(fvec4) Load 55(dvec4v) + 170: 53(fvec4) FAdd 169 168 + Store 55(dvec4v) 170 + 171: 39(float) Load 41(doublev) + 172: 39(float) ExtInst 1(GLSL.std.450) 9(Ceil) 171 + 173: 39(float) Load 41(doublev) + 174: 39(float) FAdd 173 172 + Store 41(doublev) 174 + 175: 43(fvec2) Load 45(dvec2v) + 176: 43(fvec2) ExtInst 1(GLSL.std.450) 9(Ceil) 175 + 177: 43(fvec2) Load 45(dvec2v) + 178: 43(fvec2) FAdd 177 176 + Store 45(dvec2v) 178 + 179: 48(fvec3) Load 50(dvec3v) + 180: 48(fvec3) ExtInst 1(GLSL.std.450) 9(Ceil) 179 + 181: 48(fvec3) Load 50(dvec3v) + 182: 48(fvec3) FAdd 181 180 + Store 50(dvec3v) 182 + 183: 53(fvec4) Load 55(dvec4v) + 184: 53(fvec4) ExtInst 1(GLSL.std.450) 9(Ceil) 183 + 185: 53(fvec4) Load 55(dvec4v) + 186: 53(fvec4) FAdd 185 184 + Store 55(dvec4v) 186 + 187: 39(float) Load 41(doublev) + 188: 39(float) ExtInst 1(GLSL.std.450) 10(Fract) 187 + 189: 39(float) Load 41(doublev) + 190: 39(float) FAdd 189 188 + Store 41(doublev) 190 + 191: 43(fvec2) Load 45(dvec2v) + 192: 43(fvec2) ExtInst 1(GLSL.std.450) 10(Fract) 191 + 193: 43(fvec2) Load 45(dvec2v) + 194: 43(fvec2) FAdd 193 192 + Store 45(dvec2v) 194 + 195: 48(fvec3) Load 50(dvec3v) + 196: 48(fvec3) ExtInst 1(GLSL.std.450) 10(Fract) 195 + 197: 48(fvec3) Load 50(dvec3v) + 198: 48(fvec3) FAdd 197 196 + Store 50(dvec3v) 198 + 199: 53(fvec4) Load 55(dvec4v) + 200: 53(fvec4) ExtInst 1(GLSL.std.450) 10(Fract) 199 + 201: 53(fvec4) Load 55(dvec4v) + 202: 53(fvec4) FAdd 201 200 + Store 55(dvec4v) 202 + 203: 39(float) Load 41(doublev) + 204: 39(float) Load 41(doublev) + 205: 39(float) FMod 203 204 + 206: 39(float) Load 41(doublev) + 207: 39(float) FAdd 206 205 + Store 41(doublev) 207 + 208: 43(fvec2) Load 45(dvec2v) + 209: 39(float) Load 41(doublev) + 210: 43(fvec2) CompositeConstruct 209 209 + 211: 43(fvec2) FMod 208 210 + 212: 43(fvec2) Load 45(dvec2v) + 213: 43(fvec2) FAdd 212 211 + Store 45(dvec2v) 213 + 214: 48(fvec3) Load 50(dvec3v) + 215: 39(float) Load 41(doublev) + 216: 48(fvec3) CompositeConstruct 215 215 215 + 217: 48(fvec3) FMod 214 216 + 218: 48(fvec3) Load 50(dvec3v) + 219: 48(fvec3) FAdd 218 217 + Store 50(dvec3v) 219 + 220: 53(fvec4) Load 55(dvec4v) + 221: 39(float) Load 41(doublev) + 222: 53(fvec4) CompositeConstruct 221 221 221 221 + 223: 53(fvec4) FMod 220 222 + 224: 53(fvec4) Load 55(dvec4v) + 225: 53(fvec4) FAdd 224 223 + Store 55(dvec4v) 225 + 226: 43(fvec2) Load 45(dvec2v) + 227: 43(fvec2) Load 45(dvec2v) + 228: 43(fvec2) FMod 226 227 + 229: 43(fvec2) Load 45(dvec2v) + 230: 43(fvec2) FAdd 229 228 + Store 45(dvec2v) 230 + 231: 48(fvec3) Load 50(dvec3v) + 232: 48(fvec3) Load 50(dvec3v) + 233: 48(fvec3) FMod 231 232 + 234: 48(fvec3) Load 50(dvec3v) + 235: 48(fvec3) FAdd 234 233 + Store 50(dvec3v) 235 + 236: 53(fvec4) Load 55(dvec4v) + 237: 53(fvec4) Load 55(dvec4v) + 238: 53(fvec4) FMod 236 237 + 239: 53(fvec4) Load 55(dvec4v) + 240: 53(fvec4) FAdd 239 238 + Store 55(dvec4v) 240 + 241: 39(float) Load 41(doublev) + 242: 39(float) ExtInst 1(GLSL.std.450) 35(Modf) 241 41(doublev) + 243: 39(float) Load 41(doublev) + 244: 39(float) FAdd 243 242 + Store 41(doublev) 244 + 245: 43(fvec2) Load 45(dvec2v) + 246: 43(fvec2) ExtInst 1(GLSL.std.450) 35(Modf) 245 45(dvec2v) + 247: 43(fvec2) Load 45(dvec2v) + 248: 43(fvec2) FAdd 247 246 + Store 45(dvec2v) 248 + 249: 48(fvec3) Load 50(dvec3v) + 250: 48(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 249 50(dvec3v) + 251: 48(fvec3) Load 50(dvec3v) + 252: 48(fvec3) FAdd 251 250 + Store 50(dvec3v) 252 + 253: 53(fvec4) Load 55(dvec4v) + 254: 53(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 253 55(dvec4v) + 255: 53(fvec4) Load 55(dvec4v) + 256: 53(fvec4) FAdd 255 254 + Store 55(dvec4v) 256 + 257: 39(float) Load 41(doublev) + 258: 39(float) Load 41(doublev) + 259: 39(float) ExtInst 1(GLSL.std.450) 37(FMin) 257 258 + 260: 39(float) Load 41(doublev) + 261: 39(float) FAdd 260 259 + Store 41(doublev) 261 + 262: 43(fvec2) Load 45(dvec2v) + 263: 39(float) Load 41(doublev) + 264: 43(fvec2) CompositeConstruct 263 263 + 265: 43(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 262 264 + 266: 43(fvec2) Load 45(dvec2v) + 267: 43(fvec2) FAdd 266 265 + Store 45(dvec2v) 267 + 268: 48(fvec3) Load 50(dvec3v) + 269: 39(float) Load 41(doublev) + 270: 48(fvec3) CompositeConstruct 269 269 269 + 271: 48(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 268 270 + 272: 48(fvec3) Load 50(dvec3v) + 273: 48(fvec3) FAdd 272 271 + Store 50(dvec3v) 273 + 274: 53(fvec4) Load 55(dvec4v) + 275: 39(float) Load 41(doublev) + 276: 53(fvec4) CompositeConstruct 275 275 275 275 + 277: 53(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 274 276 + 278: 53(fvec4) Load 55(dvec4v) + 279: 53(fvec4) FAdd 278 277 + Store 55(dvec4v) 279 + 280: 43(fvec2) Load 45(dvec2v) + 281: 43(fvec2) Load 45(dvec2v) + 282: 43(fvec2) ExtInst 1(GLSL.std.450) 37(FMin) 280 281 + 283: 43(fvec2) Load 45(dvec2v) + 284: 43(fvec2) FAdd 283 282 + Store 45(dvec2v) 284 + 285: 48(fvec3) Load 50(dvec3v) + 286: 48(fvec3) Load 50(dvec3v) + 287: 48(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 285 286 + 288: 48(fvec3) Load 50(dvec3v) + 289: 48(fvec3) FAdd 288 287 + Store 50(dvec3v) 289 + 290: 53(fvec4) Load 55(dvec4v) + 291: 53(fvec4) Load 55(dvec4v) + 292: 53(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 290 291 + 293: 53(fvec4) Load 55(dvec4v) + 294: 53(fvec4) FAdd 293 292 + Store 55(dvec4v) 294 + 295: 39(float) Load 41(doublev) + 296: 39(float) Load 41(doublev) + 297: 39(float) ExtInst 1(GLSL.std.450) 40(FMax) 295 296 + 298: 39(float) Load 41(doublev) + 299: 39(float) FAdd 298 297 + Store 41(doublev) 299 + 300: 43(fvec2) Load 45(dvec2v) + 301: 39(float) Load 41(doublev) + 302: 43(fvec2) CompositeConstruct 301 301 + 303: 43(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 300 302 + 304: 43(fvec2) Load 45(dvec2v) + 305: 43(fvec2) FAdd 304 303 + Store 45(dvec2v) 305 + 306: 48(fvec3) Load 50(dvec3v) + 307: 39(float) Load 41(doublev) + 308: 48(fvec3) CompositeConstruct 307 307 307 + 309: 48(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 306 308 + 310: 48(fvec3) Load 50(dvec3v) + 311: 48(fvec3) FAdd 310 309 + Store 50(dvec3v) 311 + 312: 53(fvec4) Load 55(dvec4v) + 313: 39(float) Load 41(doublev) + 314: 53(fvec4) CompositeConstruct 313 313 313 313 + 315: 53(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 312 314 + 316: 53(fvec4) Load 55(dvec4v) + 317: 53(fvec4) FAdd 316 315 + Store 55(dvec4v) 317 + 318: 43(fvec2) Load 45(dvec2v) + 319: 43(fvec2) Load 45(dvec2v) + 320: 43(fvec2) ExtInst 1(GLSL.std.450) 40(FMax) 318 319 + 321: 43(fvec2) Load 45(dvec2v) + 322: 43(fvec2) FAdd 321 320 + Store 45(dvec2v) 322 + 323: 48(fvec3) Load 50(dvec3v) + 324: 48(fvec3) Load 50(dvec3v) + 325: 48(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 323 324 + 326: 48(fvec3) Load 50(dvec3v) + 327: 48(fvec3) FAdd 326 325 + Store 50(dvec3v) 327 + 328: 53(fvec4) Load 55(dvec4v) + 329: 53(fvec4) Load 55(dvec4v) + 330: 53(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 328 329 + 331: 53(fvec4) Load 55(dvec4v) + 332: 53(fvec4) FAdd 331 330 + Store 55(dvec4v) 332 + 333: 39(float) Load 41(doublev) + 334: 39(float) Load 41(doublev) + 335: 39(float) Load 41(doublev) + 336: 39(float) ExtInst 1(GLSL.std.450) 43(FClamp) 333 334 335 + 337: 39(float) Load 41(doublev) + 338: 39(float) FAdd 337 336 + Store 41(doublev) 338 + 339: 43(fvec2) Load 45(dvec2v) + 340: 39(float) Load 41(doublev) + 341: 39(float) Load 41(doublev) + 342: 43(fvec2) CompositeConstruct 340 340 + 343: 43(fvec2) CompositeConstruct 341 341 + 344: 43(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 339 342 343 + 345: 43(fvec2) Load 45(dvec2v) + 346: 43(fvec2) FAdd 345 344 + Store 45(dvec2v) 346 + 347: 48(fvec3) Load 50(dvec3v) + 348: 39(float) Load 41(doublev) + 349: 39(float) Load 41(doublev) + 350: 48(fvec3) CompositeConstruct 348 348 348 + 351: 48(fvec3) CompositeConstruct 349 349 349 + 352: 48(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 347 350 351 + 353: 48(fvec3) Load 50(dvec3v) + 354: 48(fvec3) FAdd 353 352 + Store 50(dvec3v) 354 + 355: 53(fvec4) Load 55(dvec4v) + 356: 39(float) Load 41(doublev) + 357: 39(float) Load 41(doublev) + 358: 53(fvec4) CompositeConstruct 356 356 356 356 + 359: 53(fvec4) CompositeConstruct 357 357 357 357 + 360: 53(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 355 358 359 + 361: 53(fvec4) Load 55(dvec4v) + 362: 53(fvec4) FAdd 361 360 + Store 55(dvec4v) 362 + 363: 43(fvec2) Load 45(dvec2v) + 364: 43(fvec2) Load 45(dvec2v) + 365: 43(fvec2) Load 45(dvec2v) + 366: 43(fvec2) ExtInst 1(GLSL.std.450) 43(FClamp) 363 364 365 + 367: 43(fvec2) Load 45(dvec2v) + 368: 43(fvec2) FAdd 367 366 + Store 45(dvec2v) 368 + 369: 48(fvec3) Load 50(dvec3v) + 370: 48(fvec3) Load 50(dvec3v) + 371: 48(fvec3) Load 50(dvec3v) + 372: 48(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 369 370 371 + 373: 48(fvec3) Load 50(dvec3v) + 374: 48(fvec3) FAdd 373 372 + Store 50(dvec3v) 374 + 375: 53(fvec4) Load 55(dvec4v) + 376: 53(fvec4) Load 55(dvec4v) + 377: 53(fvec4) Load 55(dvec4v) + 378: 53(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 375 376 377 + 379: 53(fvec4) Load 55(dvec4v) + 380: 53(fvec4) FAdd 379 378 + Store 55(dvec4v) 380 + 381: 39(float) Load 41(doublev) + 382: 39(float) Load 41(doublev) + 383: 39(float) Load 41(doublev) + 384: 39(float) ExtInst 1(GLSL.std.450) 46(FMix) 381 382 383 + 385: 39(float) Load 41(doublev) + 386: 39(float) FAdd 385 384 + Store 41(doublev) 386 + 387: 43(fvec2) Load 45(dvec2v) + 388: 43(fvec2) Load 45(dvec2v) + 389: 39(float) Load 41(doublev) + 390: 43(fvec2) CompositeConstruct 389 389 + 391: 43(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 387 388 390 + 392: 43(fvec2) Load 45(dvec2v) + 393: 43(fvec2) FAdd 392 391 + Store 45(dvec2v) 393 + 394: 48(fvec3) Load 50(dvec3v) + 395: 48(fvec3) Load 50(dvec3v) + 396: 39(float) Load 41(doublev) + 397: 48(fvec3) CompositeConstruct 396 396 396 + 398: 48(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 394 395 397 + 399: 48(fvec3) Load 50(dvec3v) + 400: 48(fvec3) FAdd 399 398 + Store 50(dvec3v) 400 + 401: 53(fvec4) Load 55(dvec4v) + 402: 53(fvec4) Load 55(dvec4v) + 403: 39(float) Load 41(doublev) + 404: 53(fvec4) CompositeConstruct 403 403 403 403 + 405: 53(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 401 402 404 + 406: 53(fvec4) Load 55(dvec4v) + 407: 53(fvec4) FAdd 406 405 + Store 55(dvec4v) 407 + 408: 43(fvec2) Load 45(dvec2v) + 409: 43(fvec2) Load 45(dvec2v) + 410: 43(fvec2) Load 45(dvec2v) + 411: 43(fvec2) ExtInst 1(GLSL.std.450) 46(FMix) 408 409 410 + 412: 43(fvec2) Load 45(dvec2v) + 413: 43(fvec2) FAdd 412 411 + Store 45(dvec2v) 413 + 414: 48(fvec3) Load 50(dvec3v) + 415: 48(fvec3) Load 50(dvec3v) + 416: 48(fvec3) Load 50(dvec3v) + 417: 48(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 414 415 416 + 418: 48(fvec3) Load 50(dvec3v) + 419: 48(fvec3) FAdd 418 417 + Store 50(dvec3v) 419 + 420: 53(fvec4) Load 55(dvec4v) + 421: 53(fvec4) Load 55(dvec4v) + 422: 53(fvec4) Load 55(dvec4v) + 423: 53(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422 + 424: 53(fvec4) Load 55(dvec4v) + 425: 53(fvec4) FAdd 424 423 + Store 55(dvec4v) 425 + 426: 39(float) Load 41(doublev) + 427: 39(float) Load 41(doublev) + 431: 428(bool) Load 430(boolv) + 432: 39(float) Select 431 427 426 + 433: 39(float) Load 41(doublev) + 434: 39(float) FAdd 433 432 + Store 41(doublev) 434 + 435: 43(fvec2) Load 45(dvec2v) + 436: 43(fvec2) Load 45(dvec2v) + 440: 437(bvec2) Load 439(bvec2v) + 441: 43(fvec2) Select 440 436 435 + 442: 43(fvec2) Load 45(dvec2v) + 443: 43(fvec2) FAdd 442 441 + Store 45(dvec2v) 443 + 444: 48(fvec3) Load 50(dvec3v) + 445: 48(fvec3) Load 50(dvec3v) + 449: 446(bvec3) Load 448(bvec3v) + 450: 48(fvec3) Select 449 445 444 + 451: 48(fvec3) Load 50(dvec3v) + 452: 48(fvec3) FAdd 451 450 + Store 50(dvec3v) 452 + 453: 53(fvec4) Load 55(dvec4v) + 454: 53(fvec4) Load 55(dvec4v) + 458: 455(bvec4) Load 457(bvec4v) + 459: 53(fvec4) Select 458 454 453 + 460: 53(fvec4) Load 55(dvec4v) + 461: 53(fvec4) FAdd 460 459 + Store 55(dvec4v) 461 + 462: 39(float) Load 41(doublev) + 463: 39(float) Load 41(doublev) + 464: 39(float) ExtInst 1(GLSL.std.450) 48(Step) 462 463 + 465: 39(float) Load 41(doublev) + 466: 39(float) FAdd 465 464 + Store 41(doublev) 466 + 467: 43(fvec2) Load 45(dvec2v) + 468: 43(fvec2) Load 45(dvec2v) + 469: 43(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 467 468 + 470: 43(fvec2) Load 45(dvec2v) + 471: 43(fvec2) FAdd 470 469 + Store 45(dvec2v) 471 + 472: 48(fvec3) Load 50(dvec3v) + 473: 48(fvec3) Load 50(dvec3v) + 474: 48(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 472 473 + 475: 48(fvec3) Load 50(dvec3v) + 476: 48(fvec3) FAdd 475 474 + Store 50(dvec3v) 476 + 477: 53(fvec4) Load 55(dvec4v) + 478: 53(fvec4) Load 55(dvec4v) + 479: 53(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 477 478 + 480: 53(fvec4) Load 55(dvec4v) + 481: 53(fvec4) FAdd 480 479 + Store 55(dvec4v) 481 + 482: 39(float) Load 41(doublev) + 483: 43(fvec2) Load 45(dvec2v) + 484: 43(fvec2) CompositeConstruct 482 482 + 485: 43(fvec2) ExtInst 1(GLSL.std.450) 48(Step) 484 483 + 486: 43(fvec2) Load 45(dvec2v) + 487: 43(fvec2) FAdd 486 485 + Store 45(dvec2v) 487 + 488: 39(float) Load 41(doublev) + 489: 48(fvec3) Load 50(dvec3v) + 490: 48(fvec3) CompositeConstruct 488 488 488 + 491: 48(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 490 489 + 492: 48(fvec3) Load 50(dvec3v) + 493: 48(fvec3) FAdd 492 491 + Store 50(dvec3v) 493 + 494: 39(float) Load 41(doublev) + 495: 53(fvec4) Load 55(dvec4v) + 496: 53(fvec4) CompositeConstruct 494 494 494 494 + 497: 53(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 496 495 + 498: 53(fvec4) Load 55(dvec4v) + 499: 53(fvec4) FAdd 498 497 + Store 55(dvec4v) 499 + 500: 39(float) Load 41(doublev) + 501: 39(float) Load 41(doublev) + 502: 39(float) Load 41(doublev) + 503: 39(float) ExtInst 1(GLSL.std.450) 49(SmoothStep) 500 501 502 + 504: 39(float) Load 41(doublev) + 505: 39(float) FAdd 504 503 + Store 41(doublev) 505 + 506: 43(fvec2) Load 45(dvec2v) + 507: 43(fvec2) Load 45(dvec2v) + 508: 43(fvec2) Load 45(dvec2v) + 509: 43(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 506 507 508 + 510: 43(fvec2) Load 45(dvec2v) + 511: 43(fvec2) FAdd 510 509 + Store 45(dvec2v) 511 + 512: 48(fvec3) Load 50(dvec3v) + 513: 48(fvec3) Load 50(dvec3v) + 514: 48(fvec3) Load 50(dvec3v) + 515: 48(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514 + 516: 48(fvec3) Load 50(dvec3v) + 517: 48(fvec3) FAdd 516 515 + Store 50(dvec3v) 517 + 518: 53(fvec4) Load 55(dvec4v) + 519: 53(fvec4) Load 55(dvec4v) + 520: 53(fvec4) Load 55(dvec4v) + 521: 53(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520 + 522: 53(fvec4) Load 55(dvec4v) + 523: 53(fvec4) FAdd 522 521 + Store 55(dvec4v) 523 + 524: 39(float) Load 41(doublev) + 525: 39(float) Load 41(doublev) + 526: 43(fvec2) Load 45(dvec2v) + 527: 43(fvec2) CompositeConstruct 524 524 + 528: 43(fvec2) CompositeConstruct 525 525 + 529: 43(fvec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 527 528 526 + 530: 43(fvec2) Load 45(dvec2v) + 531: 43(fvec2) FAdd 530 529 + Store 45(dvec2v) 531 + 532: 39(float) Load 41(doublev) + 533: 39(float) Load 41(doublev) + 534: 48(fvec3) Load 50(dvec3v) + 535: 48(fvec3) CompositeConstruct 532 532 532 + 536: 48(fvec3) CompositeConstruct 533 533 533 + 537: 48(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 535 536 534 + 538: 48(fvec3) Load 50(dvec3v) + 539: 48(fvec3) FAdd 538 537 + Store 50(dvec3v) 539 + 540: 39(float) Load 41(doublev) + 541: 39(float) Load 41(doublev) + 542: 53(fvec4) Load 55(dvec4v) + 543: 53(fvec4) CompositeConstruct 540 540 540 540 + 544: 53(fvec4) CompositeConstruct 541 541 541 541 + 545: 53(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 543 544 542 + 546: 53(fvec4) Load 55(dvec4v) + 547: 53(fvec4) FAdd 546 545 + Store 55(dvec4v) 547 + 548: 39(float) Load 41(doublev) + 549: 428(bool) IsNan 548 + Store 430(boolv) 549 + 550: 43(fvec2) Load 45(dvec2v) + 551: 437(bvec2) IsNan 550 + Store 439(bvec2v) 551 + 552: 48(fvec3) Load 50(dvec3v) + 553: 446(bvec3) IsNan 552 + Store 448(bvec3v) 553 + 554: 53(fvec4) Load 55(dvec4v) + 555: 455(bvec4) IsNan 554 + Store 457(bvec4v) 555 + 557: 428(bool) Load 430(boolv) + SelectionMerge 559 None + BranchConditional 557 558 562 + 558: Label + 560: 39(float) Load 41(doublev) + 561: 428(bool) IsInf 560 + Store 556 561 + Branch 559 + 562: Label + Store 556 563 + Branch 559 + 559: Label + 564: 428(bool) Load 556 + Store 430(boolv) 564 + 566: 428(bool) Load 430(boolv) + SelectionMerge 568 None + BranchConditional 566 567 571 + 567: Label + 569: 43(fvec2) Load 45(dvec2v) + 570: 437(bvec2) IsInf 569 + Store 565 570 + Branch 568 + 571: Label + Store 565 572 + Branch 568 + 568: Label + 573: 437(bvec2) Load 565 + Store 439(bvec2v) 573 + 575: 428(bool) Load 430(boolv) + SelectionMerge 577 None + BranchConditional 575 576 580 + 576: Label + 578: 48(fvec3) Load 50(dvec3v) + 579: 446(bvec3) IsInf 578 + Store 574 579 + Branch 577 + 580: Label + Store 574 581 + Branch 577 + 577: Label + 582: 446(bvec3) Load 574 + Store 448(bvec3v) 582 + 584: 428(bool) Load 430(boolv) + SelectionMerge 586 None + BranchConditional 584 585 589 + 585: Label + 587: 53(fvec4) Load 55(dvec4v) + 588: 455(bvec4) IsInf 587 + Store 583 588 + Branch 586 + 589: Label + Store 583 590 + Branch 586 + 586: Label + 591: 455(bvec4) Load 583 + Store 457(bvec4v) 591 + 592: 39(float) Load 41(doublev) + 593: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 592 + 594: 39(float) Load 41(doublev) + 595: 39(float) FAdd 594 593 + Store 41(doublev) 595 + 596: 43(fvec2) Load 45(dvec2v) + 597: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 596 + 598: 39(float) Load 41(doublev) + 599: 39(float) FAdd 598 597 + Store 41(doublev) 599 + 600: 48(fvec3) Load 50(dvec3v) + 601: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 600 + 602: 39(float) Load 41(doublev) + 603: 39(float) FAdd 602 601 + Store 41(doublev) 603 + 604: 53(fvec4) Load 55(dvec4v) + 605: 39(float) ExtInst 1(GLSL.std.450) 66(Length) 604 + 606: 39(float) Load 41(doublev) + 607: 39(float) FAdd 606 605 + Store 41(doublev) 607 + 608: 39(float) Load 41(doublev) + 609: 39(float) Load 41(doublev) + 610: 39(float) ExtInst 1(GLSL.std.450) 67(Distance) 608 609 + 611: 39(float) Load 41(doublev) + 612: 39(float) FAdd 611 610 + Store 41(doublev) 612 + 613: 43(fvec2) Load 45(dvec2v) + 614: 43(fvec2) Load 45(dvec2v) + 615: 39(float) ExtInst 1(GLSL.std.450) 67(Distance) 613 614 + 616: 39(float) Load 41(doublev) + 617: 39(float) FAdd 616 615 + Store 41(doublev) 617 + 618: 48(fvec3) Load 50(dvec3v) + 619: 48(fvec3) Load 50(dvec3v) + 620: 39(float) ExtInst 1(GLSL.std.450) 67(Distance) 618 619 + 621: 39(float) Load 41(doublev) + 622: 39(float) FAdd 621 620 + Store 41(doublev) 622 + 623: 53(fvec4) Load 55(dvec4v) + 624: 53(fvec4) Load 55(dvec4v) + 625: 39(float) ExtInst 1(GLSL.std.450) 67(Distance) 623 624 + 626: 39(float) Load 41(doublev) + 627: 39(float) FAdd 626 625 + Store 41(doublev) 627 + 628: 39(float) Load 41(doublev) + 629: 39(float) Load 41(doublev) + 630: 39(float) FMul 628 629 + 631: 39(float) Load 41(doublev) + 632: 39(float) FAdd 631 630 + Store 41(doublev) 632 + 633: 43(fvec2) Load 45(dvec2v) + 634: 43(fvec2) Load 45(dvec2v) + 635: 39(float) Dot 633 634 + 636: 39(float) Load 41(doublev) + 637: 39(float) FAdd 636 635 + Store 41(doublev) 637 + 638: 48(fvec3) Load 50(dvec3v) + 639: 48(fvec3) Load 50(dvec3v) + 640: 39(float) Dot 638 639 + 641: 39(float) Load 41(doublev) + 642: 39(float) FAdd 641 640 + Store 41(doublev) 642 + 643: 53(fvec4) Load 55(dvec4v) + 644: 53(fvec4) Load 55(dvec4v) + 645: 39(float) Dot 643 644 + 646: 39(float) Load 41(doublev) + 647: 39(float) FAdd 646 645 + Store 41(doublev) 647 + 648: 48(fvec3) Load 50(dvec3v) + 649: 48(fvec3) Load 50(dvec3v) + 650: 48(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 648 649 + 651: 48(fvec3) Load 50(dvec3v) + 652: 48(fvec3) FAdd 651 650 + Store 50(dvec3v) 652 + 653: 39(float) Load 41(doublev) + 654: 39(float) ExtInst 1(GLSL.std.450) 69(Normalize) 653 + 655: 39(float) Load 41(doublev) + 656: 39(float) FAdd 655 654 + Store 41(doublev) 656 + 657: 43(fvec2) Load 45(dvec2v) + 658: 43(fvec2) ExtInst 1(GLSL.std.450) 69(Normalize) 657 + 659: 43(fvec2) Load 45(dvec2v) + 660: 43(fvec2) FAdd 659 658 + Store 45(dvec2v) 660 + 661: 48(fvec3) Load 50(dvec3v) + 662: 48(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 661 + 663: 48(fvec3) Load 50(dvec3v) + 664: 48(fvec3) FAdd 663 662 + Store 50(dvec3v) 664 + 665: 53(fvec4) Load 55(dvec4v) + 666: 53(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 665 + 667: 53(fvec4) Load 55(dvec4v) + 668: 53(fvec4) FAdd 667 666 + Store 55(dvec4v) 668 + 669: 39(float) Load 41(doublev) + 670: 39(float) Load 41(doublev) + 671: 39(float) Load 41(doublev) + 672: 39(float) ExtInst 1(GLSL.std.450) 70(FaceForward) 669 670 671 + 673: 39(float) Load 41(doublev) + 674: 39(float) FAdd 673 672 + Store 41(doublev) 674 + 675: 43(fvec2) Load 45(dvec2v) + 676: 43(fvec2) Load 45(dvec2v) + 677: 43(fvec2) Load 45(dvec2v) + 678: 43(fvec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677 + 679: 43(fvec2) Load 45(dvec2v) + 680: 43(fvec2) FAdd 679 678 + Store 45(dvec2v) 680 + 681: 48(fvec3) Load 50(dvec3v) + 682: 48(fvec3) Load 50(dvec3v) + 683: 48(fvec3) Load 50(dvec3v) + 684: 48(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683 + 685: 48(fvec3) Load 50(dvec3v) + 686: 48(fvec3) FAdd 685 684 + Store 50(dvec3v) 686 + 687: 53(fvec4) Load 55(dvec4v) + 688: 53(fvec4) Load 55(dvec4v) + 689: 53(fvec4) Load 55(dvec4v) + 690: 53(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689 + 691: 53(fvec4) Load 55(dvec4v) + 692: 53(fvec4) FAdd 691 690 + Store 55(dvec4v) 692 + 693: 39(float) Load 41(doublev) + 694: 39(float) Load 41(doublev) + 695: 39(float) ExtInst 1(GLSL.std.450) 71(Reflect) 693 694 + 696: 39(float) Load 41(doublev) + 697: 39(float) FAdd 696 695 + Store 41(doublev) 697 + 698: 43(fvec2) Load 45(dvec2v) + 699: 43(fvec2) Load 45(dvec2v) + 700: 43(fvec2) ExtInst 1(GLSL.std.450) 71(Reflect) 698 699 + 701: 43(fvec2) Load 45(dvec2v) + 702: 43(fvec2) FAdd 701 700 + Store 45(dvec2v) 702 + 703: 48(fvec3) Load 50(dvec3v) + 704: 48(fvec3) Load 50(dvec3v) + 705: 48(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 703 704 + 706: 48(fvec3) Load 50(dvec3v) + 707: 48(fvec3) FAdd 706 705 + Store 50(dvec3v) 707 + 708: 53(fvec4) Load 55(dvec4v) + 709: 53(fvec4) Load 55(dvec4v) + 710: 53(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 708 709 + 711: 53(fvec4) Load 55(dvec4v) + 712: 53(fvec4) FAdd 711 710 + Store 55(dvec4v) 712 + 713: 39(float) Load 41(doublev) + 714: 39(float) Load 41(doublev) + 715: 39(float) Load 41(doublev) + 716: 39(float) ExtInst 1(GLSL.std.450) 72(Refract) 713 714 715 + 717: 39(float) Load 41(doublev) + 718: 39(float) FAdd 717 716 + Store 41(doublev) 718 + 719: 43(fvec2) Load 45(dvec2v) + 720: 43(fvec2) Load 45(dvec2v) + 721: 39(float) Load 41(doublev) + 722: 43(fvec2) ExtInst 1(GLSL.std.450) 72(Refract) 719 720 721 + 723: 43(fvec2) Load 45(dvec2v) + 724: 43(fvec2) FAdd 723 722 + Store 45(dvec2v) 724 + 725: 48(fvec3) Load 50(dvec3v) + 726: 48(fvec3) Load 50(dvec3v) + 727: 39(float) Load 41(doublev) + 728: 48(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727 + 729: 48(fvec3) Load 50(dvec3v) + 730: 48(fvec3) FAdd 729 728 + Store 50(dvec3v) 730 + 731: 53(fvec4) Load 55(dvec4v) + 732: 53(fvec4) Load 55(dvec4v) + 733: 39(float) Load 41(doublev) + 734: 53(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733 + 735: 53(fvec4) Load 55(dvec4v) + 736: 53(fvec4) FAdd 735 734 + Store 55(dvec4v) 736 + 740: 43(fvec2) Load 45(dvec2v) + 741: 43(fvec2) Load 45(dvec2v) + 742: 737 OuterProduct 740 741 + Store 739(dmat2v) 742 + 746: 48(fvec3) Load 50(dvec3v) + 747: 48(fvec3) Load 50(dvec3v) + 748: 743 OuterProduct 746 747 + Store 745(dmat3v) 748 + 752: 53(fvec4) Load 55(dvec4v) + 753: 53(fvec4) Load 55(dvec4v) + 754: 749 OuterProduct 752 753 + Store 751(dmat4v) 754 + 758: 48(fvec3) Load 50(dvec3v) + 759: 43(fvec2) Load 45(dvec2v) + 760: 755 OuterProduct 758 759 + Store 757(dmat2x3v) 760 + 764: 43(fvec2) Load 45(dvec2v) + 765: 48(fvec3) Load 50(dvec3v) + 766: 761 OuterProduct 764 765 + Store 763(dmat3x2v) 766 + 770: 53(fvec4) Load 55(dvec4v) + 771: 43(fvec2) Load 45(dvec2v) + 772: 767 OuterProduct 770 771 + Store 769(dmat2x4v) 772 + 776: 43(fvec2) Load 45(dvec2v) + 777: 53(fvec4) Load 55(dvec4v) + 778: 773 OuterProduct 776 777 + Store 775(dmat4x2v) 778 + 782: 53(fvec4) Load 55(dvec4v) + 783: 48(fvec3) Load 50(dvec3v) + 784: 779 OuterProduct 782 783 + Store 781(dmat3x4v) 784 + 788: 48(fvec3) Load 50(dvec3v) + 789: 53(fvec4) Load 55(dvec4v) + 790: 785 OuterProduct 788 789 + Store 787(dmat4x3v) 790 + 791: 737 Load 739(dmat2v) + 792: 737 Load 739(dmat2v) + 793: 43(fvec2) CompositeExtract 791 0 + 794: 43(fvec2) CompositeExtract 792 0 + 795: 43(fvec2) FMul 793 794 + 796: 43(fvec2) CompositeExtract 791 1 + 797: 43(fvec2) CompositeExtract 792 1 + 798: 43(fvec2) FMul 796 797 + 799: 737 CompositeConstruct 795 798 + 800: 737 Load 739(dmat2v) + 801: 737 MatrixTimesMatrix 800 799 + Store 739(dmat2v) 801 + 802: 743 Load 745(dmat3v) + 803: 743 Load 745(dmat3v) + 804: 48(fvec3) CompositeExtract 802 0 + 805: 48(fvec3) CompositeExtract 803 0 + 806: 48(fvec3) FMul 804 805 + 807: 48(fvec3) CompositeExtract 802 1 + 808: 48(fvec3) CompositeExtract 803 1 + 809: 48(fvec3) FMul 807 808 + 810: 48(fvec3) CompositeExtract 802 2 + 811: 48(fvec3) CompositeExtract 803 2 + 812: 48(fvec3) FMul 810 811 + 813: 743 CompositeConstruct 806 809 812 + 814: 743 Load 745(dmat3v) + 815: 743 MatrixTimesMatrix 814 813 + Store 745(dmat3v) 815 + 816: 749 Load 751(dmat4v) + 817: 749 Load 751(dmat4v) + 818: 53(fvec4) CompositeExtract 816 0 + 819: 53(fvec4) CompositeExtract 817 0 + 820: 53(fvec4) FMul 818 819 + 821: 53(fvec4) CompositeExtract 816 1 + 822: 53(fvec4) CompositeExtract 817 1 + 823: 53(fvec4) FMul 821 822 + 824: 53(fvec4) CompositeExtract 816 2 + 825: 53(fvec4) CompositeExtract 817 2 + 826: 53(fvec4) FMul 824 825 + 827: 53(fvec4) CompositeExtract 816 3 + 828: 53(fvec4) CompositeExtract 817 3 + 829: 53(fvec4) FMul 827 828 + 830: 749 CompositeConstruct 820 823 826 829 + 831: 749 Load 751(dmat4v) + 832: 749 MatrixTimesMatrix 831 830 + Store 751(dmat4v) 832 + 833: 755 Load 757(dmat2x3v) + 834: 755 Load 757(dmat2x3v) + 835: 48(fvec3) CompositeExtract 833 0 + 836: 48(fvec3) CompositeExtract 834 0 + 837: 48(fvec3) FMul 835 836 + 838: 48(fvec3) CompositeExtract 833 1 + 839: 48(fvec3) CompositeExtract 834 1 + 840: 48(fvec3) FMul 838 839 + 841: 755 CompositeConstruct 837 840 + Store 757(dmat2x3v) 841 + 842: 767 Load 769(dmat2x4v) + 843: 767 Load 769(dmat2x4v) + 844: 53(fvec4) CompositeExtract 842 0 + 845: 53(fvec4) CompositeExtract 843 0 + 846: 53(fvec4) FMul 844 845 + 847: 53(fvec4) CompositeExtract 842 1 + 848: 53(fvec4) CompositeExtract 843 1 + 849: 53(fvec4) FMul 847 848 + 850: 767 CompositeConstruct 846 849 + Store 769(dmat2x4v) 850 + 851: 761 Load 763(dmat3x2v) + 852: 761 Load 763(dmat3x2v) + 853: 43(fvec2) CompositeExtract 851 0 + 854: 43(fvec2) CompositeExtract 852 0 + 855: 43(fvec2) FMul 853 854 + 856: 43(fvec2) CompositeExtract 851 1 + 857: 43(fvec2) CompositeExtract 852 1 + 858: 43(fvec2) FMul 856 857 + 859: 43(fvec2) CompositeExtract 851 2 + 860: 43(fvec2) CompositeExtract 852 2 + 861: 43(fvec2) FMul 859 860 + 862: 761 CompositeConstruct 855 858 861 + Store 763(dmat3x2v) 862 + 863: 779 Load 781(dmat3x4v) + 864: 779 Load 781(dmat3x4v) + 865: 53(fvec4) CompositeExtract 863 0 + 866: 53(fvec4) CompositeExtract 864 0 + 867: 53(fvec4) FMul 865 866 + 868: 53(fvec4) CompositeExtract 863 1 + 869: 53(fvec4) CompositeExtract 864 1 + 870: 53(fvec4) FMul 868 869 + 871: 53(fvec4) CompositeExtract 863 2 + 872: 53(fvec4) CompositeExtract 864 2 + 873: 53(fvec4) FMul 871 872 + 874: 779 CompositeConstruct 867 870 873 + Store 781(dmat3x4v) 874 + 875: 773 Load 775(dmat4x2v) + 876: 773 Load 775(dmat4x2v) + 877: 43(fvec2) CompositeExtract 875 0 + 878: 43(fvec2) CompositeExtract 876 0 + 879: 43(fvec2) FMul 877 878 + 880: 43(fvec2) CompositeExtract 875 1 + 881: 43(fvec2) CompositeExtract 876 1 + 882: 43(fvec2) FMul 880 881 + 883: 43(fvec2) CompositeExtract 875 2 + 884: 43(fvec2) CompositeExtract 876 2 + 885: 43(fvec2) FMul 883 884 + 886: 43(fvec2) CompositeExtract 875 3 + 887: 43(fvec2) CompositeExtract 876 3 + 888: 43(fvec2) FMul 886 887 + 889: 773 CompositeConstruct 879 882 885 888 + Store 775(dmat4x2v) 889 + 890: 785 Load 787(dmat4x3v) + 891: 785 Load 787(dmat4x3v) + 892: 48(fvec3) CompositeExtract 890 0 + 893: 48(fvec3) CompositeExtract 891 0 + 894: 48(fvec3) FMul 892 893 + 895: 48(fvec3) CompositeExtract 890 1 + 896: 48(fvec3) CompositeExtract 891 1 + 897: 48(fvec3) FMul 895 896 + 898: 48(fvec3) CompositeExtract 890 2 + 899: 48(fvec3) CompositeExtract 891 2 + 900: 48(fvec3) FMul 898 899 + 901: 48(fvec3) CompositeExtract 890 3 + 902: 48(fvec3) CompositeExtract 891 3 + 903: 48(fvec3) FMul 901 902 + 904: 785 CompositeConstruct 894 897 900 903 + Store 787(dmat4x3v) 904 + 905: 737 Load 739(dmat2v) + 906: 737 Transpose 905 + 907: 737 Load 739(dmat2v) + 908: 737 MatrixTimesMatrix 907 906 + Store 739(dmat2v) 908 + 909: 743 Load 745(dmat3v) + 910: 743 Transpose 909 + 911: 743 Load 745(dmat3v) + 912: 743 MatrixTimesMatrix 911 910 + Store 745(dmat3v) 912 + 913: 749 Load 751(dmat4v) + 914: 749 Transpose 913 + 915: 749 Load 751(dmat4v) + 916: 749 MatrixTimesMatrix 915 914 + Store 751(dmat4v) 916 + 917: 761 Load 763(dmat3x2v) + 918: 755 Transpose 917 + Store 757(dmat2x3v) 918 + 919: 755 Load 757(dmat2x3v) + 920: 761 Transpose 919 + Store 763(dmat3x2v) 920 + 921: 773 Load 775(dmat4x2v) + 922: 767 Transpose 921 + Store 769(dmat2x4v) 922 + 923: 767 Load 769(dmat2x4v) + 924: 773 Transpose 923 + Store 775(dmat4x2v) 924 + 925: 785 Load 787(dmat4x3v) + 926: 779 Transpose 925 + Store 781(dmat3x4v) 926 + 927: 779 Load 781(dmat3x4v) + 928: 785 Transpose 927 + Store 787(dmat4x3v) 928 + 929: 737 Load 739(dmat2v) + 930: 39(float) ExtInst 1(GLSL.std.450) 33(Determinant) 929 + 931: 39(float) Load 41(doublev) + 932: 39(float) FAdd 931 930 + Store 41(doublev) 932 + 933: 743 Load 745(dmat3v) + 934: 39(float) ExtInst 1(GLSL.std.450) 33(Determinant) 933 + 935: 39(float) Load 41(doublev) + 936: 39(float) FAdd 935 934 + Store 41(doublev) 936 + 937: 749 Load 751(dmat4v) + 938: 39(float) ExtInst 1(GLSL.std.450) 33(Determinant) 937 + 939: 39(float) Load 41(doublev) + 940: 39(float) FAdd 939 938 + Store 41(doublev) 940 + 941: 737 Load 739(dmat2v) + 942: 737 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 941 + 943: 737 Load 739(dmat2v) + 944: 737 MatrixTimesMatrix 943 942 + Store 739(dmat2v) 944 + 945: 743 Load 745(dmat3v) + 946: 743 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 945 + 947: 743 Load 745(dmat3v) + 948: 743 MatrixTimesMatrix 947 946 + Store 745(dmat3v) 948 + 949: 749 Load 751(dmat4v) + 950: 749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 949 + 951: 749 Load 751(dmat4v) + 952: 749 MatrixTimesMatrix 951 950 + Store 751(dmat4v) 952 + 953: 39(float) Load 41(doublev) + 955: 40(ptr) AccessChain 45(dvec2v) 954 + 956: 39(float) Load 955 + 957: 39(float) FAdd 953 956 + 959: 40(ptr) AccessChain 50(dvec3v) 958 + 960: 39(float) Load 959 + 961: 39(float) FAdd 957 960 + 963: 40(ptr) AccessChain 55(dvec4v) 962 + 964: 39(float) Load 963 + 965: 39(float) FAdd 961 964 + 967: 40(ptr) AccessChain 739(dmat2v) 966 954 + 968: 39(float) Load 967 + 969: 39(float) FAdd 965 968 + 971: 40(ptr) AccessChain 745(dmat3v) 970 958 + 972: 39(float) Load 971 + 973: 39(float) FAdd 969 972 + 974: 40(ptr) AccessChain 751(dmat4v) 25 962 + 975: 39(float) Load 974 + 976: 39(float) FAdd 973 975 + 977: 40(ptr) AccessChain 757(dmat2x3v) 966 954 + 978: 39(float) Load 977 + 979: 39(float) FAdd 976 978 + 980: 40(ptr) AccessChain 763(dmat3x2v) 966 954 + 981: 39(float) Load 980 + 982: 39(float) FAdd 979 981 + 983: 40(ptr) AccessChain 781(dmat3x4v) 970 958 + 984: 39(float) Load 983 + 985: 39(float) FAdd 982 984 + 986: 40(ptr) AccessChain 787(dmat4x3v) 970 958 + 987: 39(float) Load 986 + 988: 39(float) FAdd 985 987 + 989: 40(ptr) AccessChain 769(dmat2x4v) 966 954 + 990: 39(float) Load 989 + 991: 39(float) FAdd 988 990 + 992: 40(ptr) AccessChain 775(dmat4x2v) 966 954 + 993: 39(float) Load 992 + 994: 39(float) FAdd 991 993 + 995: 428(bool) Load 430(boolv) + 997: 10(float) Select 995 996 21 + 998: 39(float) FConvert 997 + 999: 39(float) FAdd 994 998 + 1000: 437(bvec2) Load 439(bvec2v) + 1001: 428(bool) CompositeExtract 1000 0 + 1002: 10(float) Select 1001 996 21 + 1003: 39(float) FConvert 1002 + 1004: 39(float) FAdd 999 1003 + 1005: 446(bvec3) Load 448(bvec3v) + 1006: 428(bool) CompositeExtract 1005 0 + 1007: 10(float) Select 1006 996 21 + 1008: 39(float) FConvert 1007 + 1009: 39(float) FAdd 1004 1008 + 1010: 455(bvec4) Load 457(bvec4v) + 1011: 428(bool) CompositeExtract 1010 0 + 1012: 10(float) Select 1011 996 21 + 1013: 39(float) FConvert 1012 + 1014: 39(float) FAdd 1009 1013 + 1015: 10(float) FConvert 1014 + 1016: 11(fvec4) Load 13(outp) + 1017: 11(fvec4) VectorTimesScalar 1016 1015 + Store 13(outp) 1017 Return FunctionEnd diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out index 290a19cd..bcfd963e 100755 --- a/Test/baseResults/spv.400.tesc.out +++ b/Test/baseResults/spv.400.tesc.out @@ -7,173 +7,171 @@ Linked tessellation control stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 94 +// Id's are bound by 93 Capability Tessellation Capability TessellationPointSize Capability ClipDistance 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint TessellationControl 4 "main" 24 41 44 47 55 69 74 80 84 85 88 89 92 93 + EntryPoint TessellationControl 4 "main" 23 40 43 46 54 68 73 79 83 84 87 88 91 92 ExecutionMode 4 OutputVertices 4 Source GLSL 400 SourceExtension "GL_ARB_separate_shader_objects" Name 4 "main" - Name 12 "a" - Name 17 "p" - Name 20 "gl_PerVertex" - MemberName 20(gl_PerVertex) 0 "gl_Position" - MemberName 20(gl_PerVertex) 1 "gl_PointSize" - MemberName 20(gl_PerVertex) 2 "gl_ClipDistance" - Name 24 "gl_in" - Name 31 "ps" - Name 35 "cd" - Name 39 "pvi" - Name 41 "gl_PatchVerticesIn" - Name 43 "pid" - Name 44 "gl_PrimitiveID" - Name 46 "iid" - Name 47 "gl_InvocationID" - Name 51 "gl_PerVertex" - MemberName 51(gl_PerVertex) 0 "gl_Position" - MemberName 51(gl_PerVertex) 1 "gl_PointSize" - MemberName 51(gl_PerVertex) 2 "gl_ClipDistance" - Name 55 "gl_out" - Name 69 "gl_TessLevelOuter" - Name 74 "gl_TessLevelInner" - Name 79 "outa" - Name 80 "patchOut" - Name 84 "inb" - Name 85 "ind" - Name 88 "ivla" - Name 89 "ivlb" - Name 92 "ovla" - Name 93 "ovlb" - MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position - MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize - MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 20(gl_PerVertex) Block - Decorate 41(gl_PatchVerticesIn) BuiltIn PatchVertices - Decorate 44(gl_PrimitiveID) BuiltIn PrimitiveId - Decorate 47(gl_InvocationID) BuiltIn InvocationId - MemberDecorate 51(gl_PerVertex) 0 BuiltIn Position - MemberDecorate 51(gl_PerVertex) 1 BuiltIn PointSize - MemberDecorate 51(gl_PerVertex) 2 BuiltIn ClipDistance - Decorate 51(gl_PerVertex) Block - Decorate 69(gl_TessLevelOuter) Patch - Decorate 69(gl_TessLevelOuter) BuiltIn TessLevelOuter - Decorate 74(gl_TessLevelInner) Patch - Decorate 74(gl_TessLevelInner) BuiltIn TessLevelInner - Decorate 80(patchOut) Patch - Decorate 88(ivla) Location 3 - Decorate 89(ivlb) Location 4 - Decorate 92(ovla) Location 3 - Decorate 93(ovlb) Location 4 + Name 11 "a" + Name 16 "p" + Name 19 "gl_PerVertex" + MemberName 19(gl_PerVertex) 0 "gl_Position" + MemberName 19(gl_PerVertex) 1 "gl_PointSize" + MemberName 19(gl_PerVertex) 2 "gl_ClipDistance" + Name 23 "gl_in" + Name 30 "ps" + Name 34 "cd" + Name 38 "pvi" + Name 40 "gl_PatchVerticesIn" + Name 42 "pid" + Name 43 "gl_PrimitiveID" + Name 45 "iid" + Name 46 "gl_InvocationID" + Name 50 "gl_PerVertex" + MemberName 50(gl_PerVertex) 0 "gl_Position" + MemberName 50(gl_PerVertex) 1 "gl_PointSize" + MemberName 50(gl_PerVertex) 2 "gl_ClipDistance" + Name 54 "gl_out" + Name 68 "gl_TessLevelOuter" + Name 73 "gl_TessLevelInner" + Name 78 "outa" + Name 79 "patchOut" + Name 83 "inb" + Name 84 "ind" + Name 87 "ivla" + Name 88 "ivlb" + Name 91 "ovla" + Name 92 "ovlb" + MemberDecorate 19(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 19(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 19(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 19(gl_PerVertex) Block + Decorate 40(gl_PatchVerticesIn) BuiltIn PatchVertices + Decorate 43(gl_PrimitiveID) BuiltIn PrimitiveId + Decorate 46(gl_InvocationID) BuiltIn InvocationId + MemberDecorate 50(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 50(gl_PerVertex) Block + Decorate 68(gl_TessLevelOuter) Patch + Decorate 68(gl_TessLevelOuter) BuiltIn TessLevelOuter + Decorate 73(gl_TessLevelInner) Patch + Decorate 73(gl_TessLevelInner) BuiltIn TessLevelInner + Decorate 79(patchOut) Patch + Decorate 87(ivla) Location 3 + Decorate 88(ivlb) Location 4 + Decorate 91(ovla) Location 3 + Decorate 92(ovlb) Location 4 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 7: 6(int) Constant 1 - 8: 6(int) Constant 4062 - 9: 6(int) Constant 0 - 10: TypeInt 32 1 - 11: TypePointer Function 10(int) - 13: 10(int) Constant 5392 - 14: TypeFloat 32 - 15: TypeVector 14(float) 4 - 16: TypePointer Function 15(fvec4) - 18: 6(int) Constant 3 - 19: TypeArray 14(float) 18 -20(gl_PerVertex): TypeStruct 15(fvec4) 14(float) 19 - 21: 6(int) Constant 32 - 22: TypeArray 20(gl_PerVertex) 21 - 23: TypePointer Input 22 - 24(gl_in): 23(ptr) Variable Input - 25: 10(int) Constant 1 - 26: 10(int) Constant 0 - 27: TypePointer Input 15(fvec4) - 30: TypePointer Function 14(float) - 32: TypePointer Input 14(float) - 36: 10(int) Constant 2 - 40: TypePointer Input 10(int) -41(gl_PatchVerticesIn): 40(ptr) Variable Input -44(gl_PrimitiveID): 40(ptr) Variable Input -47(gl_InvocationID): 40(ptr) Variable Input - 49: 6(int) Constant 2 - 50: TypeArray 14(float) 49 -51(gl_PerVertex): TypeStruct 15(fvec4) 14(float) 50 - 52: 6(int) Constant 4 - 53: TypeArray 51(gl_PerVertex) 52 - 54: TypePointer Output 53 - 55(gl_out): 54(ptr) Variable Output - 58: TypePointer Output 15(fvec4) - 62: TypePointer Output 14(float) - 67: TypeArray 14(float) 52 - 68: TypePointer Output 67 -69(gl_TessLevelOuter): 68(ptr) Variable Output - 70: 10(int) Constant 3 - 71: 14(float) Constant 1078774989 - 73: TypePointer Output 50 -74(gl_TessLevelInner): 73(ptr) Variable Output - 75: 14(float) Constant 1067869798 - 77: TypeArray 10(int) 52 - 78: TypePointer Private 77 - 79(outa): 78(ptr) Variable Private - 80(patchOut): 58(ptr) Variable Output - 81: TypeVector 14(float) 2 - 82: TypeArray 81(fvec2) 21 - 83: TypePointer Input 82 - 84(inb): 83(ptr) Variable Input - 85(ind): 83(ptr) Variable Input - 86: TypeArray 15(fvec4) 21 - 87: TypePointer Input 86 - 88(ivla): 87(ptr) Variable Input - 89(ivlb): 87(ptr) Variable Input - 90: TypeArray 15(fvec4) 52 - 91: TypePointer Output 90 - 92(ovla): 91(ptr) Variable Output - 93(ovlb): 91(ptr) Variable Output + 8: 6(int) Constant 0 + 9: TypeInt 32 1 + 10: TypePointer Function 9(int) + 12: 9(int) Constant 5392 + 13: TypeFloat 32 + 14: TypeVector 13(float) 4 + 15: TypePointer Function 14(fvec4) + 17: 6(int) Constant 3 + 18: TypeArray 13(float) 17 +19(gl_PerVertex): TypeStruct 14(fvec4) 13(float) 18 + 20: 6(int) Constant 32 + 21: TypeArray 19(gl_PerVertex) 20 + 22: TypePointer Input 21 + 23(gl_in): 22(ptr) Variable Input + 24: 9(int) Constant 1 + 25: 9(int) Constant 0 + 26: TypePointer Input 14(fvec4) + 29: TypePointer Function 13(float) + 31: TypePointer Input 13(float) + 35: 9(int) Constant 2 + 39: TypePointer Input 9(int) +40(gl_PatchVerticesIn): 39(ptr) Variable Input +43(gl_PrimitiveID): 39(ptr) Variable Input +46(gl_InvocationID): 39(ptr) Variable Input + 48: 6(int) Constant 2 + 49: TypeArray 13(float) 48 +50(gl_PerVertex): TypeStruct 14(fvec4) 13(float) 49 + 51: 6(int) Constant 4 + 52: TypeArray 50(gl_PerVertex) 51 + 53: TypePointer Output 52 + 54(gl_out): 53(ptr) Variable Output + 57: TypePointer Output 14(fvec4) + 61: TypePointer Output 13(float) + 66: TypeArray 13(float) 51 + 67: TypePointer Output 66 +68(gl_TessLevelOuter): 67(ptr) Variable Output + 69: 9(int) Constant 3 + 70: 13(float) Constant 1078774989 + 72: TypePointer Output 49 +73(gl_TessLevelInner): 72(ptr) Variable Output + 74: 13(float) Constant 1067869798 + 76: TypeArray 9(int) 51 + 77: TypePointer Private 76 + 78(outa): 77(ptr) Variable Private + 79(patchOut): 57(ptr) Variable Output + 80: TypeVector 13(float) 2 + 81: TypeArray 80(fvec2) 20 + 82: TypePointer Input 81 + 83(inb): 82(ptr) Variable Input + 84(ind): 82(ptr) Variable Input + 85: TypeArray 14(fvec4) 20 + 86: TypePointer Input 85 + 87(ivla): 86(ptr) Variable Input + 88(ivlb): 86(ptr) Variable Input + 89: TypeArray 14(fvec4) 51 + 90: TypePointer Output 89 + 91(ovla): 90(ptr) Variable Output + 92(ovlb): 90(ptr) Variable Output 4(main): 2 Function None 3 5: Label - 12(a): 11(ptr) Variable Function - 17(p): 16(ptr) Variable Function - 31(ps): 30(ptr) Variable Function - 35(cd): 30(ptr) Variable Function - 39(pvi): 11(ptr) Variable Function - 43(pid): 11(ptr) Variable Function - 46(iid): 11(ptr) Variable Function - MemoryBarrier 7 8 - ControlBarrier 7 7 9 - Store 12(a) 13 - 28: 27(ptr) AccessChain 24(gl_in) 25 26 - 29: 15(fvec4) Load 28 - Store 17(p) 29 - 33: 32(ptr) AccessChain 24(gl_in) 25 25 - 34: 14(float) Load 33 - Store 31(ps) 34 - 37: 32(ptr) AccessChain 24(gl_in) 25 36 36 - 38: 14(float) Load 37 - Store 35(cd) 38 - 42: 10(int) Load 41(gl_PatchVerticesIn) - Store 39(pvi) 42 - 45: 10(int) Load 44(gl_PrimitiveID) - Store 43(pid) 45 - 48: 10(int) Load 47(gl_InvocationID) - Store 46(iid) 48 - 56: 10(int) Load 47(gl_InvocationID) - 57: 15(fvec4) Load 17(p) - 59: 58(ptr) AccessChain 55(gl_out) 56 26 - Store 59 57 - 60: 10(int) Load 47(gl_InvocationID) - 61: 14(float) Load 31(ps) - 63: 62(ptr) AccessChain 55(gl_out) 60 25 - Store 63 61 - 64: 10(int) Load 47(gl_InvocationID) - 65: 14(float) Load 35(cd) - 66: 62(ptr) AccessChain 55(gl_out) 64 36 25 - Store 66 65 - 72: 62(ptr) AccessChain 69(gl_TessLevelOuter) 70 - Store 72 71 - 76: 62(ptr) AccessChain 74(gl_TessLevelInner) 25 - Store 76 75 + 11(a): 10(ptr) Variable Function + 16(p): 15(ptr) Variable Function + 30(ps): 29(ptr) Variable Function + 34(cd): 29(ptr) Variable Function + 38(pvi): 10(ptr) Variable Function + 42(pid): 10(ptr) Variable Function + 45(iid): 10(ptr) Variable Function + ControlBarrier 7 7 8 + Store 11(a) 12 + 27: 26(ptr) AccessChain 23(gl_in) 24 25 + 28: 14(fvec4) Load 27 + Store 16(p) 28 + 32: 31(ptr) AccessChain 23(gl_in) 24 24 + 33: 13(float) Load 32 + Store 30(ps) 33 + 36: 31(ptr) AccessChain 23(gl_in) 24 35 35 + 37: 13(float) Load 36 + Store 34(cd) 37 + 41: 9(int) Load 40(gl_PatchVerticesIn) + Store 38(pvi) 41 + 44: 9(int) Load 43(gl_PrimitiveID) + Store 42(pid) 44 + 47: 9(int) Load 46(gl_InvocationID) + Store 45(iid) 47 + 55: 9(int) Load 46(gl_InvocationID) + 56: 14(fvec4) Load 16(p) + 58: 57(ptr) AccessChain 54(gl_out) 55 25 + Store 58 56 + 59: 9(int) Load 46(gl_InvocationID) + 60: 13(float) Load 30(ps) + 62: 61(ptr) AccessChain 54(gl_out) 59 24 + Store 62 60 + 63: 9(int) Load 46(gl_InvocationID) + 64: 13(float) Load 34(cd) + 65: 61(ptr) AccessChain 54(gl_out) 63 35 24 + Store 65 64 + 71: 61(ptr) AccessChain 68(gl_TessLevelOuter) 69 + Store 71 70 + 75: 61(ptr) AccessChain 73(gl_TessLevelInner) 24 + Store 75 74 Return FunctionEnd diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out index f84fa556..07dc1a79 100755 --- a/Test/baseResults/spv.430.vert.out +++ b/Test/baseResults/spv.430.vert.out @@ -10,6 +10,7 @@ Linked vertex stage: // Id's are bound by 66 Capability Shader + Capability ClipDistance 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Vertex 4 "main" 12 23 34 38 41 42 62 65 @@ -62,9 +63,6 @@ Linked vertex stage: Decorate 55(sampb2) Binding 5 Decorate 56(sampb4) DescriptorSet 0 Decorate 56(sampb4) Binding 31 - MemberDecorate 60(SS) 0 Flat - MemberDecorate 60(SS) 1 Flat - MemberDecorate 60(SS) 2 Flat Decorate 62(var) Location 0 MemberDecorate 63(MS) 0 Location 17 Decorate 63(MS) Block diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out index bc8d9b81..14a0fe31 100755 --- a/Test/baseResults/spv.atomic.comp.out +++ b/Test/baseResults/spv.atomic.comp.out @@ -2,7 +2,6 @@ spv.atomic.comp Warning, version 310 is not yet complete; most version-specific features are present, but some are missing. Shader version: 310 -Requested GL_ARB_gl_spirv local_size = (1, 1, 1) 0:? Sequence 0:14 Function Definition: func(au1; (global highp uint) @@ -105,7 +104,6 @@ Linked compute stage: Shader version: 310 -Requested GL_ARB_gl_spirv local_size = (1, 1, 1) 0:? Sequence 0:14 Function Definition: func(au1; (global highp uint) diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out index 4f3d67c1..2d6f559c 100644 --- a/Test/baseResults/spv.layoutNested.vert.out +++ b/Test/baseResults/spv.layoutNested.vert.out @@ -7,12 +7,12 @@ Linked vertex stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 67 +// Id's are bound by 66 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 63 66 + EntryPoint Vertex 4 "main" 62 65 Source GLSL 450 Name 4 "main" Name 14 "S" @@ -82,16 +82,12 @@ Linked vertex stage: MemberName 58(bBt3) 0 "ntcol" MemberName 58(bBt3) 1 "ntrow" Name 60 "bBtn3" - Name 61 "S" - MemberName 61(S) 0 "a" - MemberName 61(S) 1 "b" - MemberName 61(S) 2 "c" - Name 63 "sout" - Name 64 "S" - MemberName 64(S) 0 "a" - MemberName 64(S) 1 "b" - MemberName 64(S) 2 "c" - Name 66 "soutinv" + Name 62 "sout" + Name 63 "S" + MemberName 63(S) 0 "a" + MemberName 63(S) 1 "b" + MemberName 63(S) 2 "c" + Name 65 "soutinv" Decorate 13 ArrayStride 32 MemberDecorate 14(S) 0 Offset 0 MemberDecorate 14(S) 1 ColMajor @@ -166,13 +162,10 @@ Linked vertex stage: Decorate 58(bBt3) BufferBlock Decorate 60(bBtn3) DescriptorSet 1 Decorate 60(bBtn3) Binding 0 - MemberDecorate 61(S) 0 Flat - MemberDecorate 61(S) 1 Flat - MemberDecorate 61(S) 2 Flat - MemberDecorate 64(S) 0 Invariant - MemberDecorate 64(S) 1 Invariant - MemberDecorate 64(S) 2 Invariant - Decorate 66(soutinv) Invariant + MemberDecorate 63(S) 0 Invariant + MemberDecorate 63(S) 1 Invariant + MemberDecorate 63(S) 2 Invariant + Decorate 65(soutinv) Invariant 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -230,12 +223,11 @@ Linked vertex stage: 58(bBt3): TypeStruct 49(Nestor) 54(Nestor) 59: TypePointer Uniform 58(bBt3) 60(bBtn3): 59(ptr) Variable Uniform - 61(S): TypeStruct 8(ivec3) 13 7(int) - 62: TypePointer Output 61(S) - 63(sout): 62(ptr) Variable Output - 64(S): TypeStruct 8(ivec3) 13 7(int) - 65: TypePointer Output 64(S) - 66(soutinv): 65(ptr) Variable Output + 61: TypePointer Output 29(S) + 62(sout): 61(ptr) Variable Output + 63(S): TypeStruct 8(ivec3) 13 7(int) + 64: TypePointer Output 63(S) + 65(soutinv): 64(ptr) Variable Output 4(main): 2 Function None 3 5: Label Return diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out index cd8afedc..2d464de5 100755 --- a/Test/baseResults/spv.localAggregates.frag.out +++ b/Test/baseResults/spv.localAggregates.frag.out @@ -7,12 +7,12 @@ Linked fragment stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 143 +// Id's are bound by 136 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 18 43 93 101 111 138 142 + EntryPoint Fragment 4 "main" 15 40 90 98 108 134 135 ExecutionMode 4 OriginUpperLeft Source GLSL 400 Name 4 "main" @@ -25,59 +25,27 @@ Linked fragment stage: MemberName 10(s2) 2 "s1_1" MemberName 10(s2) 3 "bleh" Name 12 "locals2" - Name 13 "s1" - MemberName 13(s1) 0 "i" - MemberName 13(s1) 1 "f" - Name 14 "s2" - MemberName 14(s2) 0 "i" - MemberName 14(s2) 1 "f" - MemberName 14(s2) 2 "s1_1" - MemberName 14(s2) 3 "bleh" - Name 15 "s1" - MemberName 15(s1) 0 "i" - MemberName 15(s1) 1 "f" - Name 16 "s3" - MemberName 16(s3) 0 "s2_1" - MemberName 16(s3) 1 "i" - MemberName 16(s3) 2 "f" - MemberName 16(s3) 3 "s1_1" - Name 18 "foo3" - Name 39 "localFArray" - Name 43 "coord" - Name 52 "localIArray" - Name 71 "x" - Name 73 "localArray" - Name 78 "i" - Name 87 "a" - Name 93 "condition" - Name 101 "color" - Name 111 "gl_FragColor" - Name 131 "samp2D" - Name 136 "s1" - MemberName 136(s1) 0 "i" - MemberName 136(s1) 1 "f" - Name 138 "foo" - Name 139 "s1" - MemberName 139(s1) 0 "i" - MemberName 139(s1) 1 "f" - Name 140 "s2" - MemberName 140(s2) 0 "i" - MemberName 140(s2) 1 "f" - MemberName 140(s2) 2 "s1_1" - MemberName 140(s2) 3 "bleh" - Name 142 "foo2" - MemberDecorate 16(s3) 0 Flat - MemberDecorate 16(s3) 1 Flat - MemberDecorate 16(s3) 2 Flat - MemberDecorate 16(s3) 3 Flat - Decorate 93(condition) Flat - Decorate 131(samp2D) DescriptorSet 0 - MemberDecorate 136(s1) 0 Flat - MemberDecorate 136(s1) 1 Flat - MemberDecorate 140(s2) 0 Flat - MemberDecorate 140(s2) 1 Flat - MemberDecorate 140(s2) 2 Flat - MemberDecorate 140(s2) 3 Flat + Name 13 "s3" + MemberName 13(s3) 0 "s2_1" + MemberName 13(s3) 1 "i" + MemberName 13(s3) 2 "f" + MemberName 13(s3) 3 "s1_1" + Name 15 "foo3" + Name 36 "localFArray" + Name 40 "coord" + Name 49 "localIArray" + Name 68 "x" + Name 70 "localArray" + Name 75 "i" + Name 84 "a" + Name 90 "condition" + Name 98 "color" + Name 108 "gl_FragColor" + Name 128 "samp2D" + Name 134 "foo" + Name 135 "foo2" + Decorate 90(condition) Flat + Decorate 128(samp2D) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -86,171 +54,164 @@ Linked fragment stage: 9: TypeVector 7(float) 4 10(s2): TypeStruct 6(int) 7(float) 8(s1) 9(fvec4) 11: TypePointer Function 10(s2) - 13(s1): TypeStruct 6(int) 7(float) - 14(s2): TypeStruct 6(int) 7(float) 13(s1) 9(fvec4) - 15(s1): TypeStruct 6(int) 7(float) - 16(s3): TypeStruct 14(s2) 6(int) 7(float) 15(s1) - 17: TypePointer Input 16(s3) - 18(foo3): 17(ptr) Variable Input - 19: 6(int) Constant 0 - 20: TypePointer Input 14(s2) - 23: TypePointer Input 6(int) - 26: TypeBool - 30: 6(int) Constant 2 - 31: 6(int) Constant 1 - 32: 7(float) Constant 1065353216 - 33: TypePointer Function 7(float) - 35: TypeInt 32 0 - 36: 35(int) Constant 16 - 37: TypeArray 7(float) 36 - 38: TypePointer Function 37 - 40: 6(int) Constant 4 - 41: TypeVector 7(float) 2 - 42: TypePointer Input 41(fvec2) - 43(coord): 42(ptr) Variable Input - 44: 35(int) Constant 0 - 45: TypePointer Input 7(float) - 49: 35(int) Constant 8 - 50: TypeArray 6(int) 49 - 51: TypePointer Function 50 - 55: TypePointer Function 6(int) - 72: 6(int) Constant 5 - 85: 6(int) Constant 16 - 89: 7(float) Constant 0 - 93(condition): 23(ptr) Variable Input - 99: 6(int) Constant 3 - 100: TypePointer Input 9(fvec4) - 101(color): 100(ptr) Variable Input - 103: TypePointer Function 9(fvec4) - 105: 35(int) Constant 1 - 108: 35(int) Constant 2 - 110: TypePointer Output 9(fvec4) -111(gl_FragColor): 110(ptr) Variable Output - 128: TypeImage 7(float) 2D sampled format:Unknown - 129: TypeSampledImage 128 - 130: TypePointer UniformConstant 129 - 131(samp2D): 130(ptr) Variable UniformConstant - 136(s1): TypeStruct 6(int) 7(float) - 137: TypePointer Input 136(s1) - 138(foo): 137(ptr) Variable Input - 139(s1): TypeStruct 6(int) 7(float) - 140(s2): TypeStruct 6(int) 7(float) 139(s1) 9(fvec4) - 141: TypePointer Input 140(s2) - 142(foo2): 141(ptr) Variable Input + 13(s3): TypeStruct 10(s2) 6(int) 7(float) 8(s1) + 14: TypePointer Input 13(s3) + 15(foo3): 14(ptr) Variable Input + 16: 6(int) Constant 0 + 17: TypePointer Input 10(s2) + 20: TypePointer Input 6(int) + 23: TypeBool + 27: 6(int) Constant 2 + 28: 6(int) Constant 1 + 29: 7(float) Constant 1065353216 + 30: TypePointer Function 7(float) + 32: TypeInt 32 0 + 33: 32(int) Constant 16 + 34: TypeArray 7(float) 33 + 35: TypePointer Function 34 + 37: 6(int) Constant 4 + 38: TypeVector 7(float) 2 + 39: TypePointer Input 38(fvec2) + 40(coord): 39(ptr) Variable Input + 41: 32(int) Constant 0 + 42: TypePointer Input 7(float) + 46: 32(int) Constant 8 + 47: TypeArray 6(int) 46 + 48: TypePointer Function 47 + 52: TypePointer Function 6(int) + 69: 6(int) Constant 5 + 82: 6(int) Constant 16 + 86: 7(float) Constant 0 + 90(condition): 20(ptr) Variable Input + 96: 6(int) Constant 3 + 97: TypePointer Input 9(fvec4) + 98(color): 97(ptr) Variable Input + 100: TypePointer Function 9(fvec4) + 102: 32(int) Constant 1 + 105: 32(int) Constant 2 + 107: TypePointer Output 9(fvec4) +108(gl_FragColor): 107(ptr) Variable Output + 125: TypeImage 7(float) 2D sampled format:Unknown + 126: TypeSampledImage 125 + 127: TypePointer UniformConstant 126 + 128(samp2D): 127(ptr) Variable UniformConstant + 133: TypePointer Input 8(s1) + 134(foo): 133(ptr) Variable Input + 135(foo2): 17(ptr) Variable Input 4(main): 2 Function None 3 5: Label 12(locals2): 11(ptr) Variable Function - 39(localFArray): 38(ptr) Variable Function - 52(localIArray): 51(ptr) Variable Function - 71(x): 55(ptr) Variable Function - 73(localArray): 38(ptr) Variable Function - 78(i): 55(ptr) Variable Function - 87(a): 38(ptr) Variable Function - 21: 20(ptr) AccessChain 18(foo3) 19 - 22: 14(s2) Load 21 - Store 12(locals2) 22 - 24: 23(ptr) AccessChain 18(foo3) 19 19 - 25: 6(int) Load 24 - 27: 26(bool) SGreaterThan 25 19 - SelectionMerge 29 None - BranchConditional 27 28 57 - 28: Label - 34: 33(ptr) AccessChain 12(locals2) 30 31 - Store 34 32 - 46: 45(ptr) AccessChain 43(coord) 44 - 47: 7(float) Load 46 - 48: 33(ptr) AccessChain 39(localFArray) 40 - Store 48 47 - 53: 23(ptr) AccessChain 18(foo3) 19 19 - 54: 6(int) Load 53 - 56: 55(ptr) AccessChain 52(localIArray) 30 - Store 56 54 - Branch 29 - 57: Label - 58: 45(ptr) AccessChain 43(coord) 44 - 59: 7(float) Load 58 - 60: 33(ptr) AccessChain 12(locals2) 30 31 - Store 60 59 - 61: 33(ptr) AccessChain 39(localFArray) 40 - Store 61 32 - 62: 55(ptr) AccessChain 52(localIArray) 30 - Store 62 19 - Branch 29 - 29: Label - 63: 55(ptr) AccessChain 52(localIArray) 30 - 64: 6(int) Load 63 - 65: 26(bool) IEqual 64 19 - SelectionMerge 67 None - BranchConditional 65 66 67 - 66: Label - 68: 33(ptr) AccessChain 39(localFArray) 40 - 69: 7(float) Load 68 - 70: 7(float) FAdd 69 32 - Store 68 70 - Branch 67 - 67: Label - Store 71(x) 72 - 74: 6(int) Load 71(x) - 75: 45(ptr) AccessChain 43(coord) 44 - 76: 7(float) Load 75 - 77: 33(ptr) AccessChain 73(localArray) 74 - Store 77 76 - Store 78(i) 19 - Branch 79 - 79: Label - LoopMerge 81 82 None - Branch 83 - 83: Label - 84: 6(int) Load 78(i) - 86: 26(bool) SLessThan 84 85 - BranchConditional 86 80 81 - 80: Label - 88: 6(int) Load 78(i) - 90: 33(ptr) AccessChain 87(a) 88 - Store 90 89 - Branch 82 - 82: Label - 91: 6(int) Load 78(i) - 92: 6(int) IAdd 91 31 - Store 78(i) 92 + 36(localFArray): 35(ptr) Variable Function + 49(localIArray): 48(ptr) Variable Function + 68(x): 52(ptr) Variable Function + 70(localArray): 35(ptr) Variable Function + 75(i): 52(ptr) Variable Function + 84(a): 35(ptr) Variable Function + 18: 17(ptr) AccessChain 15(foo3) 16 + 19: 10(s2) Load 18 + Store 12(locals2) 19 + 21: 20(ptr) AccessChain 15(foo3) 16 16 + 22: 6(int) Load 21 + 24: 23(bool) SGreaterThan 22 16 + SelectionMerge 26 None + BranchConditional 24 25 54 + 25: Label + 31: 30(ptr) AccessChain 12(locals2) 27 28 + Store 31 29 + 43: 42(ptr) AccessChain 40(coord) 41 + 44: 7(float) Load 43 + 45: 30(ptr) AccessChain 36(localFArray) 37 + Store 45 44 + 50: 20(ptr) AccessChain 15(foo3) 16 16 + 51: 6(int) Load 50 + 53: 52(ptr) AccessChain 49(localIArray) 27 + Store 53 51 + Branch 26 + 54: Label + 55: 42(ptr) AccessChain 40(coord) 41 + 56: 7(float) Load 55 + 57: 30(ptr) AccessChain 12(locals2) 27 28 + Store 57 56 + 58: 30(ptr) AccessChain 36(localFArray) 37 + Store 58 29 + 59: 52(ptr) AccessChain 49(localIArray) 27 + Store 59 16 + Branch 26 + 26: Label + 60: 52(ptr) AccessChain 49(localIArray) 27 + 61: 6(int) Load 60 + 62: 23(bool) IEqual 61 16 + SelectionMerge 64 None + BranchConditional 62 63 64 + 63: Label + 65: 30(ptr) AccessChain 36(localFArray) 37 + 66: 7(float) Load 65 + 67: 7(float) FAdd 66 29 + Store 65 67 + Branch 64 + 64: Label + Store 68(x) 69 + 71: 6(int) Load 68(x) + 72: 42(ptr) AccessChain 40(coord) 41 + 73: 7(float) Load 72 + 74: 30(ptr) AccessChain 70(localArray) 71 + Store 74 73 + Store 75(i) 16 + Branch 76 + 76: Label + LoopMerge 78 79 None + Branch 80 + 80: Label + 81: 6(int) Load 75(i) + 83: 23(bool) SLessThan 81 82 + BranchConditional 83 77 78 + 77: Label + 85: 6(int) Load 75(i) + 87: 30(ptr) AccessChain 84(a) 85 + Store 87 86 Branch 79 - 81: Label - 94: 6(int) Load 93(condition) - 95: 26(bool) IEqual 94 31 - SelectionMerge 97 None - BranchConditional 95 96 97 - 96: Label - 98: 37 Load 73(localArray) - Store 87(a) 98 - Branch 97 - 97: Label - 102: 9(fvec4) Load 101(color) - 104: 103(ptr) AccessChain 12(locals2) 99 - Store 104 102 - 106: 45(ptr) AccessChain 43(coord) 105 - 107: 7(float) Load 106 - 109: 33(ptr) AccessChain 12(locals2) 99 108 - Store 109 107 - 112: 103(ptr) AccessChain 12(locals2) 99 - 113: 9(fvec4) Load 112 - 114: 33(ptr) AccessChain 39(localFArray) 40 - 115: 7(float) Load 114 - 116: 33(ptr) AccessChain 12(locals2) 30 31 - 117: 7(float) Load 116 - 118: 7(float) FAdd 115 117 - 119: 6(int) Load 71(x) - 120: 33(ptr) AccessChain 73(localArray) 119 - 121: 7(float) Load 120 - 122: 7(float) FAdd 118 121 - 123: 6(int) Load 71(x) - 124: 33(ptr) AccessChain 87(a) 123 - 125: 7(float) Load 124 - 126: 7(float) FAdd 122 125 - 127: 9(fvec4) VectorTimesScalar 113 126 - 132: 129 Load 131(samp2D) - 133: 41(fvec2) Load 43(coord) - 134: 9(fvec4) ImageSampleImplicitLod 132 133 - 135: 9(fvec4) FMul 127 134 - Store 111(gl_FragColor) 135 + 79: Label + 88: 6(int) Load 75(i) + 89: 6(int) IAdd 88 28 + Store 75(i) 89 + Branch 76 + 78: Label + 91: 6(int) Load 90(condition) + 92: 23(bool) IEqual 91 28 + SelectionMerge 94 None + BranchConditional 92 93 94 + 93: Label + 95: 34 Load 70(localArray) + Store 84(a) 95 + Branch 94 + 94: Label + 99: 9(fvec4) Load 98(color) + 101: 100(ptr) AccessChain 12(locals2) 96 + Store 101 99 + 103: 42(ptr) AccessChain 40(coord) 102 + 104: 7(float) Load 103 + 106: 30(ptr) AccessChain 12(locals2) 96 105 + Store 106 104 + 109: 100(ptr) AccessChain 12(locals2) 96 + 110: 9(fvec4) Load 109 + 111: 30(ptr) AccessChain 36(localFArray) 37 + 112: 7(float) Load 111 + 113: 30(ptr) AccessChain 12(locals2) 27 28 + 114: 7(float) Load 113 + 115: 7(float) FAdd 112 114 + 116: 6(int) Load 68(x) + 117: 30(ptr) AccessChain 70(localArray) 116 + 118: 7(float) Load 117 + 119: 7(float) FAdd 115 118 + 120: 6(int) Load 68(x) + 121: 30(ptr) AccessChain 84(a) 120 + 122: 7(float) Load 121 + 123: 7(float) FAdd 119 122 + 124: 9(fvec4) VectorTimesScalar 110 123 + 129: 126 Load 128(samp2D) + 130: 38(fvec2) Load 40(coord) + 131: 9(fvec4) ImageSampleImplicitLod 129 130 + 132: 9(fvec4) FMul 124 131 + Store 108(gl_FragColor) 132 Return FunctionEnd diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out index 1c99ac01..3206faa3 100755 --- a/Test/baseResults/spv.newTexture.frag.out +++ b/Test/baseResults/spv.newTexture.frag.out @@ -7,7 +7,7 @@ Linked fragment stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 278 +// Id's are bound by 284 Capability Shader Capability SampledRect @@ -15,7 +15,7 @@ Linked fragment stage: Capability ImageQuery 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 17 26 29 55 81 84 91 247 277 + EntryPoint Fragment 4 "main" 17 26 29 55 81 84 92 253 283 ExecutionMode 4 OriginUpperLeft Source GLSL 430 Name 4 "main" @@ -31,24 +31,24 @@ Linked fragment stage: Name 64 "s2DShadow" Name 81 "ic3D" Name 84 "ic1D" - Name 91 "ic2D" - Name 100 "sr" - Name 125 "sCube" - Name 136 "s2DArrayShadow" - Name 164 "iv" - Name 168 "is2D" - Name 203 "is3D" - Name 215 "isCube" - Name 227 "is2DArray" - Name 237 "iv2" - Name 241 "sCubeShadow" - Name 247 "FragData" - Name 259 "is2Dms" - Name 263 "us2D" - Name 267 "us3D" - Name 271 "usCube" - Name 275 "us2DArray" - Name 277 "ic4D" + Name 92 "ic2D" + Name 102 "sr" + Name 128 "sCube" + Name 139 "s2DArrayShadow" + Name 167 "iv" + Name 171 "is2D" + Name 208 "is3D" + Name 220 "isCube" + Name 232 "is2DArray" + Name 243 "iv2" + Name 247 "sCubeShadow" + Name 253 "FragData" + Name 265 "is2Dms" + Name 269 "us2D" + Name 273 "us3D" + Name 277 "usCube" + Name 281 "us2DArray" + Name 283 "ic4D" Decorate 13(s2D) DescriptorSet 0 Decorate 23(sCubeArrayShadow) DescriptorSet 0 Decorate 42(s3D) DescriptorSet 0 @@ -56,21 +56,21 @@ Linked fragment stage: Decorate 64(s2DShadow) DescriptorSet 0 Decorate 81(ic3D) Flat Decorate 84(ic1D) Flat - Decorate 91(ic2D) Flat - Decorate 100(sr) DescriptorSet 0 - Decorate 125(sCube) DescriptorSet 0 - Decorate 136(s2DArrayShadow) DescriptorSet 0 - Decorate 168(is2D) DescriptorSet 0 - Decorate 203(is3D) DescriptorSet 0 - Decorate 215(isCube) DescriptorSet 0 - Decorate 227(is2DArray) DescriptorSet 0 - Decorate 241(sCubeShadow) DescriptorSet 0 - Decorate 259(is2Dms) DescriptorSet 0 - Decorate 263(us2D) DescriptorSet 0 - Decorate 267(us3D) DescriptorSet 0 - Decorate 271(usCube) DescriptorSet 0 - Decorate 275(us2DArray) DescriptorSet 0 - Decorate 277(ic4D) Flat + Decorate 92(ic2D) Flat + Decorate 102(sr) DescriptorSet 0 + Decorate 128(sCube) DescriptorSet 0 + Decorate 139(s2DArrayShadow) DescriptorSet 0 + Decorate 171(is2D) DescriptorSet 0 + Decorate 208(is3D) DescriptorSet 0 + Decorate 220(isCube) DescriptorSet 0 + Decorate 232(is2DArray) DescriptorSet 0 + Decorate 247(sCubeShadow) DescriptorSet 0 + Decorate 265(is2Dms) DescriptorSet 0 + Decorate 269(us2D) DescriptorSet 0 + Decorate 273(us3D) DescriptorSet 0 + Decorate 277(usCube) DescriptorSet 0 + Decorate 281(us2DArray) DescriptorSet 0 + Decorate 283(ic4D) Flat 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -119,78 +119,78 @@ Linked fragment stage: 81(ic3D): 80(ptr) Variable Input 83: TypePointer Input 67(int) 84(ic1D): 83(ptr) Variable Input - 90: TypePointer Input 68(ivec2) - 91(ic2D): 90(ptr) Variable Input - 93: 67(int) Constant 4 - 97: TypeImage 6(float) Rect sampled format:Unknown - 98: TypeSampledImage 97 - 99: TypePointer UniformConstant 98 - 100(sr): 99(ptr) Variable UniformConstant - 103: 68(ivec2) ConstantComposite 93 93 - 122: TypeImage 6(float) Cube sampled format:Unknown - 123: TypeSampledImage 122 - 124: TypePointer UniformConstant 123 - 125(sCube): 124(ptr) Variable UniformConstant - 133: TypeImage 6(float) 2D depth array sampled format:Unknown - 134: TypeSampledImage 133 - 135: TypePointer UniformConstant 134 -136(s2DArrayShadow): 135(ptr) Variable UniformConstant - 143: 32(int) Constant 0 - 162: TypeVector 67(int) 4 - 163: TypePointer Function 162(ivec4) - 165: TypeImage 67(int) 2D sampled format:Unknown - 166: TypeSampledImage 165 - 167: TypePointer UniformConstant 166 - 168(is2D): 167(ptr) Variable UniformConstant - 200: TypeImage 67(int) 3D sampled format:Unknown - 201: TypeSampledImage 200 - 202: TypePointer UniformConstant 201 - 203(is3D): 202(ptr) Variable UniformConstant - 206: 6(float) Constant 1082549862 - 212: TypeImage 67(int) Cube sampled format:Unknown - 213: TypeSampledImage 212 - 214: TypePointer UniformConstant 213 - 215(isCube): 214(ptr) Variable UniformConstant - 224: TypeImage 67(int) 2D array sampled format:Unknown - 225: TypeSampledImage 224 - 226: TypePointer UniformConstant 225 - 227(is2DArray): 226(ptr) Variable UniformConstant - 236: TypePointer Function 68(ivec2) - 238: TypeImage 6(float) Cube depth sampled format:Unknown - 239: TypeSampledImage 238 - 240: TypePointer UniformConstant 239 -241(sCubeShadow): 240(ptr) Variable UniformConstant - 243: 67(int) Constant 2 - 246: TypePointer Output 7(fvec4) - 247(FragData): 246(ptr) Variable Output - 251: 6(float) Constant 0 - 256: TypeImage 67(int) 2D multi-sampled sampled format:Unknown - 257: TypeSampledImage 256 - 258: TypePointer UniformConstant 257 - 259(is2Dms): 258(ptr) Variable UniformConstant - 260: TypeImage 32(int) 2D sampled format:Unknown - 261: TypeSampledImage 260 - 262: TypePointer UniformConstant 261 - 263(us2D): 262(ptr) Variable UniformConstant - 264: TypeImage 32(int) 3D sampled format:Unknown - 265: TypeSampledImage 264 - 266: TypePointer UniformConstant 265 - 267(us3D): 266(ptr) Variable UniformConstant - 268: TypeImage 32(int) Cube sampled format:Unknown - 269: TypeSampledImage 268 - 270: TypePointer UniformConstant 269 - 271(usCube): 270(ptr) Variable UniformConstant - 272: TypeImage 32(int) 2D array sampled format:Unknown - 273: TypeSampledImage 272 - 274: TypePointer UniformConstant 273 - 275(us2DArray): 274(ptr) Variable UniformConstant - 276: TypePointer Input 162(ivec4) - 277(ic4D): 276(ptr) Variable Input + 91: TypePointer Input 68(ivec2) + 92(ic2D): 91(ptr) Variable Input + 94: 67(int) Constant 4 + 99: TypeImage 6(float) Rect sampled format:Unknown + 100: TypeSampledImage 99 + 101: TypePointer UniformConstant 100 + 102(sr): 101(ptr) Variable UniformConstant + 105: 68(ivec2) ConstantComposite 94 94 + 125: TypeImage 6(float) Cube sampled format:Unknown + 126: TypeSampledImage 125 + 127: TypePointer UniformConstant 126 + 128(sCube): 127(ptr) Variable UniformConstant + 136: TypeImage 6(float) 2D depth array sampled format:Unknown + 137: TypeSampledImage 136 + 138: TypePointer UniformConstant 137 +139(s2DArrayShadow): 138(ptr) Variable UniformConstant + 146: 32(int) Constant 0 + 165: TypeVector 67(int) 4 + 166: TypePointer Function 165(ivec4) + 168: TypeImage 67(int) 2D sampled format:Unknown + 169: TypeSampledImage 168 + 170: TypePointer UniformConstant 169 + 171(is2D): 170(ptr) Variable UniformConstant + 205: TypeImage 67(int) 3D sampled format:Unknown + 206: TypeSampledImage 205 + 207: TypePointer UniformConstant 206 + 208(is3D): 207(ptr) Variable UniformConstant + 211: 6(float) Constant 1082549862 + 217: TypeImage 67(int) Cube sampled format:Unknown + 218: TypeSampledImage 217 + 219: TypePointer UniformConstant 218 + 220(isCube): 219(ptr) Variable UniformConstant + 229: TypeImage 67(int) 2D array sampled format:Unknown + 230: TypeSampledImage 229 + 231: TypePointer UniformConstant 230 + 232(is2DArray): 231(ptr) Variable UniformConstant + 242: TypePointer Function 68(ivec2) + 244: TypeImage 6(float) Cube depth sampled format:Unknown + 245: TypeSampledImage 244 + 246: TypePointer UniformConstant 245 +247(sCubeShadow): 246(ptr) Variable UniformConstant + 249: 67(int) Constant 2 + 252: TypePointer Output 7(fvec4) + 253(FragData): 252(ptr) Variable Output + 257: 6(float) Constant 0 + 262: TypeImage 67(int) 2D multi-sampled sampled format:Unknown + 263: TypeSampledImage 262 + 264: TypePointer UniformConstant 263 + 265(is2Dms): 264(ptr) Variable UniformConstant + 266: TypeImage 32(int) 2D sampled format:Unknown + 267: TypeSampledImage 266 + 268: TypePointer UniformConstant 267 + 269(us2D): 268(ptr) Variable UniformConstant + 270: TypeImage 32(int) 3D sampled format:Unknown + 271: TypeSampledImage 270 + 272: TypePointer UniformConstant 271 + 273(us3D): 272(ptr) Variable UniformConstant + 274: TypeImage 32(int) Cube sampled format:Unknown + 275: TypeSampledImage 274 + 276: TypePointer UniformConstant 275 + 277(usCube): 276(ptr) Variable UniformConstant + 278: TypeImage 32(int) 2D array sampled format:Unknown + 279: TypeSampledImage 278 + 280: TypePointer UniformConstant 279 + 281(us2DArray): 280(ptr) Variable UniformConstant + 282: TypePointer Input 165(ivec4) + 283(ic4D): 282(ptr) Variable Input 4(main): 2 Function None 3 5: Label 9(v): 8(ptr) Variable Function - 164(iv): 163(ptr) Variable Function - 237(iv2): 236(ptr) Variable Function + 167(iv): 166(ptr) Variable Function + 243(iv2): 242(ptr) Variable Function 14: 11 Load 13(s2D) 18: 15(fvec2) Load 17(c2D) 19: 7(fvec4) ImageSampleImplicitLod 14 18 @@ -229,153 +229,159 @@ Linked fragment stage: 78: 40 Load 42(s3D) 82: 79(ivec3) Load 81(ic3D) 85: 67(int) Load 84(ic1D) - 86: 7(fvec4) ImageFetch 78 82 Lod 85 - 87: 7(fvec4) Load 9(v) - 88: 7(fvec4) FAdd 87 86 - Store 9(v) 88 - 89: 11 Load 13(s2D) - 92: 68(ivec2) Load 91(ic2D) - 94: 7(fvec4) ImageFetch 89 92 Lod ConstOffset 93 70 - 95: 7(fvec4) Load 9(v) - 96: 7(fvec4) FAdd 95 94 - Store 9(v) 96 - 101: 98 Load 100(sr) - 102: 68(ivec2) Load 91(ic2D) - 104: 7(fvec4) ImageFetch 101 102 ConstOffset 103 - 105: 7(fvec4) Load 9(v) - 106: 7(fvec4) FAdd 105 104 - Store 9(v) 106 - 107: 62 Load 64(s2DShadow) - 108: 53(fvec3) Load 55(c3D) - 109: 6(float) Load 29(c1D) - 110: 6(float) CompositeExtract 108 2 - 111: 6(float) ImageSampleDrefExplicitLod 107 108 110 Lod ConstOffset 109 70 - 112: 34(ptr) AccessChain 9(v) 33 - 113: 6(float) Load 112 - 114: 6(float) FAdd 113 111 + 86: 39 Image 78 + 87: 7(fvec4) ImageFetch 86 82 Lod 85 + 88: 7(fvec4) Load 9(v) + 89: 7(fvec4) FAdd 88 87 + Store 9(v) 89 + 90: 11 Load 13(s2D) + 93: 68(ivec2) Load 92(ic2D) + 95: 10 Image 90 + 96: 7(fvec4) ImageFetch 95 93 Lod ConstOffset 94 70 + 97: 7(fvec4) Load 9(v) + 98: 7(fvec4) FAdd 97 96 + Store 9(v) 98 + 103: 100 Load 102(sr) + 104: 68(ivec2) Load 92(ic2D) + 106: 99 Image 103 + 107: 7(fvec4) ImageFetch 106 104 ConstOffset 105 + 108: 7(fvec4) Load 9(v) + 109: 7(fvec4) FAdd 108 107 + Store 9(v) 109 + 110: 62 Load 64(s2DShadow) + 111: 53(fvec3) Load 55(c3D) + 112: 6(float) Load 29(c1D) + 113: 6(float) CompositeExtract 111 2 + 114: 6(float) ImageSampleDrefExplicitLod 110 111 113 Lod ConstOffset 112 70 115: 34(ptr) AccessChain 9(v) 33 - Store 115 114 - 116: 11 Load 13(s2D) - 117: 53(fvec3) Load 55(c3D) - 118: 6(float) Load 29(c1D) - 119: 7(fvec4) ImageSampleProjExplicitLod 116 117 Lod ConstOffset 118 70 - 120: 7(fvec4) Load 9(v) - 121: 7(fvec4) FAdd 120 119 - Store 9(v) 121 - 126: 123 Load 125(sCube) - 127: 53(fvec3) Load 55(c3D) - 128: 53(fvec3) Load 55(c3D) - 129: 53(fvec3) Load 55(c3D) - 130: 7(fvec4) ImageSampleExplicitLod 126 127 Grad 128 129 - 131: 7(fvec4) Load 9(v) - 132: 7(fvec4) FAdd 131 130 - Store 9(v) 132 - 137: 134 Load 136(s2DArrayShadow) - 138: 7(fvec4) Load 26(c4D) - 139: 15(fvec2) Load 17(c2D) - 140: 15(fvec2) Load 17(c2D) - 141: 6(float) CompositeExtract 138 3 - 142: 6(float) ImageSampleDrefExplicitLod 137 138 141 Grad ConstOffset 139 140 70 - 144: 34(ptr) AccessChain 9(v) 143 - 145: 6(float) Load 144 - 146: 6(float) FAdd 145 142 - 147: 34(ptr) AccessChain 9(v) 143 - Store 147 146 - 148: 40 Load 42(s3D) - 149: 7(fvec4) Load 26(c4D) - 150: 53(fvec3) Load 55(c3D) - 151: 53(fvec3) Load 55(c3D) - 152: 7(fvec4) ImageSampleProjExplicitLod 148 149 Grad 150 151 - 153: 7(fvec4) Load 9(v) - 154: 7(fvec4) FAdd 153 152 - Store 9(v) 154 - 155: 11 Load 13(s2D) - 156: 53(fvec3) Load 55(c3D) - 157: 15(fvec2) Load 17(c2D) - 158: 15(fvec2) Load 17(c2D) - 159: 7(fvec4) ImageSampleProjExplicitLod 155 156 Grad ConstOffset 157 158 70 - 160: 7(fvec4) Load 9(v) - 161: 7(fvec4) FAdd 160 159 - Store 9(v) 161 - 169: 166 Load 168(is2D) - 170: 15(fvec2) Load 17(c2D) - 171: 162(ivec4) ImageSampleImplicitLod 169 170 - Store 164(iv) 171 - 172: 162(ivec4) Load 164(iv) - 173: 7(fvec4) ConvertSToF 172 - 174: 7(fvec4) Load 9(v) - 175: 7(fvec4) FAdd 174 173 - Store 9(v) 175 - 176: 166 Load 168(is2D) - 177: 7(fvec4) Load 26(c4D) - 178: 162(ivec4) ImageSampleProjImplicitLod 176 177 ConstOffset 70 - Store 164(iv) 178 - 179: 162(ivec4) Load 164(iv) - 180: 7(fvec4) ConvertSToF 179 - 181: 7(fvec4) Load 9(v) - 182: 7(fvec4) FAdd 181 180 - Store 9(v) 182 - 183: 166 Load 168(is2D) - 184: 53(fvec3) Load 55(c3D) - 185: 6(float) Load 29(c1D) - 186: 162(ivec4) ImageSampleProjExplicitLod 183 184 Lod 185 - Store 164(iv) 186 - 187: 162(ivec4) Load 164(iv) - 188: 7(fvec4) ConvertSToF 187 - 189: 7(fvec4) Load 9(v) - 190: 7(fvec4) FAdd 189 188 - Store 9(v) 190 - 191: 166 Load 168(is2D) - 192: 53(fvec3) Load 55(c3D) - 193: 15(fvec2) Load 17(c2D) - 194: 15(fvec2) Load 17(c2D) - 195: 162(ivec4) ImageSampleProjExplicitLod 191 192 Grad 193 194 - Store 164(iv) 195 - 196: 162(ivec4) Load 164(iv) - 197: 7(fvec4) ConvertSToF 196 - 198: 7(fvec4) Load 9(v) - 199: 7(fvec4) FAdd 198 197 - Store 9(v) 199 - 204: 201 Load 203(is3D) - 205: 53(fvec3) Load 55(c3D) - 207: 162(ivec4) ImageSampleImplicitLod 204 205 Bias 206 - Store 164(iv) 207 - 208: 162(ivec4) Load 164(iv) - 209: 7(fvec4) ConvertSToF 208 - 210: 7(fvec4) Load 9(v) - 211: 7(fvec4) FAdd 210 209 - Store 9(v) 211 - 216: 213 Load 215(isCube) - 217: 53(fvec3) Load 55(c3D) - 218: 6(float) Load 29(c1D) - 219: 162(ivec4) ImageSampleExplicitLod 216 217 Lod 218 - Store 164(iv) 219 - 220: 162(ivec4) Load 164(iv) - 221: 7(fvec4) ConvertSToF 220 - 222: 7(fvec4) Load 9(v) - 223: 7(fvec4) FAdd 222 221 - Store 9(v) 223 - 228: 225 Load 227(is2DArray) - 229: 79(ivec3) Load 81(ic3D) - 230: 67(int) Load 84(ic1D) - 231: 162(ivec4) ImageFetch 228 229 Lod 230 - Store 164(iv) 231 - 232: 162(ivec4) Load 164(iv) - 233: 7(fvec4) ConvertSToF 232 - 234: 7(fvec4) Load 9(v) - 235: 7(fvec4) FAdd 234 233 - Store 9(v) 235 - 242: 239 Load 241(sCubeShadow) - 244: 238 Image 242 - 245: 68(ivec2) ImageQuerySizeLod 244 243 - Store 237(iv2) 245 - 248: 7(fvec4) Load 9(v) - 249: 68(ivec2) Load 237(iv2) - 250: 15(fvec2) ConvertSToF 249 - 252: 6(float) CompositeExtract 250 0 - 253: 6(float) CompositeExtract 250 1 - 254: 7(fvec4) CompositeConstruct 252 253 251 251 - 255: 7(fvec4) FAdd 248 254 - Store 247(FragData) 255 + 116: 6(float) Load 115 + 117: 6(float) FAdd 116 114 + 118: 34(ptr) AccessChain 9(v) 33 + Store 118 117 + 119: 11 Load 13(s2D) + 120: 53(fvec3) Load 55(c3D) + 121: 6(float) Load 29(c1D) + 122: 7(fvec4) ImageSampleProjExplicitLod 119 120 Lod ConstOffset 121 70 + 123: 7(fvec4) Load 9(v) + 124: 7(fvec4) FAdd 123 122 + Store 9(v) 124 + 129: 126 Load 128(sCube) + 130: 53(fvec3) Load 55(c3D) + 131: 53(fvec3) Load 55(c3D) + 132: 53(fvec3) Load 55(c3D) + 133: 7(fvec4) ImageSampleExplicitLod 129 130 Grad 131 132 + 134: 7(fvec4) Load 9(v) + 135: 7(fvec4) FAdd 134 133 + Store 9(v) 135 + 140: 137 Load 139(s2DArrayShadow) + 141: 7(fvec4) Load 26(c4D) + 142: 15(fvec2) Load 17(c2D) + 143: 15(fvec2) Load 17(c2D) + 144: 6(float) CompositeExtract 141 3 + 145: 6(float) ImageSampleDrefExplicitLod 140 141 144 Grad ConstOffset 142 143 70 + 147: 34(ptr) AccessChain 9(v) 146 + 148: 6(float) Load 147 + 149: 6(float) FAdd 148 145 + 150: 34(ptr) AccessChain 9(v) 146 + Store 150 149 + 151: 40 Load 42(s3D) + 152: 7(fvec4) Load 26(c4D) + 153: 53(fvec3) Load 55(c3D) + 154: 53(fvec3) Load 55(c3D) + 155: 7(fvec4) ImageSampleProjExplicitLod 151 152 Grad 153 154 + 156: 7(fvec4) Load 9(v) + 157: 7(fvec4) FAdd 156 155 + Store 9(v) 157 + 158: 11 Load 13(s2D) + 159: 53(fvec3) Load 55(c3D) + 160: 15(fvec2) Load 17(c2D) + 161: 15(fvec2) Load 17(c2D) + 162: 7(fvec4) ImageSampleProjExplicitLod 158 159 Grad ConstOffset 160 161 70 + 163: 7(fvec4) Load 9(v) + 164: 7(fvec4) FAdd 163 162 + Store 9(v) 164 + 172: 169 Load 171(is2D) + 173: 15(fvec2) Load 17(c2D) + 174: 165(ivec4) ImageSampleImplicitLod 172 173 + Store 167(iv) 174 + 175: 165(ivec4) Load 167(iv) + 176: 7(fvec4) ConvertSToF 175 + 177: 7(fvec4) Load 9(v) + 178: 7(fvec4) FAdd 177 176 + Store 9(v) 178 + 179: 169 Load 171(is2D) + 180: 7(fvec4) Load 26(c4D) + 181: 6(float) CompositeExtract 180 3 + 182: 7(fvec4) CompositeInsert 181 180 2 + 183: 165(ivec4) ImageSampleProjImplicitLod 179 182 ConstOffset 70 + Store 167(iv) 183 + 184: 165(ivec4) Load 167(iv) + 185: 7(fvec4) ConvertSToF 184 + 186: 7(fvec4) Load 9(v) + 187: 7(fvec4) FAdd 186 185 + Store 9(v) 187 + 188: 169 Load 171(is2D) + 189: 53(fvec3) Load 55(c3D) + 190: 6(float) Load 29(c1D) + 191: 165(ivec4) ImageSampleProjExplicitLod 188 189 Lod 190 + Store 167(iv) 191 + 192: 165(ivec4) Load 167(iv) + 193: 7(fvec4) ConvertSToF 192 + 194: 7(fvec4) Load 9(v) + 195: 7(fvec4) FAdd 194 193 + Store 9(v) 195 + 196: 169 Load 171(is2D) + 197: 53(fvec3) Load 55(c3D) + 198: 15(fvec2) Load 17(c2D) + 199: 15(fvec2) Load 17(c2D) + 200: 165(ivec4) ImageSampleProjExplicitLod 196 197 Grad 198 199 + Store 167(iv) 200 + 201: 165(ivec4) Load 167(iv) + 202: 7(fvec4) ConvertSToF 201 + 203: 7(fvec4) Load 9(v) + 204: 7(fvec4) FAdd 203 202 + Store 9(v) 204 + 209: 206 Load 208(is3D) + 210: 53(fvec3) Load 55(c3D) + 212: 165(ivec4) ImageSampleImplicitLod 209 210 Bias 211 + Store 167(iv) 212 + 213: 165(ivec4) Load 167(iv) + 214: 7(fvec4) ConvertSToF 213 + 215: 7(fvec4) Load 9(v) + 216: 7(fvec4) FAdd 215 214 + Store 9(v) 216 + 221: 218 Load 220(isCube) + 222: 53(fvec3) Load 55(c3D) + 223: 6(float) Load 29(c1D) + 224: 165(ivec4) ImageSampleExplicitLod 221 222 Lod 223 + Store 167(iv) 224 + 225: 165(ivec4) Load 167(iv) + 226: 7(fvec4) ConvertSToF 225 + 227: 7(fvec4) Load 9(v) + 228: 7(fvec4) FAdd 227 226 + Store 9(v) 228 + 233: 230 Load 232(is2DArray) + 234: 79(ivec3) Load 81(ic3D) + 235: 67(int) Load 84(ic1D) + 236: 229 Image 233 + 237: 165(ivec4) ImageFetch 236 234 Lod 235 + Store 167(iv) 237 + 238: 165(ivec4) Load 167(iv) + 239: 7(fvec4) ConvertSToF 238 + 240: 7(fvec4) Load 9(v) + 241: 7(fvec4) FAdd 240 239 + Store 9(v) 241 + 248: 245 Load 247(sCubeShadow) + 250: 244 Image 248 + 251: 68(ivec2) ImageQuerySizeLod 250 249 + Store 243(iv2) 251 + 254: 7(fvec4) Load 9(v) + 255: 68(ivec2) Load 243(iv2) + 256: 15(fvec2) ConvertSToF 255 + 258: 6(float) CompositeExtract 256 0 + 259: 6(float) CompositeExtract 256 1 + 260: 7(fvec4) CompositeConstruct 258 259 257 257 + 261: 7(fvec4) FAdd 254 260 + Store 253(FragData) 261 Return FunctionEnd diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out index 231ea333..40339812 100644 --- a/Test/baseResults/spv.precise.tese.out +++ b/Test/baseResults/spv.precise.tese.out @@ -10,7 +10,6 @@ Linked tessellation evaluation stage: // Id's are bound by 119 Capability Tessellation - Capability TessellationPointSize 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint TessellationEvaluation 4 "main" 12 21 62 112 diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out index 315e1bb4..ae48f41d 100644 --- a/Test/baseResults/spv.sparseTexture.frag.out +++ b/Test/baseResults/spv.sparseTexture.frag.out @@ -7,7 +7,7 @@ Linked fragment stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 433 +// Id's are bound by 438 Capability Shader Capability SampledRect @@ -15,7 +15,7 @@ Linked fragment stage: Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 33 48 89 360 388 400 418 + EntryPoint Fragment 4 "main" 33 48 89 365 393 405 423 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_ARB_sparse_texture2" @@ -39,17 +39,17 @@ Linked fragment stage: Name 111 "ResType" Name 140 "us2DRect" Name 154 "s2DArrayShadow" - Name 186 "s2DMS" - Name 223 "is2DArray" - Name 256 "sCubeShadow" - Name 289 "s2DRectShadow" - Name 360 "offsets" - Name 385 "i2D" - Name 388 "ic2" - Name 397 "ii3D" - Name 400 "ic3" - Name 409 "i2DMS" - Name 418 "outColor" + Name 188 "s2DMS" + Name 228 "is2DArray" + Name 261 "sCubeShadow" + Name 294 "s2DRectShadow" + Name 365 "offsets" + Name 390 "i2D" + Name 393 "ic2" + Name 402 "ii3D" + Name 405 "ic3" + Name 414 "i2DMS" + Name 423 "outColor" Decorate 29(s2D) DescriptorSet 0 Decorate 44(s3D) DescriptorSet 0 Decorate 59(isCube) DescriptorSet 0 @@ -58,16 +58,16 @@ Linked fragment stage: Decorate 108(usCubeArray) DescriptorSet 0 Decorate 140(us2DRect) DescriptorSet 0 Decorate 154(s2DArrayShadow) DescriptorSet 0 - Decorate 186(s2DMS) DescriptorSet 0 - Decorate 223(is2DArray) DescriptorSet 0 - Decorate 256(sCubeShadow) DescriptorSet 0 - Decorate 289(s2DRectShadow) DescriptorSet 0 - Decorate 360(offsets) Flat - Decorate 385(i2D) DescriptorSet 0 - Decorate 388(ic2) Flat - Decorate 397(ii3D) DescriptorSet 0 - Decorate 400(ic3) Flat - Decorate 409(i2DMS) DescriptorSet 0 + Decorate 188(s2DMS) DescriptorSet 0 + Decorate 228(is2DArray) DescriptorSet 0 + Decorate 261(sCubeShadow) DescriptorSet 0 + Decorate 294(s2DRectShadow) DescriptorSet 0 + Decorate 365(offsets) Flat + Decorate 390(i2D) DescriptorSet 0 + Decorate 393(ic2) Flat + Decorate 402(ii3D) DescriptorSet 0 + Decorate 405(ic3) Flat + Decorate 414(i2DMS) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -143,58 +143,58 @@ Linked fragment stage: 157: 6(int) Constant 5 158: 143(ivec2) ConstantComposite 157 157 159: 20(int) Constant 2 - 183: TypeImage 10(float) 2D multi-sampled sampled format:Unknown - 184: TypeSampledImage 183 - 185: TypePointer UniformConstant 184 - 186(s2DMS): 185(ptr) Variable UniformConstant - 190: 6(int) Constant 4 - 199: 129(ivec3) ConstantComposite 190 190 190 - 220: TypeImage 6(int) 2D array sampled format:Unknown - 221: TypeSampledImage 220 - 222: TypePointer UniformConstant 221 - 223(is2DArray): 222(ptr) Variable UniformConstant - 226: 6(int) Constant 6 - 227: 143(ivec2) ConstantComposite 226 226 - 235: 6(int) Constant 7 - 236: 143(ivec2) ConstantComposite 235 235 - 253: TypeImage 10(float) Cube depth sampled format:Unknown - 254: TypeSampledImage 253 - 255: TypePointer UniformConstant 254 -256(sCubeShadow): 255(ptr) Variable UniformConstant - 286: TypeImage 10(float) Rect depth sampled format:Unknown - 287: TypeSampledImage 286 - 288: TypePointer UniformConstant 287 -289(s2DRectShadow): 288(ptr) Variable UniformConstant - 294: 20(int) Constant 3 - 306: 143(ivec2) ConstantComposite 130 130 - 335: 143(ivec2) ConstantComposite 190 190 - 357: 20(int) Constant 4 - 358: TypeArray 143(ivec2) 357 - 359: TypePointer Input 358 - 360(offsets): 359(ptr) Variable Input - 383: TypeImage 10(float) 2D nonsampled format:Rgba32f - 384: TypePointer UniformConstant 383 - 385(i2D): 384(ptr) Variable UniformConstant - 387: TypePointer Input 143(ivec2) - 388(ic2): 387(ptr) Variable Input - 395: TypeImage 6(int) 3D nonsampled format:Rgba32i - 396: TypePointer UniformConstant 395 - 397(ii3D): 396(ptr) Variable UniformConstant - 399: TypePointer Input 129(ivec3) - 400(ic3): 399(ptr) Variable Input - 407: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f - 408: TypePointer UniformConstant 407 - 409(i2DMS): 408(ptr) Variable UniformConstant - 417: TypePointer Output 11(fvec4) - 418(outColor): 417(ptr) Variable Output - 421: TypeBool + 185: TypeImage 10(float) 2D multi-sampled sampled format:Unknown + 186: TypeSampledImage 185 + 187: TypePointer UniformConstant 186 + 188(s2DMS): 187(ptr) Variable UniformConstant + 192: 6(int) Constant 4 + 202: 129(ivec3) ConstantComposite 192 192 192 + 225: TypeImage 6(int) 2D array sampled format:Unknown + 226: TypeSampledImage 225 + 227: TypePointer UniformConstant 226 + 228(is2DArray): 227(ptr) Variable UniformConstant + 231: 6(int) Constant 6 + 232: 143(ivec2) ConstantComposite 231 231 + 240: 6(int) Constant 7 + 241: 143(ivec2) ConstantComposite 240 240 + 258: TypeImage 10(float) Cube depth sampled format:Unknown + 259: TypeSampledImage 258 + 260: TypePointer UniformConstant 259 +261(sCubeShadow): 260(ptr) Variable UniformConstant + 291: TypeImage 10(float) Rect depth sampled format:Unknown + 292: TypeSampledImage 291 + 293: TypePointer UniformConstant 292 +294(s2DRectShadow): 293(ptr) Variable UniformConstant + 299: 20(int) Constant 3 + 311: 143(ivec2) ConstantComposite 130 130 + 340: 143(ivec2) ConstantComposite 192 192 + 362: 20(int) Constant 4 + 363: TypeArray 143(ivec2) 362 + 364: TypePointer Input 363 + 365(offsets): 364(ptr) Variable Input + 388: TypeImage 10(float) 2D nonsampled format:Rgba32f + 389: TypePointer UniformConstant 388 + 390(i2D): 389(ptr) Variable UniformConstant + 392: TypePointer Input 143(ivec2) + 393(ic2): 392(ptr) Variable Input + 400: TypeImage 6(int) 3D nonsampled format:Rgba32i + 401: TypePointer UniformConstant 400 + 402(ii3D): 401(ptr) Variable UniformConstant + 404: TypePointer Input 129(ivec3) + 405(ic3): 404(ptr) Variable Input + 412: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f + 413: TypePointer UniformConstant 412 + 414(i2DMS): 413(ptr) Variable UniformConstant + 422: TypePointer Output 11(fvec4) + 423(outColor): 422(ptr) Variable Output + 426: TypeBool 4(main): 2 Function None 3 5: Label 8(resident): 7(ptr) Variable Function 13(texel): 12(ptr) Variable Function 18(itexel): 17(ptr) Variable Function 23(utexel): 22(ptr) Variable Function - 419: 12(ptr) Variable Function + 424: 12(ptr) Variable Function Store 8(resident) 9 Store 13(texel) 15 Store 18(itexel) 19 @@ -308,281 +308,286 @@ Linked fragment stage: 167: 27 Load 29(s2D) 168: 31(fvec2) Load 33(c2) 169: 143(ivec2) ConvertFToS 168 - 170: 35(ResType) ImageSparseFetch 167 169 Lod 130 - 171: 11(fvec4) CompositeExtract 170 1 - Store 13(texel) 171 - 172: 6(int) CompositeExtract 170 0 - 173: 6(int) Load 8(resident) - 174: 6(int) BitwiseOr 173 172 - Store 8(resident) 174 - 175: 138 Load 140(us2DRect) - 176: 31(fvec2) Load 33(c2) - 177: 143(ivec2) ConvertFToS 176 - 178:111(ResType) ImageSparseFetch 175 177 - 179: 21(ivec4) CompositeExtract 178 1 - Store 23(utexel) 179 - 180: 6(int) CompositeExtract 178 0 - 181: 6(int) Load 8(resident) - 182: 6(int) BitwiseOr 181 180 - Store 8(resident) 182 - 187: 184 Load 186(s2DMS) - 188: 31(fvec2) Load 33(c2) - 189: 143(ivec2) ConvertFToS 188 - 191: 35(ResType) ImageSparseFetch 187 189 Sample 190 - 192: 11(fvec4) CompositeExtract 191 1 - Store 13(texel) 192 - 193: 6(int) CompositeExtract 191 0 - 194: 6(int) Load 8(resident) - 195: 6(int) BitwiseOr 194 193 - Store 8(resident) 195 - 196: 42 Load 44(s3D) - 197: 46(fvec3) Load 48(c3) - 198: 129(ivec3) ConvertFToS 197 - 200: 35(ResType) ImageSparseFetch 196 198 Lod ConstOffset 130 199 - 201: 11(fvec4) CompositeExtract 200 1 - Store 13(texel) 201 - 202: 6(int) CompositeExtract 200 0 - 203: 6(int) Load 8(resident) - 204: 6(int) BitwiseOr 203 202 - Store 8(resident) 204 - 205: 138 Load 140(us2DRect) - 206: 31(fvec2) Load 33(c2) - 207: 143(ivec2) ConvertFToS 206 - 208:111(ResType) ImageSparseFetch 205 207 ConstOffset 145 - 209: 21(ivec4) CompositeExtract 208 1 - Store 23(utexel) 209 - 210: 6(int) CompositeExtract 208 0 - 211: 6(int) Load 8(resident) - 212: 6(int) BitwiseOr 211 210 - Store 8(resident) 212 - 213: 27 Load 29(s2D) - 214: 31(fvec2) Load 33(c2) - 215: 35(ResType) ImageSparseSampleExplicitLod 213 214 Lod ConstOffset 50 158 - 216: 11(fvec4) CompositeExtract 215 1 - Store 13(texel) 216 - 217: 6(int) CompositeExtract 215 0 - 218: 6(int) Load 8(resident) - 219: 6(int) BitwiseOr 218 217 - Store 8(resident) 219 - 224: 221 Load 223(is2DArray) - 225: 46(fvec3) Load 48(c3) - 228: 62(ResType) ImageSparseSampleExplicitLod 224 225 Lod ConstOffset 50 227 - 229: 16(ivec4) CompositeExtract 228 1 - Store 18(itexel) 229 - 230: 6(int) CompositeExtract 228 0 - 231: 6(int) Load 8(resident) - 232: 6(int) BitwiseOr 231 230 - Store 8(resident) 232 - 233: 69 Load 71(s2DShadow) - 234: 46(fvec3) Load 48(c3) - 237: 74(ptr) AccessChain 13(texel) 159 - 238: 10(float) CompositeExtract 234 2 - 239: 77(ResType) ImageSparseSampleDrefExplicitLod 233 234 238 Lod ConstOffset 50 236 - 240: 10(float) CompositeExtract 239 1 - Store 237 240 - 241: 6(int) CompositeExtract 239 0 - 242: 6(int) Load 8(resident) - 243: 6(int) BitwiseOr 242 241 - Store 8(resident) 243 - 244: 42 Load 44(s3D) - 245: 46(fvec3) Load 48(c3) - 246: 46(fvec3) Load 48(c3) - 247: 46(fvec3) Load 48(c3) - 248: 35(ResType) ImageSparseSampleExplicitLod 244 245 Grad 246 247 - 249: 11(fvec4) CompositeExtract 248 1 - Store 13(texel) 249 - 250: 6(int) CompositeExtract 248 0 - 251: 6(int) Load 8(resident) - 252: 6(int) BitwiseOr 251 250 - Store 8(resident) 252 - 257: 254 Load 256(sCubeShadow) - 258: 11(fvec4) Load 89(c4) - 259: 46(fvec3) Load 48(c3) - 260: 46(fvec3) Load 48(c3) - 261: 74(ptr) AccessChain 13(texel) 119 - 262: 10(float) CompositeExtract 258 3 - 263: 77(ResType) ImageSparseSampleDrefExplicitLod 257 258 262 Grad 259 260 - 264: 10(float) CompositeExtract 263 1 - Store 261 264 - 265: 6(int) CompositeExtract 263 0 - 266: 6(int) Load 8(resident) - 267: 6(int) BitwiseOr 266 265 - Store 8(resident) 267 - 268: 106 Load 108(usCubeArray) - 269: 11(fvec4) Load 89(c4) - 270: 46(fvec3) Load 48(c3) - 271: 46(fvec3) Load 48(c3) - 272:111(ResType) ImageSparseSampleExplicitLod 268 269 Grad 270 271 - 273: 21(ivec4) CompositeExtract 272 1 - Store 23(utexel) 273 - 274: 6(int) CompositeExtract 272 0 - 275: 6(int) Load 8(resident) - 276: 6(int) BitwiseOr 275 274 - Store 8(resident) 276 - 277: 27 Load 29(s2D) - 278: 31(fvec2) Load 33(c2) - 279: 31(fvec2) Load 33(c2) - 280: 31(fvec2) Load 33(c2) - 281: 35(ResType) ImageSparseSampleExplicitLod 277 278 Grad ConstOffset 279 280 158 - 282: 11(fvec4) CompositeExtract 281 1 - Store 13(texel) 282 - 283: 6(int) CompositeExtract 281 0 - 284: 6(int) Load 8(resident) - 285: 6(int) BitwiseOr 284 283 - Store 8(resident) 285 - 290: 287 Load 289(s2DRectShadow) - 291: 46(fvec3) Load 48(c3) - 292: 31(fvec2) Load 33(c2) - 293: 31(fvec2) Load 33(c2) - 295: 74(ptr) AccessChain 13(texel) 294 - 296: 10(float) CompositeExtract 291 2 - 297: 77(ResType) ImageSparseSampleDrefExplicitLod 290 291 296 Grad ConstOffset 292 293 227 - 298: 10(float) CompositeExtract 297 1 - Store 295 298 - 299: 6(int) CompositeExtract 297 0 - 300: 6(int) Load 8(resident) - 301: 6(int) BitwiseOr 300 299 - Store 8(resident) 301 - 302: 221 Load 223(is2DArray) - 303: 46(fvec3) Load 48(c3) - 304: 31(fvec2) Load 33(c2) - 305: 31(fvec2) Load 33(c2) - 307: 62(ResType) ImageSparseSampleExplicitLod 302 303 Grad ConstOffset 304 305 306 - 308: 16(ivec4) CompositeExtract 307 1 - Store 18(itexel) 308 - 309: 6(int) CompositeExtract 307 0 - 310: 6(int) Load 8(resident) - 311: 6(int) BitwiseOr 310 309 - Store 8(resident) 311 - 312: 27 Load 29(s2D) - 313: 31(fvec2) Load 33(c2) - 314: 35(ResType) ImageSparseGather 312 313 9 - 315: 11(fvec4) CompositeExtract 314 1 - Store 13(texel) 315 - 316: 6(int) CompositeExtract 314 0 - 317: 6(int) Load 8(resident) - 318: 6(int) BitwiseOr 317 316 - Store 8(resident) 318 - 319: 221 Load 223(is2DArray) - 320: 46(fvec3) Load 48(c3) - 321: 62(ResType) ImageSparseGather 319 320 130 - 322: 16(ivec4) CompositeExtract 321 1 - Store 18(itexel) 322 - 323: 6(int) CompositeExtract 321 0 - 324: 6(int) Load 8(resident) - 325: 6(int) BitwiseOr 324 323 - Store 8(resident) 325 - 326: 152 Load 154(s2DArrayShadow) - 327: 46(fvec3) Load 48(c3) - 328: 35(ResType) ImageSparseDrefGather 326 327 50 - 329: 11(fvec4) CompositeExtract 328 1 - Store 13(texel) 329 - 330: 6(int) CompositeExtract 328 0 - 331: 6(int) Load 8(resident) - 332: 6(int) BitwiseOr 331 330 - Store 8(resident) 332 - 333: 27 Load 29(s2D) - 334: 31(fvec2) Load 33(c2) - 336: 35(ResType) ImageSparseGather 333 334 9 ConstOffset 335 - 337: 11(fvec4) CompositeExtract 336 1 - Store 13(texel) 337 - 338: 6(int) CompositeExtract 336 0 - 339: 6(int) Load 8(resident) - 340: 6(int) BitwiseOr 339 338 - Store 8(resident) 340 - 341: 221 Load 223(is2DArray) - 342: 46(fvec3) Load 48(c3) - 343: 62(ResType) ImageSparseGather 341 342 130 ConstOffset 158 - 344: 16(ivec4) CompositeExtract 343 1 - Store 18(itexel) 344 - 345: 6(int) CompositeExtract 343 0 - 346: 6(int) Load 8(resident) - 347: 6(int) BitwiseOr 346 345 - Store 8(resident) 347 - 348: 287 Load 289(s2DRectShadow) - 349: 31(fvec2) Load 33(c2) - 350: 35(ResType) ImageSparseDrefGather 348 349 50 ConstOffset 236 - 351: 11(fvec4) CompositeExtract 350 1 - Store 13(texel) 351 - 352: 6(int) CompositeExtract 350 0 - 353: 6(int) Load 8(resident) - 354: 6(int) BitwiseOr 353 352 - Store 8(resident) 354 - 355: 27 Load 29(s2D) - 356: 31(fvec2) Load 33(c2) - 361: 358 Load 360(offsets) - 362: 35(ResType) ImageSparseGather 355 356 9 ConstOffsets 361 - 363: 11(fvec4) CompositeExtract 362 1 - Store 13(texel) 363 - 364: 6(int) CompositeExtract 362 0 - 365: 6(int) Load 8(resident) - 366: 6(int) BitwiseOr 365 364 - Store 8(resident) 366 - 367: 221 Load 223(is2DArray) - 368: 46(fvec3) Load 48(c3) - 369: 358 Load 360(offsets) - 370: 62(ResType) ImageSparseGather 367 368 130 ConstOffsets 369 - 371: 16(ivec4) CompositeExtract 370 1 - Store 18(itexel) 371 - 372: 6(int) CompositeExtract 370 0 - 373: 6(int) Load 8(resident) - 374: 6(int) BitwiseOr 373 372 - Store 8(resident) 374 - 375: 287 Load 289(s2DRectShadow) - 376: 31(fvec2) Load 33(c2) - 377: 358 Load 360(offsets) - 378: 35(ResType) ImageSparseDrefGather 375 376 50 ConstOffsets 377 - 379: 11(fvec4) CompositeExtract 378 1 - Store 13(texel) 379 - 380: 6(int) CompositeExtract 378 0 - 381: 6(int) Load 8(resident) - 382: 6(int) BitwiseOr 381 380 - Store 8(resident) 382 - 386: 383 Load 385(i2D) - 389: 143(ivec2) Load 388(ic2) - 390: 35(ResType) ImageSparseRead 386 389 - 391: 11(fvec4) CompositeExtract 390 1 - Store 13(texel) 391 - 392: 6(int) CompositeExtract 390 0 - 393: 6(int) Load 8(resident) - 394: 6(int) BitwiseOr 393 392 - Store 8(resident) 394 - 398: 395 Load 397(ii3D) - 401: 129(ivec3) Load 400(ic3) - 402: 62(ResType) ImageSparseRead 398 401 - 403: 16(ivec4) CompositeExtract 402 1 - Store 18(itexel) 403 - 404: 6(int) CompositeExtract 402 0 - 405: 6(int) Load 8(resident) - 406: 6(int) BitwiseOr 405 404 - Store 8(resident) 406 - 410: 407 Load 409(i2DMS) - 411: 143(ivec2) Load 388(ic2) - 412: 35(ResType) ImageSparseRead 410 411 Sample 144 - 413: 11(fvec4) CompositeExtract 412 1 - Store 13(texel) 413 - 414: 6(int) CompositeExtract 412 0 - 415: 6(int) Load 8(resident) - 416: 6(int) BitwiseOr 415 414 - Store 8(resident) 416 + 170: 26 Image 167 + 171: 35(ResType) ImageSparseFetch 170 169 Lod 130 + 172: 11(fvec4) CompositeExtract 171 1 + Store 13(texel) 172 + 173: 6(int) CompositeExtract 171 0 + 174: 6(int) Load 8(resident) + 175: 6(int) BitwiseOr 174 173 + Store 8(resident) 175 + 176: 138 Load 140(us2DRect) + 177: 31(fvec2) Load 33(c2) + 178: 143(ivec2) ConvertFToS 177 + 179: 137 Image 176 + 180:111(ResType) ImageSparseFetch 179 178 + 181: 21(ivec4) CompositeExtract 180 1 + Store 23(utexel) 181 + 182: 6(int) CompositeExtract 180 0 + 183: 6(int) Load 8(resident) + 184: 6(int) BitwiseOr 183 182 + Store 8(resident) 184 + 189: 186 Load 188(s2DMS) + 190: 31(fvec2) Load 33(c2) + 191: 143(ivec2) ConvertFToS 190 + 193: 185 Image 189 + 194: 35(ResType) ImageSparseFetch 193 191 Sample 192 + 195: 11(fvec4) CompositeExtract 194 1 + Store 13(texel) 195 + 196: 6(int) CompositeExtract 194 0 + 197: 6(int) Load 8(resident) + 198: 6(int) BitwiseOr 197 196 + Store 8(resident) 198 + 199: 42 Load 44(s3D) + 200: 46(fvec3) Load 48(c3) + 201: 129(ivec3) ConvertFToS 200 + 203: 41 Image 199 + 204: 35(ResType) ImageSparseFetch 203 201 Lod ConstOffset 130 202 + 205: 11(fvec4) CompositeExtract 204 1 + Store 13(texel) 205 + 206: 6(int) CompositeExtract 204 0 + 207: 6(int) Load 8(resident) + 208: 6(int) BitwiseOr 207 206 + Store 8(resident) 208 + 209: 138 Load 140(us2DRect) + 210: 31(fvec2) Load 33(c2) + 211: 143(ivec2) ConvertFToS 210 + 212: 137 Image 209 + 213:111(ResType) ImageSparseFetch 212 211 ConstOffset 145 + 214: 21(ivec4) CompositeExtract 213 1 + Store 23(utexel) 214 + 215: 6(int) CompositeExtract 213 0 + 216: 6(int) Load 8(resident) + 217: 6(int) BitwiseOr 216 215 + Store 8(resident) 217 + 218: 27 Load 29(s2D) + 219: 31(fvec2) Load 33(c2) + 220: 35(ResType) ImageSparseSampleExplicitLod 218 219 Lod ConstOffset 50 158 + 221: 11(fvec4) CompositeExtract 220 1 + Store 13(texel) 221 + 222: 6(int) CompositeExtract 220 0 + 223: 6(int) Load 8(resident) + 224: 6(int) BitwiseOr 223 222 + Store 8(resident) 224 + 229: 226 Load 228(is2DArray) + 230: 46(fvec3) Load 48(c3) + 233: 62(ResType) ImageSparseSampleExplicitLod 229 230 Lod ConstOffset 50 232 + 234: 16(ivec4) CompositeExtract 233 1 + Store 18(itexel) 234 + 235: 6(int) CompositeExtract 233 0 + 236: 6(int) Load 8(resident) + 237: 6(int) BitwiseOr 236 235 + Store 8(resident) 237 + 238: 69 Load 71(s2DShadow) + 239: 46(fvec3) Load 48(c3) + 242: 74(ptr) AccessChain 13(texel) 159 + 243: 10(float) CompositeExtract 239 2 + 244: 77(ResType) ImageSparseSampleDrefExplicitLod 238 239 243 Lod ConstOffset 50 241 + 245: 10(float) CompositeExtract 244 1 + Store 242 245 + 246: 6(int) CompositeExtract 244 0 + 247: 6(int) Load 8(resident) + 248: 6(int) BitwiseOr 247 246 + Store 8(resident) 248 + 249: 42 Load 44(s3D) + 250: 46(fvec3) Load 48(c3) + 251: 46(fvec3) Load 48(c3) + 252: 46(fvec3) Load 48(c3) + 253: 35(ResType) ImageSparseSampleExplicitLod 249 250 Grad 251 252 + 254: 11(fvec4) CompositeExtract 253 1 + Store 13(texel) 254 + 255: 6(int) CompositeExtract 253 0 + 256: 6(int) Load 8(resident) + 257: 6(int) BitwiseOr 256 255 + Store 8(resident) 257 + 262: 259 Load 261(sCubeShadow) + 263: 11(fvec4) Load 89(c4) + 264: 46(fvec3) Load 48(c3) + 265: 46(fvec3) Load 48(c3) + 266: 74(ptr) AccessChain 13(texel) 119 + 267: 10(float) CompositeExtract 263 3 + 268: 77(ResType) ImageSparseSampleDrefExplicitLod 262 263 267 Grad 264 265 + 269: 10(float) CompositeExtract 268 1 + Store 266 269 + 270: 6(int) CompositeExtract 268 0 + 271: 6(int) Load 8(resident) + 272: 6(int) BitwiseOr 271 270 + Store 8(resident) 272 + 273: 106 Load 108(usCubeArray) + 274: 11(fvec4) Load 89(c4) + 275: 46(fvec3) Load 48(c3) + 276: 46(fvec3) Load 48(c3) + 277:111(ResType) ImageSparseSampleExplicitLod 273 274 Grad 275 276 + 278: 21(ivec4) CompositeExtract 277 1 + Store 23(utexel) 278 + 279: 6(int) CompositeExtract 277 0 + 280: 6(int) Load 8(resident) + 281: 6(int) BitwiseOr 280 279 + Store 8(resident) 281 + 282: 27 Load 29(s2D) + 283: 31(fvec2) Load 33(c2) + 284: 31(fvec2) Load 33(c2) + 285: 31(fvec2) Load 33(c2) + 286: 35(ResType) ImageSparseSampleExplicitLod 282 283 Grad ConstOffset 284 285 158 + 287: 11(fvec4) CompositeExtract 286 1 + Store 13(texel) 287 + 288: 6(int) CompositeExtract 286 0 + 289: 6(int) Load 8(resident) + 290: 6(int) BitwiseOr 289 288 + Store 8(resident) 290 + 295: 292 Load 294(s2DRectShadow) + 296: 46(fvec3) Load 48(c3) + 297: 31(fvec2) Load 33(c2) + 298: 31(fvec2) Load 33(c2) + 300: 74(ptr) AccessChain 13(texel) 299 + 301: 10(float) CompositeExtract 296 2 + 302: 77(ResType) ImageSparseSampleDrefExplicitLod 295 296 301 Grad ConstOffset 297 298 232 + 303: 10(float) CompositeExtract 302 1 + Store 300 303 + 304: 6(int) CompositeExtract 302 0 + 305: 6(int) Load 8(resident) + 306: 6(int) BitwiseOr 305 304 + Store 8(resident) 306 + 307: 226 Load 228(is2DArray) + 308: 46(fvec3) Load 48(c3) + 309: 31(fvec2) Load 33(c2) + 310: 31(fvec2) Load 33(c2) + 312: 62(ResType) ImageSparseSampleExplicitLod 307 308 Grad ConstOffset 309 310 311 + 313: 16(ivec4) CompositeExtract 312 1 + Store 18(itexel) 313 + 314: 6(int) CompositeExtract 312 0 + 315: 6(int) Load 8(resident) + 316: 6(int) BitwiseOr 315 314 + Store 8(resident) 316 + 317: 27 Load 29(s2D) + 318: 31(fvec2) Load 33(c2) + 319: 35(ResType) ImageSparseGather 317 318 9 + 320: 11(fvec4) CompositeExtract 319 1 + Store 13(texel) 320 + 321: 6(int) CompositeExtract 319 0 + 322: 6(int) Load 8(resident) + 323: 6(int) BitwiseOr 322 321 + Store 8(resident) 323 + 324: 226 Load 228(is2DArray) + 325: 46(fvec3) Load 48(c3) + 326: 62(ResType) ImageSparseGather 324 325 130 + 327: 16(ivec4) CompositeExtract 326 1 + Store 18(itexel) 327 + 328: 6(int) CompositeExtract 326 0 + 329: 6(int) Load 8(resident) + 330: 6(int) BitwiseOr 329 328 + Store 8(resident) 330 + 331: 152 Load 154(s2DArrayShadow) + 332: 46(fvec3) Load 48(c3) + 333: 35(ResType) ImageSparseDrefGather 331 332 50 + 334: 11(fvec4) CompositeExtract 333 1 + Store 13(texel) 334 + 335: 6(int) CompositeExtract 333 0 + 336: 6(int) Load 8(resident) + 337: 6(int) BitwiseOr 336 335 + Store 8(resident) 337 + 338: 27 Load 29(s2D) + 339: 31(fvec2) Load 33(c2) + 341: 35(ResType) ImageSparseGather 338 339 9 ConstOffset 340 + 342: 11(fvec4) CompositeExtract 341 1 + Store 13(texel) 342 + 343: 6(int) CompositeExtract 341 0 + 344: 6(int) Load 8(resident) + 345: 6(int) BitwiseOr 344 343 + Store 8(resident) 345 + 346: 226 Load 228(is2DArray) + 347: 46(fvec3) Load 48(c3) + 348: 62(ResType) ImageSparseGather 346 347 130 ConstOffset 158 + 349: 16(ivec4) CompositeExtract 348 1 + Store 18(itexel) 349 + 350: 6(int) CompositeExtract 348 0 + 351: 6(int) Load 8(resident) + 352: 6(int) BitwiseOr 351 350 + Store 8(resident) 352 + 353: 292 Load 294(s2DRectShadow) + 354: 31(fvec2) Load 33(c2) + 355: 35(ResType) ImageSparseDrefGather 353 354 50 ConstOffset 241 + 356: 11(fvec4) CompositeExtract 355 1 + Store 13(texel) 356 + 357: 6(int) CompositeExtract 355 0 + 358: 6(int) Load 8(resident) + 359: 6(int) BitwiseOr 358 357 + Store 8(resident) 359 + 360: 27 Load 29(s2D) + 361: 31(fvec2) Load 33(c2) + 366: 363 Load 365(offsets) + 367: 35(ResType) ImageSparseGather 360 361 9 ConstOffsets 366 + 368: 11(fvec4) CompositeExtract 367 1 + Store 13(texel) 368 + 369: 6(int) CompositeExtract 367 0 + 370: 6(int) Load 8(resident) + 371: 6(int) BitwiseOr 370 369 + Store 8(resident) 371 + 372: 226 Load 228(is2DArray) + 373: 46(fvec3) Load 48(c3) + 374: 363 Load 365(offsets) + 375: 62(ResType) ImageSparseGather 372 373 130 ConstOffsets 374 + 376: 16(ivec4) CompositeExtract 375 1 + Store 18(itexel) 376 + 377: 6(int) CompositeExtract 375 0 + 378: 6(int) Load 8(resident) + 379: 6(int) BitwiseOr 378 377 + Store 8(resident) 379 + 380: 292 Load 294(s2DRectShadow) + 381: 31(fvec2) Load 33(c2) + 382: 363 Load 365(offsets) + 383: 35(ResType) ImageSparseDrefGather 380 381 50 ConstOffsets 382 + 384: 11(fvec4) CompositeExtract 383 1 + Store 13(texel) 384 + 385: 6(int) CompositeExtract 383 0 + 386: 6(int) Load 8(resident) + 387: 6(int) BitwiseOr 386 385 + Store 8(resident) 387 + 391: 388 Load 390(i2D) + 394: 143(ivec2) Load 393(ic2) + 395: 35(ResType) ImageSparseRead 391 394 + 396: 11(fvec4) CompositeExtract 395 1 + Store 13(texel) 396 + 397: 6(int) CompositeExtract 395 0 + 398: 6(int) Load 8(resident) + 399: 6(int) BitwiseOr 398 397 + Store 8(resident) 399 + 403: 400 Load 402(ii3D) + 406: 129(ivec3) Load 405(ic3) + 407: 62(ResType) ImageSparseRead 403 406 + 408: 16(ivec4) CompositeExtract 407 1 + Store 18(itexel) 408 + 409: 6(int) CompositeExtract 407 0 + 410: 6(int) Load 8(resident) + 411: 6(int) BitwiseOr 410 409 + Store 8(resident) 411 + 415: 412 Load 414(i2DMS) + 416: 143(ivec2) Load 393(ic2) + 417: 35(ResType) ImageSparseRead 415 416 Sample 144 + 418: 11(fvec4) CompositeExtract 417 1 + Store 13(texel) 418 + 419: 6(int) CompositeExtract 417 0 420: 6(int) Load 8(resident) - 422: 421(bool) ImageSparseTexelsResident 420 - SelectionMerge 424 None - BranchConditional 422 423 426 - 423: Label - 425: 11(fvec4) Load 13(texel) - Store 419 425 - Branch 424 - 426: Label - 427: 16(ivec4) Load 18(itexel) - 428: 11(fvec4) ConvertSToF 427 - 429: 21(ivec4) Load 23(utexel) - 430: 11(fvec4) ConvertUToF 429 - 431: 11(fvec4) FAdd 428 430 - Store 419 431 - Branch 424 - 424: Label - 432: 11(fvec4) Load 419 - Store 418(outColor) 432 + 421: 6(int) BitwiseOr 420 419 + Store 8(resident) 421 + 425: 6(int) Load 8(resident) + 427: 426(bool) ImageSparseTexelsResident 425 + SelectionMerge 429 None + BranchConditional 427 428 431 + 428: Label + 430: 11(fvec4) Load 13(texel) + Store 424 430 + Branch 429 + 431: Label + 432: 16(ivec4) Load 18(itexel) + 433: 11(fvec4) ConvertSToF 432 + 434: 21(ivec4) Load 23(utexel) + 435: 11(fvec4) ConvertUToF 434 + 436: 11(fvec4) FAdd 433 435 + Store 424 436 + Branch 429 + 429: Label + 437: 11(fvec4) Load 424 + Store 423(outColor) 437 Return FunctionEnd diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out index 4b972aca..93d680c7 100644 --- a/Test/baseResults/spv.subpass.frag.out +++ b/Test/baseResults/spv.subpass.frag.out @@ -7,13 +7,13 @@ Linked fragment stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 68 +// Id's are bound by 67 Capability Shader Capability InputAttachment 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 15 27 54 + EntryPoint Fragment 4 "main" 15 27 53 ExecutionMode 4 OriginUpperLeft Source GLSL 400 Name 4 "main" @@ -24,27 +24,27 @@ Linked fragment stage: Name 30 "sub" Name 35 "subMS" Name 42 "isub" - Name 46 "isubMS" - Name 54 "ucolor" - Name 57 "usub" - Name 62 "usubMS" + Name 45 "isubMS" + Name 53 "ucolor" + Name 56 "usub" + Name 61 "usubMS" Decorate 30(sub) DescriptorSet 0 Decorate 30(sub) InputAttachmentIndex 1 Decorate 35(subMS) DescriptorSet 0 Decorate 35(subMS) InputAttachmentIndex 2 Decorate 42(isub) DescriptorSet 0 Decorate 42(isub) InputAttachmentIndex 3 - Decorate 46(isubMS) DescriptorSet 0 - Decorate 46(isubMS) InputAttachmentIndex 4 - Decorate 57(usub) DescriptorSet 0 - Decorate 57(usub) InputAttachmentIndex 5 - Decorate 62(usubMS) DescriptorSet 0 - Decorate 62(usubMS) InputAttachmentIndex 6 + Decorate 45(isubMS) DescriptorSet 0 + Decorate 45(isubMS) InputAttachmentIndex 4 + Decorate 56(usub) DescriptorSet 0 + Decorate 56(usub) InputAttachmentIndex 5 + Decorate 61(usubMS) DescriptorSet 0 + Decorate 61(usubMS) InputAttachmentIndex 6 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 7: TypeImage 6(int) SubpassData multi-sampled nonsampled format:Unknown - 8: TypePointer Function 7 + 8: TypePointer UniformConstant 7 9: TypeFunction 2 8(ptr) 13: TypeVector 6(int) 4 14: TypePointer Output 13(ivec4) @@ -66,18 +66,17 @@ Linked fragment stage: 40: TypeImage 6(int) SubpassData nonsampled format:Unknown 41: TypePointer UniformConstant 40 42(isub): 41(ptr) Variable UniformConstant - 45: TypePointer UniformConstant 7 - 46(isubMS): 45(ptr) Variable UniformConstant - 51: TypeInt 32 0 - 52: TypeVector 51(int) 4 - 53: TypePointer Output 52(ivec4) - 54(ucolor): 53(ptr) Variable Output - 55: TypeImage 51(int) SubpassData nonsampled format:Unknown - 56: TypePointer UniformConstant 55 - 57(usub): 56(ptr) Variable UniformConstant - 60: TypeImage 51(int) SubpassData multi-sampled nonsampled format:Unknown - 61: TypePointer UniformConstant 60 - 62(usubMS): 61(ptr) Variable UniformConstant + 45(isubMS): 8(ptr) Variable UniformConstant + 50: TypeInt 32 0 + 51: TypeVector 50(int) 4 + 52: TypePointer Output 51(ivec4) + 53(ucolor): 52(ptr) Variable Output + 54: TypeImage 50(int) SubpassData nonsampled format:Unknown + 55: TypePointer UniformConstant 54 + 56(usub): 55(ptr) Variable UniformConstant + 59: TypeImage 50(int) SubpassData multi-sampled nonsampled format:Unknown + 60: TypePointer UniformConstant 59 + 61(usubMS): 60(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 31: 28 Load 30(sub) @@ -91,20 +90,20 @@ Linked fragment stage: 43: 40 Load 42(isub) 44: 13(ivec4) ImageRead 43 20 Store 15(icolor) 44 - 47: 7 Load 46(isubMS) - 48: 13(ivec4) ImageRead 47 20 Sample 17 - 49: 13(ivec4) Load 15(icolor) - 50: 13(ivec4) IAdd 49 48 - Store 15(icolor) 50 - 58: 55 Load 57(usub) - 59: 52(ivec4) ImageRead 58 20 - Store 54(ucolor) 59 - 63: 60 Load 62(usubMS) - 64: 52(ivec4) ImageRead 63 20 Sample 17 - 65: 52(ivec4) Load 54(ucolor) - 66: 52(ivec4) IAdd 65 64 - Store 54(ucolor) 66 - 67: 2 FunctionCall 11(foo(iIPM1;) 46(isubMS) + 46: 7 Load 45(isubMS) + 47: 13(ivec4) ImageRead 46 20 Sample 17 + 48: 13(ivec4) Load 15(icolor) + 49: 13(ivec4) IAdd 48 47 + Store 15(icolor) 49 + 57: 54 Load 56(usub) + 58: 51(ivec4) ImageRead 57 20 + Store 53(ucolor) 58 + 62: 59 Load 61(usubMS) + 63: 51(ivec4) ImageRead 62 20 Sample 17 + 64: 51(ivec4) Load 53(ucolor) + 65: 51(ivec4) IAdd 64 63 + Store 53(ucolor) 65 + 66: 2 FunctionCall 11(foo(iIPM1;) 45(isubMS) Return FunctionEnd 11(foo(iIPM1;): 2 Function None 9 diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out index df5fe2be..30f3f281 100755 --- a/Test/baseResults/spv.texture.frag.out +++ b/Test/baseResults/spv.texture.frag.out @@ -9,13 +9,13 @@ Linked fragment stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 290 +// Id's are bound by 305 Capability Shader Capability Sampled1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 47 276 279 282 288 289 + EntryPoint Fragment 4 "main" 47 291 294 297 303 304 ExecutionMode 4 OriginUpperLeft Source GLSL 140 Name 4 "main" @@ -29,26 +29,26 @@ Linked fragment stage: Name 26 "color" Name 32 "texSampler1D" Name 47 "coords2D" - Name 72 "texSampler2D" - Name 98 "texSampler3D" - Name 124 "texSamplerCube" - Name 139 "shadowSampler1D" - Name 158 "shadowSampler2D" - Name 207 "iCoords2D" - Name 212 "iLod" - Name 221 "gradX" - Name 224 "gradY" - Name 276 "gl_FragColor" - Name 279 "u" - Name 282 "blend" - Name 288 "scale" - Name 289 "t" + Name 76 "texSampler2D" + Name 104 "texSampler3D" + Name 130 "texSamplerCube" + Name 145 "shadowSampler1D" + Name 164 "shadowSampler2D" + Name 221 "iCoords2D" + Name 226 "iLod" + Name 236 "gradX" + Name 239 "gradY" + Name 291 "gl_FragColor" + Name 294 "u" + Name 297 "blend" + Name 303 "scale" + Name 304 "t" Decorate 32(texSampler1D) DescriptorSet 0 - Decorate 72(texSampler2D) DescriptorSet 0 - Decorate 98(texSampler3D) DescriptorSet 0 - Decorate 124(texSamplerCube) DescriptorSet 0 - Decorate 139(shadowSampler1D) DescriptorSet 0 - Decorate 158(shadowSampler2D) DescriptorSet 0 + Decorate 76(texSampler2D) DescriptorSet 0 + Decorate 104(texSampler3D) DescriptorSet 0 + Decorate 130(texSamplerCube) DescriptorSet 0 + Decorate 145(shadowSampler1D) DescriptorSet 0 + Decorate 164(shadowSampler2D) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -73,46 +73,46 @@ Linked fragment stage: 45: TypeVector 6(float) 2 46: TypePointer Input 45(fvec2) 47(coords2D): 46(ptr) Variable Input - 69: TypeImage 6(float) 2D sampled format:Unknown - 70: TypeSampledImage 69 - 71: TypePointer UniformConstant 70 -72(texSampler2D): 71(ptr) Variable UniformConstant - 95: TypeImage 6(float) 3D sampled format:Unknown - 96: TypeSampledImage 95 - 97: TypePointer UniformConstant 96 -98(texSampler3D): 97(ptr) Variable UniformConstant - 121: TypeImage 6(float) Cube sampled format:Unknown - 122: TypeSampledImage 121 - 123: TypePointer UniformConstant 122 -124(texSamplerCube): 123(ptr) Variable UniformConstant - 136: TypeImage 6(float) 1D depth sampled format:Unknown - 137: TypeSampledImage 136 - 138: TypePointer UniformConstant 137 -139(shadowSampler1D): 138(ptr) Variable UniformConstant - 155: TypeImage 6(float) 2D depth sampled format:Unknown - 156: TypeSampledImage 155 - 157: TypePointer UniformConstant 156 -158(shadowSampler2D): 157(ptr) Variable UniformConstant - 204: TypeInt 32 1 - 205: TypeVector 204(int) 2 - 206: TypePointer Function 205(ivec2) - 208: 204(int) Constant 0 - 209: 204(int) Constant 5 - 210: 205(ivec2) ConstantComposite 208 209 - 211: TypePointer Function 204(int) - 213: 204(int) Constant 1 - 220: TypePointer Function 45(fvec2) - 249: 204(int) Constant 3 - 250: 204(int) Constant 4294967289 - 251: 205(ivec2) ConstantComposite 249 250 - 275: TypePointer Output 22(fvec4) -276(gl_FragColor): 275(ptr) Variable Output - 278: TypePointer Input 22(fvec4) - 279(u): 278(ptr) Variable Input - 281: TypePointer Input 6(float) - 282(blend): 281(ptr) Variable Input - 288(scale): 46(ptr) Variable Input - 289(t): 46(ptr) Variable Input + 73: TypeImage 6(float) 2D sampled format:Unknown + 74: TypeSampledImage 73 + 75: TypePointer UniformConstant 74 +76(texSampler2D): 75(ptr) Variable UniformConstant + 101: TypeImage 6(float) 3D sampled format:Unknown + 102: TypeSampledImage 101 + 103: TypePointer UniformConstant 102 +104(texSampler3D): 103(ptr) Variable UniformConstant + 127: TypeImage 6(float) Cube sampled format:Unknown + 128: TypeSampledImage 127 + 129: TypePointer UniformConstant 128 +130(texSamplerCube): 129(ptr) Variable UniformConstant + 142: TypeImage 6(float) 1D depth sampled format:Unknown + 143: TypeSampledImage 142 + 144: TypePointer UniformConstant 143 +145(shadowSampler1D): 144(ptr) Variable UniformConstant + 161: TypeImage 6(float) 2D depth sampled format:Unknown + 162: TypeSampledImage 161 + 163: TypePointer UniformConstant 162 +164(shadowSampler2D): 163(ptr) Variable UniformConstant + 218: TypeInt 32 1 + 219: TypeVector 218(int) 2 + 220: TypePointer Function 219(ivec2) + 222: 218(int) Constant 0 + 223: 218(int) Constant 5 + 224: 219(ivec2) ConstantComposite 222 223 + 225: TypePointer Function 218(int) + 227: 218(int) Constant 1 + 235: TypePointer Function 45(fvec2) + 264: 218(int) Constant 3 + 265: 218(int) Constant 4294967289 + 266: 219(ivec2) ConstantComposite 264 265 + 290: TypePointer Output 22(fvec4) +291(gl_FragColor): 290(ptr) Variable Output + 293: TypePointer Input 22(fvec4) + 294(u): 293(ptr) Variable Input + 296: TypePointer Input 6(float) + 297(blend): 296(ptr) Variable Input + 303(scale): 46(ptr) Variable Input + 304(t): 46(ptr) Variable Input 4(main): 2 Function None 3 5: Label 8(blendscale): 7(ptr) Variable Function @@ -123,10 +123,10 @@ Linked fragment stage: 18(coords3D): 17(ptr) Variable Function 24(coords4D): 23(ptr) Variable Function 26(color): 23(ptr) Variable Function - 207(iCoords2D): 206(ptr) Variable Function - 212(iLod): 211(ptr) Variable Function - 221(gradX): 220(ptr) Variable Function - 224(gradY): 220(ptr) Variable Function + 221(iCoords2D): 220(ptr) Variable Function + 226(iLod): 225(ptr) Variable Function + 236(gradX): 235(ptr) Variable Function + 239(gradY): 235(ptr) Variable Function Store 8(blendscale) 9 Store 10(bias) 11 Store 12(lod) 13 @@ -156,229 +156,244 @@ Linked fragment stage: Store 26(color) 51 52: 30 Load 32(texSampler1D) 53: 22(fvec4) Load 24(coords4D) - 54: 22(fvec4) ImageSampleProjImplicitLod 52 53 - 55: 22(fvec4) Load 26(color) - 56: 22(fvec4) FAdd 55 54 - Store 26(color) 56 - 57: 30 Load 32(texSampler1D) - 58: 45(fvec2) Load 47(coords2D) - 59: 6(float) Load 10(bias) - 60: 22(fvec4) ImageSampleProjImplicitLod 57 58 Bias 59 - 61: 22(fvec4) Load 26(color) - 62: 22(fvec4) FAdd 61 60 - Store 26(color) 62 - 63: 30 Load 32(texSampler1D) - 64: 22(fvec4) Load 24(coords4D) - 65: 6(float) Load 10(bias) - 66: 22(fvec4) ImageSampleProjImplicitLod 63 64 Bias 65 - 67: 22(fvec4) Load 26(color) - 68: 22(fvec4) FAdd 67 66 - Store 26(color) 68 - 73: 70 Load 72(texSampler2D) - 74: 45(fvec2) Load 47(coords2D) - 75: 22(fvec4) ImageSampleImplicitLod 73 74 - 76: 22(fvec4) Load 26(color) - 77: 22(fvec4) FAdd 76 75 - Store 26(color) 77 - 78: 70 Load 72(texSampler2D) - 79: 45(fvec2) Load 47(coords2D) - 80: 6(float) Load 10(bias) - 81: 22(fvec4) ImageSampleImplicitLod 78 79 Bias 80 - 82: 22(fvec4) Load 26(color) - 83: 22(fvec4) FAdd 82 81 - Store 26(color) 83 - 84: 70 Load 72(texSampler2D) - 85: 16(fvec3) Load 18(coords3D) - 86: 22(fvec4) ImageSampleProjImplicitLod 84 85 - 87: 22(fvec4) Load 26(color) - 88: 22(fvec4) FAdd 87 86 - Store 26(color) 88 - 89: 70 Load 72(texSampler2D) - 90: 22(fvec4) Load 24(coords4D) - 91: 6(float) Load 10(bias) - 92: 22(fvec4) ImageSampleProjImplicitLod 89 90 Bias 91 - 93: 22(fvec4) Load 26(color) - 94: 22(fvec4) FAdd 93 92 - Store 26(color) 94 - 99: 96 Load 98(texSampler3D) - 100: 16(fvec3) Load 18(coords3D) - 101: 22(fvec4) ImageSampleImplicitLod 99 100 - 102: 22(fvec4) Load 26(color) - 103: 22(fvec4) FAdd 102 101 - Store 26(color) 103 - 104: 96 Load 98(texSampler3D) - 105: 16(fvec3) Load 18(coords3D) - 106: 6(float) Load 10(bias) - 107: 22(fvec4) ImageSampleImplicitLod 104 105 Bias 106 + 54: 6(float) CompositeExtract 53 3 + 55: 22(fvec4) CompositeInsert 54 53 1 + 56: 22(fvec4) ImageSampleProjImplicitLod 52 55 + 57: 22(fvec4) Load 26(color) + 58: 22(fvec4) FAdd 57 56 + Store 26(color) 58 + 59: 30 Load 32(texSampler1D) + 60: 45(fvec2) Load 47(coords2D) + 61: 6(float) Load 10(bias) + 62: 22(fvec4) ImageSampleProjImplicitLod 59 60 Bias 61 + 63: 22(fvec4) Load 26(color) + 64: 22(fvec4) FAdd 63 62 + Store 26(color) 64 + 65: 30 Load 32(texSampler1D) + 66: 22(fvec4) Load 24(coords4D) + 67: 6(float) Load 10(bias) + 68: 6(float) CompositeExtract 66 3 + 69: 22(fvec4) CompositeInsert 68 66 1 + 70: 22(fvec4) ImageSampleProjImplicitLod 65 69 Bias 67 + 71: 22(fvec4) Load 26(color) + 72: 22(fvec4) FAdd 71 70 + Store 26(color) 72 + 77: 74 Load 76(texSampler2D) + 78: 45(fvec2) Load 47(coords2D) + 79: 22(fvec4) ImageSampleImplicitLod 77 78 + 80: 22(fvec4) Load 26(color) + 81: 22(fvec4) FAdd 80 79 + Store 26(color) 81 + 82: 74 Load 76(texSampler2D) + 83: 45(fvec2) Load 47(coords2D) + 84: 6(float) Load 10(bias) + 85: 22(fvec4) ImageSampleImplicitLod 82 83 Bias 84 + 86: 22(fvec4) Load 26(color) + 87: 22(fvec4) FAdd 86 85 + Store 26(color) 87 + 88: 74 Load 76(texSampler2D) + 89: 16(fvec3) Load 18(coords3D) + 90: 22(fvec4) ImageSampleProjImplicitLod 88 89 + 91: 22(fvec4) Load 26(color) + 92: 22(fvec4) FAdd 91 90 + Store 26(color) 92 + 93: 74 Load 76(texSampler2D) + 94: 22(fvec4) Load 24(coords4D) + 95: 6(float) Load 10(bias) + 96: 6(float) CompositeExtract 94 3 + 97: 22(fvec4) CompositeInsert 96 94 2 + 98: 22(fvec4) ImageSampleProjImplicitLod 93 97 Bias 95 + 99: 22(fvec4) Load 26(color) + 100: 22(fvec4) FAdd 99 98 + Store 26(color) 100 + 105: 102 Load 104(texSampler3D) + 106: 16(fvec3) Load 18(coords3D) + 107: 22(fvec4) ImageSampleImplicitLod 105 106 108: 22(fvec4) Load 26(color) 109: 22(fvec4) FAdd 108 107 Store 26(color) 109 - 110: 96 Load 98(texSampler3D) - 111: 22(fvec4) Load 24(coords4D) - 112: 22(fvec4) ImageSampleProjImplicitLod 110 111 - 113: 22(fvec4) Load 26(color) - 114: 22(fvec4) FAdd 113 112 - Store 26(color) 114 - 115: 96 Load 98(texSampler3D) - 116: 22(fvec4) Load 24(coords4D) - 117: 6(float) Load 10(bias) - 118: 22(fvec4) ImageSampleProjImplicitLod 115 116 Bias 117 + 110: 102 Load 104(texSampler3D) + 111: 16(fvec3) Load 18(coords3D) + 112: 6(float) Load 10(bias) + 113: 22(fvec4) ImageSampleImplicitLod 110 111 Bias 112 + 114: 22(fvec4) Load 26(color) + 115: 22(fvec4) FAdd 114 113 + Store 26(color) 115 + 116: 102 Load 104(texSampler3D) + 117: 22(fvec4) Load 24(coords4D) + 118: 22(fvec4) ImageSampleProjImplicitLod 116 117 119: 22(fvec4) Load 26(color) 120: 22(fvec4) FAdd 119 118 Store 26(color) 120 - 125: 122 Load 124(texSamplerCube) - 126: 16(fvec3) Load 18(coords3D) - 127: 22(fvec4) ImageSampleImplicitLod 125 126 - 128: 22(fvec4) Load 26(color) - 129: 22(fvec4) FAdd 128 127 - Store 26(color) 129 - 130: 122 Load 124(texSamplerCube) - 131: 16(fvec3) Load 18(coords3D) - 132: 6(float) Load 10(bias) - 133: 22(fvec4) ImageSampleImplicitLod 130 131 Bias 132 + 121: 102 Load 104(texSampler3D) + 122: 22(fvec4) Load 24(coords4D) + 123: 6(float) Load 10(bias) + 124: 22(fvec4) ImageSampleProjImplicitLod 121 122 Bias 123 + 125: 22(fvec4) Load 26(color) + 126: 22(fvec4) FAdd 125 124 + Store 26(color) 126 + 131: 128 Load 130(texSamplerCube) + 132: 16(fvec3) Load 18(coords3D) + 133: 22(fvec4) ImageSampleImplicitLod 131 132 134: 22(fvec4) Load 26(color) 135: 22(fvec4) FAdd 134 133 Store 26(color) 135 - 140: 137 Load 139(shadowSampler1D) - 141: 16(fvec3) Load 18(coords3D) - 142: 6(float) CompositeExtract 141 2 - 143: 6(float) ImageSampleDrefImplicitLod 140 141 142 - 144: 22(fvec4) Load 26(color) - 145: 22(fvec4) CompositeConstruct 143 143 143 143 - 146: 22(fvec4) FAdd 144 145 - Store 26(color) 146 - 147: 137 Load 139(shadowSampler1D) - 148: 16(fvec3) Load 18(coords3D) - 149: 6(float) Load 10(bias) - 150: 6(float) CompositeExtract 148 2 - 151: 6(float) ImageSampleDrefImplicitLod 147 148 150 Bias 149 - 152: 22(fvec4) Load 26(color) - 153: 22(fvec4) CompositeConstruct 151 151 151 151 - 154: 22(fvec4) FAdd 152 153 - Store 26(color) 154 - 159: 156 Load 158(shadowSampler2D) - 160: 16(fvec3) Load 18(coords3D) - 161: 6(float) CompositeExtract 160 2 - 162: 6(float) ImageSampleDrefImplicitLod 159 160 161 - 163: 22(fvec4) Load 26(color) - 164: 22(fvec4) CompositeConstruct 162 162 162 162 - 165: 22(fvec4) FAdd 163 164 - Store 26(color) 165 - 166: 156 Load 158(shadowSampler2D) - 167: 16(fvec3) Load 18(coords3D) - 168: 6(float) Load 10(bias) - 169: 6(float) CompositeExtract 167 2 - 170: 6(float) ImageSampleDrefImplicitLod 166 167 169 Bias 168 - 171: 22(fvec4) Load 26(color) - 172: 22(fvec4) CompositeConstruct 170 170 170 170 - 173: 22(fvec4) FAdd 171 172 - Store 26(color) 173 - 174: 137 Load 139(shadowSampler1D) - 175: 22(fvec4) Load 24(coords4D) - 176: 6(float) CompositeExtract 175 2 - 177: 6(float) ImageSampleProjDrefImplicitLod 174 175 176 - 178: 22(fvec4) Load 26(color) - 179: 22(fvec4) CompositeConstruct 177 177 177 177 - 180: 22(fvec4) FAdd 178 179 - Store 26(color) 180 - 181: 137 Load 139(shadowSampler1D) - 182: 22(fvec4) Load 24(coords4D) - 183: 6(float) Load 10(bias) - 184: 6(float) CompositeExtract 182 2 - 185: 6(float) ImageSampleProjDrefImplicitLod 181 182 184 Bias 183 + 136: 128 Load 130(texSamplerCube) + 137: 16(fvec3) Load 18(coords3D) + 138: 6(float) Load 10(bias) + 139: 22(fvec4) ImageSampleImplicitLod 136 137 Bias 138 + 140: 22(fvec4) Load 26(color) + 141: 22(fvec4) FAdd 140 139 + Store 26(color) 141 + 146: 143 Load 145(shadowSampler1D) + 147: 16(fvec3) Load 18(coords3D) + 148: 6(float) CompositeExtract 147 2 + 149: 6(float) ImageSampleDrefImplicitLod 146 147 148 + 150: 22(fvec4) Load 26(color) + 151: 22(fvec4) CompositeConstruct 149 149 149 149 + 152: 22(fvec4) FAdd 150 151 + Store 26(color) 152 + 153: 143 Load 145(shadowSampler1D) + 154: 16(fvec3) Load 18(coords3D) + 155: 6(float) Load 10(bias) + 156: 6(float) CompositeExtract 154 2 + 157: 6(float) ImageSampleDrefImplicitLod 153 154 156 Bias 155 + 158: 22(fvec4) Load 26(color) + 159: 22(fvec4) CompositeConstruct 157 157 157 157 + 160: 22(fvec4) FAdd 158 159 + Store 26(color) 160 + 165: 162 Load 164(shadowSampler2D) + 166: 16(fvec3) Load 18(coords3D) + 167: 6(float) CompositeExtract 166 2 + 168: 6(float) ImageSampleDrefImplicitLod 165 166 167 + 169: 22(fvec4) Load 26(color) + 170: 22(fvec4) CompositeConstruct 168 168 168 168 + 171: 22(fvec4) FAdd 169 170 + Store 26(color) 171 + 172: 162 Load 164(shadowSampler2D) + 173: 16(fvec3) Load 18(coords3D) + 174: 6(float) Load 10(bias) + 175: 6(float) CompositeExtract 173 2 + 176: 6(float) ImageSampleDrefImplicitLod 172 173 175 Bias 174 + 177: 22(fvec4) Load 26(color) + 178: 22(fvec4) CompositeConstruct 176 176 176 176 + 179: 22(fvec4) FAdd 177 178 + Store 26(color) 179 + 180: 143 Load 145(shadowSampler1D) + 181: 22(fvec4) Load 24(coords4D) + 182: 6(float) CompositeExtract 181 2 + 183: 6(float) CompositeExtract 181 3 + 184: 22(fvec4) CompositeInsert 183 181 1 + 185: 6(float) ImageSampleProjDrefImplicitLod 180 184 182 186: 22(fvec4) Load 26(color) 187: 22(fvec4) CompositeConstruct 185 185 185 185 188: 22(fvec4) FAdd 186 187 Store 26(color) 188 - 189: 156 Load 158(shadowSampler2D) + 189: 143 Load 145(shadowSampler1D) 190: 22(fvec4) Load 24(coords4D) - 191: 6(float) CompositeExtract 190 2 - 192: 6(float) ImageSampleProjDrefImplicitLod 189 190 191 - 193: 22(fvec4) Load 26(color) - 194: 22(fvec4) CompositeConstruct 192 192 192 192 - 195: 22(fvec4) FAdd 193 194 - Store 26(color) 195 - 196: 156 Load 158(shadowSampler2D) - 197: 22(fvec4) Load 24(coords4D) - 198: 6(float) Load 10(bias) - 199: 6(float) CompositeExtract 197 2 - 200: 6(float) ImageSampleProjDrefImplicitLod 196 197 199 Bias 198 - 201: 22(fvec4) Load 26(color) - 202: 22(fvec4) CompositeConstruct 200 200 200 200 - 203: 22(fvec4) FAdd 201 202 - Store 26(color) 203 - Store 207(iCoords2D) 210 - Store 212(iLod) 213 - 214: 70 Load 72(texSampler2D) - 215: 205(ivec2) Load 207(iCoords2D) - 216: 204(int) Load 212(iLod) - 217: 22(fvec4) ImageFetch 214 215 Lod 216 - 218: 22(fvec4) Load 26(color) - 219: 22(fvec4) FAdd 218 217 - Store 26(color) 219 - 222: 45(fvec2) Load 47(coords2D) - 223: 45(fvec2) DPdx 222 - Store 221(gradX) 223 - 225: 45(fvec2) Load 47(coords2D) - 226: 45(fvec2) DPdy 225 - Store 224(gradY) 226 - 227: 70 Load 72(texSampler2D) - 228: 45(fvec2) Load 47(coords2D) - 229: 45(fvec2) Load 221(gradX) - 230: 45(fvec2) Load 224(gradY) - 231: 22(fvec4) ImageSampleExplicitLod 227 228 Grad 229 230 - 232: 22(fvec4) Load 26(color) - 233: 22(fvec4) FAdd 232 231 - Store 26(color) 233 - 234: 70 Load 72(texSampler2D) - 235: 45(fvec2) Load 47(coords2D) - 236: 6(float) Load 14(proj) - 237: 6(float) CompositeExtract 235 0 - 238: 6(float) CompositeExtract 235 1 - 239: 16(fvec3) CompositeConstruct 237 238 236 - 240: 45(fvec2) Load 221(gradX) - 241: 45(fvec2) Load 224(gradY) - 242: 22(fvec4) ImageSampleProjExplicitLod 234 239 Grad 240 241 - 243: 22(fvec4) Load 26(color) - 244: 22(fvec4) FAdd 243 242 - Store 26(color) 244 - 245: 70 Load 72(texSampler2D) - 246: 45(fvec2) Load 47(coords2D) - 247: 45(fvec2) Load 221(gradX) - 248: 45(fvec2) Load 224(gradY) - 252: 22(fvec4) ImageSampleExplicitLod 245 246 Grad ConstOffset 247 248 251 - 253: 22(fvec4) Load 26(color) - 254: 22(fvec4) FAdd 253 252 - Store 26(color) 254 - 255: 70 Load 72(texSampler2D) - 256: 16(fvec3) Load 18(coords3D) - 257: 45(fvec2) Load 221(gradX) - 258: 45(fvec2) Load 224(gradY) - 259: 22(fvec4) ImageSampleProjExplicitLod 255 256 Grad ConstOffset 257 258 251 - 260: 22(fvec4) Load 26(color) - 261: 22(fvec4) FAdd 260 259 - Store 26(color) 261 - 262: 156 Load 158(shadowSampler2D) - 263: 45(fvec2) Load 47(coords2D) - 264: 6(float) Load 12(lod) - 265: 6(float) CompositeExtract 263 0 - 266: 6(float) CompositeExtract 263 1 - 267: 16(fvec3) CompositeConstruct 265 266 264 - 268: 45(fvec2) Load 221(gradX) - 269: 45(fvec2) Load 224(gradY) - 270: 6(float) CompositeExtract 267 2 - 271: 6(float) ImageSampleDrefExplicitLod 262 267 270 Grad 268 269 - 272: 22(fvec4) Load 26(color) - 273: 22(fvec4) CompositeConstruct 271 271 271 271 - 274: 22(fvec4) FAdd 272 273 - Store 26(color) 274 - 277: 22(fvec4) Load 26(color) - 280: 22(fvec4) Load 279(u) - 283: 6(float) Load 282(blend) - 284: 6(float) Load 8(blendscale) - 285: 6(float) FMul 283 284 - 286: 22(fvec4) CompositeConstruct 285 285 285 285 - 287: 22(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 277 280 286 - Store 276(gl_FragColor) 287 + 191: 6(float) Load 10(bias) + 192: 6(float) CompositeExtract 190 2 + 193: 6(float) CompositeExtract 190 3 + 194: 22(fvec4) CompositeInsert 193 190 1 + 195: 6(float) ImageSampleProjDrefImplicitLod 189 194 192 Bias 191 + 196: 22(fvec4) Load 26(color) + 197: 22(fvec4) CompositeConstruct 195 195 195 195 + 198: 22(fvec4) FAdd 196 197 + Store 26(color) 198 + 199: 162 Load 164(shadowSampler2D) + 200: 22(fvec4) Load 24(coords4D) + 201: 6(float) CompositeExtract 200 2 + 202: 6(float) CompositeExtract 200 3 + 203: 22(fvec4) CompositeInsert 202 200 2 + 204: 6(float) ImageSampleProjDrefImplicitLod 199 203 201 + 205: 22(fvec4) Load 26(color) + 206: 22(fvec4) CompositeConstruct 204 204 204 204 + 207: 22(fvec4) FAdd 205 206 + Store 26(color) 207 + 208: 162 Load 164(shadowSampler2D) + 209: 22(fvec4) Load 24(coords4D) + 210: 6(float) Load 10(bias) + 211: 6(float) CompositeExtract 209 2 + 212: 6(float) CompositeExtract 209 3 + 213: 22(fvec4) CompositeInsert 212 209 2 + 214: 6(float) ImageSampleProjDrefImplicitLod 208 213 211 Bias 210 + 215: 22(fvec4) Load 26(color) + 216: 22(fvec4) CompositeConstruct 214 214 214 214 + 217: 22(fvec4) FAdd 215 216 + Store 26(color) 217 + Store 221(iCoords2D) 224 + Store 226(iLod) 227 + 228: 74 Load 76(texSampler2D) + 229: 219(ivec2) Load 221(iCoords2D) + 230: 218(int) Load 226(iLod) + 231: 73 Image 228 + 232: 22(fvec4) ImageFetch 231 229 Lod 230 + 233: 22(fvec4) Load 26(color) + 234: 22(fvec4) FAdd 233 232 + Store 26(color) 234 + 237: 45(fvec2) Load 47(coords2D) + 238: 45(fvec2) DPdx 237 + Store 236(gradX) 238 + 240: 45(fvec2) Load 47(coords2D) + 241: 45(fvec2) DPdy 240 + Store 239(gradY) 241 + 242: 74 Load 76(texSampler2D) + 243: 45(fvec2) Load 47(coords2D) + 244: 45(fvec2) Load 236(gradX) + 245: 45(fvec2) Load 239(gradY) + 246: 22(fvec4) ImageSampleExplicitLod 242 243 Grad 244 245 + 247: 22(fvec4) Load 26(color) + 248: 22(fvec4) FAdd 247 246 + Store 26(color) 248 + 249: 74 Load 76(texSampler2D) + 250: 45(fvec2) Load 47(coords2D) + 251: 6(float) Load 14(proj) + 252: 6(float) CompositeExtract 250 0 + 253: 6(float) CompositeExtract 250 1 + 254: 16(fvec3) CompositeConstruct 252 253 251 + 255: 45(fvec2) Load 236(gradX) + 256: 45(fvec2) Load 239(gradY) + 257: 22(fvec4) ImageSampleProjExplicitLod 249 254 Grad 255 256 + 258: 22(fvec4) Load 26(color) + 259: 22(fvec4) FAdd 258 257 + Store 26(color) 259 + 260: 74 Load 76(texSampler2D) + 261: 45(fvec2) Load 47(coords2D) + 262: 45(fvec2) Load 236(gradX) + 263: 45(fvec2) Load 239(gradY) + 267: 22(fvec4) ImageSampleExplicitLod 260 261 Grad ConstOffset 262 263 266 + 268: 22(fvec4) Load 26(color) + 269: 22(fvec4) FAdd 268 267 + Store 26(color) 269 + 270: 74 Load 76(texSampler2D) + 271: 16(fvec3) Load 18(coords3D) + 272: 45(fvec2) Load 236(gradX) + 273: 45(fvec2) Load 239(gradY) + 274: 22(fvec4) ImageSampleProjExplicitLod 270 271 Grad ConstOffset 272 273 266 + 275: 22(fvec4) Load 26(color) + 276: 22(fvec4) FAdd 275 274 + Store 26(color) 276 + 277: 162 Load 164(shadowSampler2D) + 278: 45(fvec2) Load 47(coords2D) + 279: 6(float) Load 12(lod) + 280: 6(float) CompositeExtract 278 0 + 281: 6(float) CompositeExtract 278 1 + 282: 16(fvec3) CompositeConstruct 280 281 279 + 283: 45(fvec2) Load 236(gradX) + 284: 45(fvec2) Load 239(gradY) + 285: 6(float) CompositeExtract 282 2 + 286: 6(float) ImageSampleDrefExplicitLod 277 282 285 Grad 283 284 + 287: 22(fvec4) Load 26(color) + 288: 22(fvec4) CompositeConstruct 286 286 286 286 + 289: 22(fvec4) FAdd 287 288 + Store 26(color) 289 + 292: 22(fvec4) Load 26(color) + 295: 22(fvec4) Load 294(u) + 298: 6(float) Load 297(blend) + 299: 6(float) Load 8(blendscale) + 300: 6(float) FMul 298 299 + 301: 22(fvec4) CompositeConstruct 300 300 300 300 + 302: 22(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 292 295 301 + Store 291(gl_FragColor) 302 Return FunctionEnd diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out index 179e567d..cc3d3daa 100755 --- a/Test/baseResults/spv.texture.vert.out +++ b/Test/baseResults/spv.texture.vert.out @@ -5,13 +5,13 @@ Linked vertex stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 142 +// Id's are bound by 150 Capability Shader Capability Sampled1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 39 140 + EntryPoint Vertex 4 "main" 39 148 Source GLSL 140 Name 4 "main" Name 8 "lod" @@ -21,19 +21,19 @@ Linked vertex stage: Name 23 "color" Name 29 "texSampler1D" Name 39 "coords2D" - Name 54 "texSampler2D" - Name 76 "texSampler3D" - Name 92 "texSamplerCube" - Name 102 "shadowSampler1D" - Name 114 "shadowSampler2D" - Name 140 "gl_Position" + Name 56 "texSampler2D" + Name 80 "texSampler3D" + Name 96 "texSamplerCube" + Name 106 "shadowSampler1D" + Name 118 "shadowSampler2D" + Name 148 "gl_Position" Decorate 29(texSampler1D) DescriptorSet 0 - Decorate 54(texSampler2D) DescriptorSet 0 - Decorate 76(texSampler3D) DescriptorSet 0 - Decorate 92(texSamplerCube) DescriptorSet 0 - Decorate 102(shadowSampler1D) DescriptorSet 0 - Decorate 114(shadowSampler2D) DescriptorSet 0 - Decorate 140(gl_Position) BuiltIn Position + Decorate 56(texSampler2D) DescriptorSet 0 + Decorate 80(texSampler3D) DescriptorSet 0 + Decorate 96(texSamplerCube) DescriptorSet 0 + Decorate 106(shadowSampler1D) DescriptorSet 0 + Decorate 118(shadowSampler2D) DescriptorSet 0 + Decorate 148(gl_Position) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -58,28 +58,28 @@ Linked vertex stage: 37: TypeVector 6(float) 2 38: TypePointer Input 37(fvec2) 39(coords2D): 38(ptr) Variable Input - 51: TypeImage 6(float) 2D sampled format:Unknown - 52: TypeSampledImage 51 - 53: TypePointer UniformConstant 52 -54(texSampler2D): 53(ptr) Variable UniformConstant - 73: TypeImage 6(float) 3D sampled format:Unknown - 74: TypeSampledImage 73 - 75: TypePointer UniformConstant 74 -76(texSampler3D): 75(ptr) Variable UniformConstant - 89: TypeImage 6(float) Cube sampled format:Unknown - 90: TypeSampledImage 89 - 91: TypePointer UniformConstant 90 -92(texSamplerCube): 91(ptr) Variable UniformConstant - 99: TypeImage 6(float) 1D depth sampled format:Unknown - 100: TypeSampledImage 99 - 101: TypePointer UniformConstant 100 -102(shadowSampler1D): 101(ptr) Variable UniformConstant - 111: TypeImage 6(float) 2D depth sampled format:Unknown - 112: TypeSampledImage 111 - 113: TypePointer UniformConstant 112 -114(shadowSampler2D): 113(ptr) Variable UniformConstant - 139: TypePointer Output 18(fvec4) -140(gl_Position): 139(ptr) Variable Output + 53: TypeImage 6(float) 2D sampled format:Unknown + 54: TypeSampledImage 53 + 55: TypePointer UniformConstant 54 +56(texSampler2D): 55(ptr) Variable UniformConstant + 77: TypeImage 6(float) 3D sampled format:Unknown + 78: TypeSampledImage 77 + 79: TypePointer UniformConstant 78 +80(texSampler3D): 79(ptr) Variable UniformConstant + 93: TypeImage 6(float) Cube sampled format:Unknown + 94: TypeSampledImage 93 + 95: TypePointer UniformConstant 94 +96(texSamplerCube): 95(ptr) Variable UniformConstant + 103: TypeImage 6(float) 1D depth sampled format:Unknown + 104: TypeSampledImage 103 + 105: TypePointer UniformConstant 104 +106(shadowSampler1D): 105(ptr) Variable UniformConstant + 115: TypeImage 6(float) 2D depth sampled format:Unknown + 116: TypeSampledImage 115 + 117: TypePointer UniformConstant 116 +118(shadowSampler2D): 117(ptr) Variable UniformConstant + 147: TypePointer Output 18(fvec4) +148(gl_Position): 147(ptr) Variable Output 4(main): 2 Function None 3 5: Label 8(lod): 7(ptr) Variable Function @@ -109,89 +109,97 @@ Linked vertex stage: 45: 27 Load 29(texSampler1D) 46: 18(fvec4) Load 20(coords4D) 47: 6(float) Load 8(lod) - 48: 18(fvec4) ImageSampleProjExplicitLod 45 46 Lod 47 - 49: 18(fvec4) Load 23(color) - 50: 18(fvec4) FAdd 49 48 - Store 23(color) 50 - 55: 52 Load 54(texSampler2D) - 56: 37(fvec2) Load 39(coords2D) - 57: 6(float) Load 8(lod) - 58: 18(fvec4) ImageSampleExplicitLod 55 56 Lod 57 - 59: 18(fvec4) Load 23(color) - 60: 18(fvec4) FAdd 59 58 - Store 23(color) 60 - 61: 52 Load 54(texSampler2D) - 62: 12(fvec3) Load 14(coords3D) - 63: 6(float) Load 8(lod) - 64: 18(fvec4) ImageSampleProjExplicitLod 61 62 Lod 63 - 65: 18(fvec4) Load 23(color) - 66: 18(fvec4) FAdd 65 64 - Store 23(color) 66 - 67: 52 Load 54(texSampler2D) - 68: 18(fvec4) Load 20(coords4D) - 69: 6(float) Load 8(lod) - 70: 18(fvec4) ImageSampleProjExplicitLod 67 68 Lod 69 - 71: 18(fvec4) Load 23(color) - 72: 18(fvec4) FAdd 71 70 - Store 23(color) 72 - 77: 74 Load 76(texSampler3D) - 78: 12(fvec3) Load 14(coords3D) - 79: 6(float) Load 8(lod) - 80: 18(fvec4) ImageSampleExplicitLod 77 78 Lod 79 - 81: 18(fvec4) Load 23(color) - 82: 18(fvec4) FAdd 81 80 - Store 23(color) 82 - 83: 74 Load 76(texSampler3D) - 84: 18(fvec4) Load 20(coords4D) - 85: 6(float) Load 8(lod) - 86: 18(fvec4) ImageSampleProjExplicitLod 83 84 Lod 85 - 87: 18(fvec4) Load 23(color) - 88: 18(fvec4) FAdd 87 86 - Store 23(color) 88 - 93: 90 Load 92(texSamplerCube) - 94: 12(fvec3) Load 14(coords3D) - 95: 6(float) Load 8(lod) - 96: 18(fvec4) ImageSampleExplicitLod 93 94 Lod 95 - 97: 18(fvec4) Load 23(color) - 98: 18(fvec4) FAdd 97 96 - Store 23(color) 98 - 103: 100 Load 102(shadowSampler1D) - 104: 12(fvec3) Load 14(coords3D) - 105: 6(float) Load 8(lod) - 106: 6(float) CompositeExtract 104 2 - 107: 6(float) ImageSampleDrefExplicitLod 103 104 106 Lod 105 - 108: 18(fvec4) Load 23(color) - 109: 18(fvec4) CompositeConstruct 107 107 107 107 - 110: 18(fvec4) FAdd 108 109 - Store 23(color) 110 - 115: 112 Load 114(shadowSampler2D) - 116: 12(fvec3) Load 14(coords3D) - 117: 6(float) Load 8(lod) - 118: 6(float) CompositeExtract 116 2 - 119: 6(float) ImageSampleDrefExplicitLod 115 116 118 Lod 117 - 120: 18(fvec4) Load 23(color) - 121: 18(fvec4) CompositeConstruct 119 119 119 119 - 122: 18(fvec4) FAdd 120 121 - Store 23(color) 122 - 123: 100 Load 102(shadowSampler1D) - 124: 18(fvec4) Load 20(coords4D) - 125: 6(float) Load 8(lod) - 126: 6(float) CompositeExtract 124 2 - 127: 6(float) ImageSampleProjDrefExplicitLod 123 124 126 Lod 125 - 128: 18(fvec4) Load 23(color) - 129: 18(fvec4) CompositeConstruct 127 127 127 127 - 130: 18(fvec4) FAdd 128 129 - Store 23(color) 130 - 131: 112 Load 114(shadowSampler2D) - 132: 18(fvec4) Load 20(coords4D) - 133: 6(float) Load 8(lod) - 134: 6(float) CompositeExtract 132 2 - 135: 6(float) ImageSampleProjDrefExplicitLod 131 132 134 Lod 133 - 136: 18(fvec4) Load 23(color) - 137: 18(fvec4) CompositeConstruct 135 135 135 135 - 138: 18(fvec4) FAdd 136 137 - Store 23(color) 138 - 141: 18(fvec4) Load 23(color) - Store 140(gl_Position) 141 + 48: 6(float) CompositeExtract 46 3 + 49: 18(fvec4) CompositeInsert 48 46 1 + 50: 18(fvec4) ImageSampleProjExplicitLod 45 49 Lod 47 + 51: 18(fvec4) Load 23(color) + 52: 18(fvec4) FAdd 51 50 + Store 23(color) 52 + 57: 54 Load 56(texSampler2D) + 58: 37(fvec2) Load 39(coords2D) + 59: 6(float) Load 8(lod) + 60: 18(fvec4) ImageSampleExplicitLod 57 58 Lod 59 + 61: 18(fvec4) Load 23(color) + 62: 18(fvec4) FAdd 61 60 + Store 23(color) 62 + 63: 54 Load 56(texSampler2D) + 64: 12(fvec3) Load 14(coords3D) + 65: 6(float) Load 8(lod) + 66: 18(fvec4) ImageSampleProjExplicitLod 63 64 Lod 65 + 67: 18(fvec4) Load 23(color) + 68: 18(fvec4) FAdd 67 66 + Store 23(color) 68 + 69: 54 Load 56(texSampler2D) + 70: 18(fvec4) Load 20(coords4D) + 71: 6(float) Load 8(lod) + 72: 6(float) CompositeExtract 70 3 + 73: 18(fvec4) CompositeInsert 72 70 2 + 74: 18(fvec4) ImageSampleProjExplicitLod 69 73 Lod 71 + 75: 18(fvec4) Load 23(color) + 76: 18(fvec4) FAdd 75 74 + Store 23(color) 76 + 81: 78 Load 80(texSampler3D) + 82: 12(fvec3) Load 14(coords3D) + 83: 6(float) Load 8(lod) + 84: 18(fvec4) ImageSampleExplicitLod 81 82 Lod 83 + 85: 18(fvec4) Load 23(color) + 86: 18(fvec4) FAdd 85 84 + Store 23(color) 86 + 87: 78 Load 80(texSampler3D) + 88: 18(fvec4) Load 20(coords4D) + 89: 6(float) Load 8(lod) + 90: 18(fvec4) ImageSampleProjExplicitLod 87 88 Lod 89 + 91: 18(fvec4) Load 23(color) + 92: 18(fvec4) FAdd 91 90 + Store 23(color) 92 + 97: 94 Load 96(texSamplerCube) + 98: 12(fvec3) Load 14(coords3D) + 99: 6(float) Load 8(lod) + 100: 18(fvec4) ImageSampleExplicitLod 97 98 Lod 99 + 101: 18(fvec4) Load 23(color) + 102: 18(fvec4) FAdd 101 100 + Store 23(color) 102 + 107: 104 Load 106(shadowSampler1D) + 108: 12(fvec3) Load 14(coords3D) + 109: 6(float) Load 8(lod) + 110: 6(float) CompositeExtract 108 2 + 111: 6(float) ImageSampleDrefExplicitLod 107 108 110 Lod 109 + 112: 18(fvec4) Load 23(color) + 113: 18(fvec4) CompositeConstruct 111 111 111 111 + 114: 18(fvec4) FAdd 112 113 + Store 23(color) 114 + 119: 116 Load 118(shadowSampler2D) + 120: 12(fvec3) Load 14(coords3D) + 121: 6(float) Load 8(lod) + 122: 6(float) CompositeExtract 120 2 + 123: 6(float) ImageSampleDrefExplicitLod 119 120 122 Lod 121 + 124: 18(fvec4) Load 23(color) + 125: 18(fvec4) CompositeConstruct 123 123 123 123 + 126: 18(fvec4) FAdd 124 125 + Store 23(color) 126 + 127: 104 Load 106(shadowSampler1D) + 128: 18(fvec4) Load 20(coords4D) + 129: 6(float) Load 8(lod) + 130: 6(float) CompositeExtract 128 2 + 131: 6(float) CompositeExtract 128 3 + 132: 18(fvec4) CompositeInsert 131 128 1 + 133: 6(float) ImageSampleProjDrefExplicitLod 127 132 130 Lod 129 + 134: 18(fvec4) Load 23(color) + 135: 18(fvec4) CompositeConstruct 133 133 133 133 + 136: 18(fvec4) FAdd 134 135 + Store 23(color) 136 + 137: 116 Load 118(shadowSampler2D) + 138: 18(fvec4) Load 20(coords4D) + 139: 6(float) Load 8(lod) + 140: 6(float) CompositeExtract 138 2 + 141: 6(float) CompositeExtract 138 3 + 142: 18(fvec4) CompositeInsert 141 138 2 + 143: 6(float) ImageSampleProjDrefExplicitLod 137 142 140 Lod 139 + 144: 18(fvec4) Load 23(color) + 145: 18(fvec4) CompositeConstruct 143 143 143 143 + 146: 18(fvec4) FAdd 144 145 + Store 23(color) 146 + 149: 18(fvec4) Load 23(color) + Store 148(gl_Position) 149 Return FunctionEnd diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out index 43df45f5..b84b5bac 100755 --- a/Test/baseResults/spv.variableArrayIndex.frag.out +++ b/Test/baseResults/spv.variableArrayIndex.frag.out @@ -7,12 +7,12 @@ Linked fragment stage: // Module Version 10000 // Generated by (magic number): 80001 -// Id's are bound by 97 +// Id's are bound by 93 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 10 21 37 40 58 67 + EntryPoint Fragment 4 "main" 10 20 34 36 54 63 ExecutionMode 4 OriginUpperLeft Source GLSL 400 Name 4 "main" @@ -25,43 +25,21 @@ Linked fragment stage: MemberName 14(lunarStruct2) 0 "i" MemberName 14(lunarStruct2) 1 "f" MemberName 14(lunarStruct2) 2 "s1_1" - Name 18 "lunarStruct1" - MemberName 18(lunarStruct1) 0 "i" - MemberName 18(lunarStruct1) 1 "f" - Name 19 "lunarStruct3" - MemberName 19(lunarStruct3) 0 "s2_1" - MemberName 19(lunarStruct3) 1 "i" - MemberName 19(lunarStruct3) 2 "f" - MemberName 19(lunarStruct3) 3 "s1_1" - Name 21 "foo3" - Name 31 "scale" - Name 32 "lunarStruct1" - MemberName 32(lunarStruct1) 0 "i" - MemberName 32(lunarStruct1) 1 "f" - Name 33 "lunarStruct2" - MemberName 33(lunarStruct2) 0 "i" - MemberName 33(lunarStruct2) 1 "f" - MemberName 33(lunarStruct2) 2 "s1_1" - Name 37 "foo2" - Name 38 "lunarStruct1" - MemberName 38(lunarStruct1) 0 "i" - MemberName 38(lunarStruct1) 1 "f" - Name 40 "foo" - Name 58 "gl_FragColor" - Name 63 "samp2D" - Name 67 "coord" - Name 73 "constructed" + Name 18 "lunarStruct3" + MemberName 18(lunarStruct3) 0 "s2_1" + MemberName 18(lunarStruct3) 1 "i" + MemberName 18(lunarStruct3) 2 "f" + MemberName 18(lunarStruct3) 3 "s1_1" + Name 20 "foo3" + Name 30 "scale" + Name 34 "foo2" + Name 36 "foo" + Name 54 "gl_FragColor" + Name 59 "samp2D" + Name 63 "coord" + Name 69 "constructed" Decorate 10(Count) Flat - MemberDecorate 19(lunarStruct3) 0 Flat - MemberDecorate 19(lunarStruct3) 1 Flat - MemberDecorate 19(lunarStruct3) 2 Flat - MemberDecorate 19(lunarStruct3) 3 Flat - MemberDecorate 33(lunarStruct2) 0 Flat - MemberDecorate 33(lunarStruct2) 1 Flat - MemberDecorate 33(lunarStruct2) 2 Flat - MemberDecorate 38(lunarStruct1) 0 Flat - MemberDecorate 38(lunarStruct1) 1 Flat - Decorate 63(samp2D) DescriptorSet 0 + Decorate 59(samp2D) DescriptorSet 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -74,99 +52,95 @@ Linked fragment stage: 15: TypeInt 32 0 16: 15(int) Constant 3 17: TypeArray 14(lunarStruct2) 16 -18(lunarStruct1): TypeStruct 6(int) 12(float) -19(lunarStruct3): TypeStruct 17 6(int) 12(float) 18(lunarStruct1) - 20: TypePointer Input 19(lunarStruct3) - 21(foo3): 20(ptr) Variable Input - 22: 6(int) Constant 0 - 23: 6(int) Constant 1 - 26: TypeBool - 30: TypePointer Function 12(float) -32(lunarStruct1): TypeStruct 6(int) 12(float) -33(lunarStruct2): TypeStruct 6(int) 12(float) 32(lunarStruct1) - 34: 15(int) Constant 5 - 35: TypeArray 33(lunarStruct2) 34 - 36: TypePointer Input 35 - 37(foo2): 36(ptr) Variable Input -38(lunarStruct1): TypeStruct 6(int) 12(float) - 39: TypePointer Input 38(lunarStruct1) - 40(foo): 39(ptr) Variable Input - 45: 6(int) Constant 2 - 50: TypePointer Input 12(float) - 56: TypeVector 12(float) 4 - 57: TypePointer Output 56(fvec4) -58(gl_FragColor): 57(ptr) Variable Output - 60: TypeImage 12(float) 2D sampled format:Unknown - 61: TypeSampledImage 60 - 62: TypePointer UniformConstant 61 - 63(samp2D): 62(ptr) Variable UniformConstant - 65: TypeVector 12(float) 2 - 66: TypePointer Input 65(fvec2) - 67(coord): 66(ptr) Variable Input - 71: TypeArray 65(fvec2) 16 - 72: TypePointer Function 71 - 77: 12(float) Constant 1065353216 - 78: 12(float) Constant 1073741824 - 79: 65(fvec2) ConstantComposite 77 78 - 83: TypePointer Function 65(fvec2) +18(lunarStruct3): TypeStruct 17 6(int) 12(float) 13(lunarStruct1) + 19: TypePointer Input 18(lunarStruct3) + 20(foo3): 19(ptr) Variable Input + 21: 6(int) Constant 0 + 22: 6(int) Constant 1 + 25: TypeBool + 29: TypePointer Function 12(float) + 31: 15(int) Constant 5 + 32: TypeArray 14(lunarStruct2) 31 + 33: TypePointer Input 32 + 34(foo2): 33(ptr) Variable Input + 35: TypePointer Input 13(lunarStruct1) + 36(foo): 35(ptr) Variable Input + 41: 6(int) Constant 2 + 46: TypePointer Input 12(float) + 52: TypeVector 12(float) 4 + 53: TypePointer Output 52(fvec4) +54(gl_FragColor): 53(ptr) Variable Output + 56: TypeImage 12(float) 2D sampled format:Unknown + 57: TypeSampledImage 56 + 58: TypePointer UniformConstant 57 + 59(samp2D): 58(ptr) Variable UniformConstant + 61: TypeVector 12(float) 2 + 62: TypePointer Input 61(fvec2) + 63(coord): 62(ptr) Variable Input + 67: TypeArray 61(fvec2) 16 + 68: TypePointer Function 67 + 73: 12(float) Constant 1065353216 + 74: 12(float) Constant 1073741824 + 75: 61(fvec2) ConstantComposite 73 74 + 79: TypePointer Function 61(fvec2) 4(main): 2 Function None 3 5: Label 8(iLocal): 7(ptr) Variable Function - 31(scale): 30(ptr) Variable Function - 73(constructed): 72(ptr) Variable Function + 30(scale): 29(ptr) Variable Function + 69(constructed): 68(ptr) Variable Function 11: 6(int) Load 10(Count) Store 8(iLocal) 11 - 24: 9(ptr) AccessChain 21(foo3) 22 23 22 - 25: 6(int) Load 24 - 27: 26(bool) SGreaterThan 25 22 - SelectionMerge 29 None - BranchConditional 27 28 53 - 28: Label - 41: 9(ptr) AccessChain 40(foo) 22 - 42: 6(int) Load 41 - 43: 9(ptr) AccessChain 21(foo3) 22 42 22 - 44: 6(int) Load 43 - 46: 6(int) IAdd 44 45 - 47: 6(int) Load 8(iLocal) - 48: 6(int) IAdd 47 23 - Store 8(iLocal) 48 - 49: 6(int) IAdd 46 48 - 51: 50(ptr) AccessChain 37(foo2) 49 45 23 - 52: 12(float) Load 51 - Store 31(scale) 52 - Branch 29 - 53: Label - 54: 50(ptr) AccessChain 21(foo3) 22 22 45 23 - 55: 12(float) Load 54 - Store 31(scale) 55 - Branch 29 - 29: Label - 59: 12(float) Load 31(scale) - 64: 61 Load 63(samp2D) - 68: 65(fvec2) Load 67(coord) - 69: 56(fvec4) ImageSampleImplicitLod 64 68 - 70: 56(fvec4) VectorTimesScalar 69 59 - Store 58(gl_FragColor) 70 - 74: 65(fvec2) Load 67(coord) - 75: 12(float) Load 31(scale) - 76: 65(fvec2) CompositeConstruct 75 75 - 80: 71 CompositeConstruct 74 76 79 - Store 73(constructed) 80 - 81: 9(ptr) AccessChain 40(foo) 22 - 82: 6(int) Load 81 - 84: 83(ptr) AccessChain 73(constructed) 82 - 85: 65(fvec2) Load 84 - 86: 9(ptr) AccessChain 40(foo) 22 - 87: 6(int) Load 86 - 88: 83(ptr) AccessChain 73(constructed) 87 - 89: 65(fvec2) Load 88 - 90: 12(float) CompositeExtract 85 0 - 91: 12(float) CompositeExtract 85 1 - 92: 12(float) CompositeExtract 89 0 - 93: 12(float) CompositeExtract 89 1 - 94: 56(fvec4) CompositeConstruct 90 91 92 93 - 95: 56(fvec4) Load 58(gl_FragColor) - 96: 56(fvec4) FAdd 95 94 - Store 58(gl_FragColor) 96 + 23: 9(ptr) AccessChain 20(foo3) 21 22 21 + 24: 6(int) Load 23 + 26: 25(bool) SGreaterThan 24 21 + SelectionMerge 28 None + BranchConditional 26 27 49 + 27: Label + 37: 9(ptr) AccessChain 36(foo) 21 + 38: 6(int) Load 37 + 39: 9(ptr) AccessChain 20(foo3) 21 38 21 + 40: 6(int) Load 39 + 42: 6(int) IAdd 40 41 + 43: 6(int) Load 8(iLocal) + 44: 6(int) IAdd 43 22 + Store 8(iLocal) 44 + 45: 6(int) IAdd 42 44 + 47: 46(ptr) AccessChain 34(foo2) 45 41 22 + 48: 12(float) Load 47 + Store 30(scale) 48 + Branch 28 + 49: Label + 50: 46(ptr) AccessChain 20(foo3) 21 21 41 22 + 51: 12(float) Load 50 + Store 30(scale) 51 + Branch 28 + 28: Label + 55: 12(float) Load 30(scale) + 60: 57 Load 59(samp2D) + 64: 61(fvec2) Load 63(coord) + 65: 52(fvec4) ImageSampleImplicitLod 60 64 + 66: 52(fvec4) VectorTimesScalar 65 55 + Store 54(gl_FragColor) 66 + 70: 61(fvec2) Load 63(coord) + 71: 12(float) Load 30(scale) + 72: 61(fvec2) CompositeConstruct 71 71 + 76: 67 CompositeConstruct 70 72 75 + Store 69(constructed) 76 + 77: 9(ptr) AccessChain 36(foo) 21 + 78: 6(int) Load 77 + 80: 79(ptr) AccessChain 69(constructed) 78 + 81: 61(fvec2) Load 80 + 82: 9(ptr) AccessChain 36(foo) 21 + 83: 6(int) Load 82 + 84: 79(ptr) AccessChain 69(constructed) 83 + 85: 61(fvec2) Load 84 + 86: 12(float) CompositeExtract 81 0 + 87: 12(float) CompositeExtract 81 1 + 88: 12(float) CompositeExtract 85 0 + 89: 12(float) CompositeExtract 85 1 + 90: 52(fvec4) CompositeConstruct 86 87 88 89 + 91: 52(fvec4) Load 54(gl_FragColor) + 92: 52(fvec4) FAdd 91 90 + Store 54(gl_FragColor) 92 Return FunctionEnd diff --git a/Test/baseResults/vulkan.vert.out b/Test/baseResults/vulkan.vert.out index 0cac808f..351e6f1b 100644 --- a/Test/baseResults/vulkan.vert.out +++ b/Test/baseResults/vulkan.vert.out @@ -17,8 +17,8 @@ ERROR: 0:16: 'constant_id' : cannot declare a default, can only be used on a sca ERROR: 0:20: 'subpassLoad' : no matching overloaded function found ERROR: 0:20: 'assign' : cannot convert from 'const float' to 'smooth out 4-component vector of float' ERROR: 0:23: 'atomic counter types' : not allowed when using GLSL for Vulkan -ERROR: 0:24: 'shared' : not allowed when using GLSL for Vulkan -ERROR: 0:25: 'packed' : not allowed when using GLSL for Vulkan +ERROR: 0:24: 'shared' : not allowed when generating SPIR-V +ERROR: 0:25: 'packed' : not allowed when generating SPIR-V ERROR: 0:32: 'initializer' : can't use with types containing arrays sized with a specialization constant ERROR: 0:34: '=' : can't use with types containing arrays sized with a specialization constant ERROR: 0:35: '==' : can't use with types containing arrays sized with a specialization constant diff --git a/Test/hlsl.array.frag b/Test/hlsl.array.frag new file mode 100644 index 00000000..1abba89f --- /dev/null +++ b/Test/hlsl.array.frag @@ -0,0 +1,11 @@ +float4 a[4]; + +struct { + float4 m[7]; +} s[11]; + +float4 PixelShaderFunction(int i, float4 input[3]) : COLOR0 +{ + float4 b[10]; + return a[1] + a[i] + input[2] + input[i] + b[5] + b[i] + s[i].m[i]; +} \ No newline at end of file diff --git a/Test/hlsl.attribute.frag b/Test/hlsl.attribute.frag new file mode 100644 index 00000000..25c72d46 --- /dev/null +++ b/Test/hlsl.attribute.frag @@ -0,0 +1,13 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + [unroll]; + []; + [][][]; + [unroll(4)]; + [allow_uav_condition]; + [unroll(4)] [allow_uav_condition]; + [ loop ]; + [fastopt]; + [branch] if (0); + [flatten]; +} diff --git a/Test/hlsl.cast.frag b/Test/hlsl.cast.frag new file mode 100644 index 00000000..c8dc8212 --- /dev/null +++ b/Test/hlsl.cast.frag @@ -0,0 +1,4 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + return (float4)input + (int4)input + (float4)1.198; +} diff --git a/Test/hlsl.doLoop.frag b/Test/hlsl.doLoop.frag new file mode 100644 index 00000000..546b2c2c --- /dev/null +++ b/Test/hlsl.doLoop.frag @@ -0,0 +1,6 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + [unroll] do {} while (false); + [unroll] do {;} while (false); + do { return input; } while (input == input); +} diff --git a/Test/hlsl.float1.frag b/Test/hlsl.float1.frag index 5000dced..6247e77b 100644 --- a/Test/hlsl.float1.frag +++ b/Test/hlsl.float1.frag @@ -1,7 +1,7 @@ float1 f1 = float1(1.0); float scalar = 2.0; -float1 ShaderFunction(float1 inFloat1, float inScalar) : COLOR0 +float1 ShaderFunction(float1 inFloat1 : COLOR, float inScalar) : COLOR0 { return f1 * scalar + inFloat1 * inScalar; } diff --git a/Test/hlsl.float4.frag b/Test/hlsl.float4.frag index 8ed4eab1..df871225 100644 --- a/Test/hlsl.float4.frag +++ b/Test/hlsl.float4.frag @@ -1,5 +1,10 @@ float4 AmbientColor = float4(1, 0.5, 0, 1); +bool ff1 : SV_IsFrontFace; +float4 ff2 : packoffset(c0.y); +float4 ff3 : packoffset(c0.y) : register(ps_5_0, s[0]) ; +float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s[0]) ; + float4 ShaderFunction(float4 input) : COLOR0 { return input * AmbientColor; diff --git a/Test/hlsl.forLoop.frag b/Test/hlsl.forLoop.frag new file mode 100644 index 00000000..9109de79 --- /dev/null +++ b/Test/hlsl.forLoop.frag @@ -0,0 +1,8 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + for (;;) ; + for (++input; ; ) ; + [unroll] for (; input != input; ) {} + for (; input != input; ) { return -input; } + for (--input; input != input; input += 2) { return -input; } +} diff --git a/Test/hlsl.if.frag b/Test/hlsl.if.frag new file mode 100644 index 00000000..1f0dde71 --- /dev/null +++ b/Test/hlsl.if.frag @@ -0,0 +1,28 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + if (input == input) + return input; + + if (input == input) + return input; + else + return -input; + + if (input == input) + ; + + if (input == input) + ; + else + ; + + [flatten] if (input == input) { + return input; + } + + if (input == input) { + return input; + } else { + return -input; + } +} diff --git a/Test/hlsl.intrinsics.barriers.comp b/Test/hlsl.intrinsics.barriers.comp new file mode 100644 index 00000000..c9f6a8d7 --- /dev/null +++ b/Test/hlsl.intrinsics.barriers.comp @@ -0,0 +1,13 @@ + +float ComputeShaderFunction() +{ + AllMemoryBarrier(); + AllMemoryBarrierWithGroupSync(); + DeviceMemoryBarrier(); + DeviceMemoryBarrierWithGroupSync(); + GroupMemoryBarrier(); + GroupMemoryBarrierWithGroupSync(); + + return 0.0; +} + diff --git a/Test/hlsl.intrinsics.comp b/Test/hlsl.intrinsics.comp new file mode 100644 index 00000000..79f3d7d1 --- /dev/null +++ b/Test/hlsl.intrinsics.comp @@ -0,0 +1,129 @@ + +#define gs // TODO: define as groupshared when available in the grammar +gs uint gs_ua; +gs uint gs_ub; +gs uint gs_uc; +gs uint2 gs_ua2; +gs uint2 gs_ub2; +gs uint2 gs_uc2; +gs uint3 gs_ua3; +gs uint3 gs_ub3; +gs uint3 gs_uc3; +gs uint4 gs_ua4; +gs uint4 gs_ub4; +gs uint4 gs_uc4; + +float ComputeShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1) +{ + uint out_u1; + + // Don't repeat all the pixel/vertex fns - just one for sanity. + all(inF0); + + // Test atomics + InterlockedAdd(gs_ua, gs_ub); + InterlockedAdd(gs_ua, gs_ub, out_u1); + InterlockedAnd(gs_ua, gs_ub); + InterlockedAnd(gs_ua, gs_ub, out_u1); + InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1); + InterlockedExchange(gs_ua, gs_ub, out_u1); + InterlockedMax(gs_ua, gs_ub); + InterlockedMax(gs_ua, gs_ub, out_u1); + InterlockedMin(gs_ua, gs_ub); + InterlockedMin(gs_ua, gs_ub, out_u1); + InterlockedOr(gs_ua, gs_ub); + InterlockedOr(gs_ua, gs_ub, out_u1); + InterlockedXor(gs_ua, gs_ub); + InterlockedXor(gs_ua, gs_ub, out_u1); + + // CheckAccessFullyMapped(3); // TODO: ... + + return 0.0; +} + +float1 ComputeShaderFunction(float1 inF0, float1 inF1, float1 inF2) +{ + // TODO: ... add when float1 prototypes are generated + return 0.0; +} + +float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1) +{ + uint2 out_u2; + + // Don't repeat all the pixel/vertex fns - just one for sanity. + all(inF0); + + // Test atomics + InterlockedAdd(gs_ua2, gs_ub2); + InterlockedAdd(gs_ua2, gs_ub2, out_u2); + InterlockedAnd(gs_ua2, gs_ub2); + InterlockedAnd(gs_ua2, gs_ub2, out_u2); + InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2); + InterlockedExchange(gs_ua2, gs_ub2, out_u2); + InterlockedMax(gs_ua2, gs_ub2); + InterlockedMax(gs_ua2, gs_ub2, out_u2); + InterlockedMin(gs_ua2, gs_ub2); + InterlockedMin(gs_ua2, gs_ub2, out_u2); + InterlockedOr(gs_ua2, gs_ub2); + InterlockedOr(gs_ua2, gs_ub2, out_u2); + InterlockedXor(gs_ua2, gs_ub2); + InterlockedXor(gs_ua2, gs_ub2, out_u2); + + // TODO: ... add when float1 prototypes are generated + return float2(1,2); +} + +float3 ComputeShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1) +{ + uint3 out_u3; + + // Don't repeat all the pixel/vertex fns - just one for sanity. + all(inF0); + + // Test atomics + InterlockedAdd(gs_ua3, gs_ub3); + InterlockedAdd(gs_ua3, gs_ub3, out_u3); + InterlockedAnd(gs_ua3, gs_ub3); + InterlockedAnd(gs_ua3, gs_ub3, out_u3); + InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3); + InterlockedExchange(gs_ua3, gs_ub3, out_u3); + InterlockedMax(gs_ua3, gs_ub3); + InterlockedMax(gs_ua3, gs_ub3, out_u3); + InterlockedMin(gs_ua3, gs_ub3); + InterlockedMin(gs_ua3, gs_ub3, out_u3); + InterlockedOr(gs_ua3, gs_ub3); + InterlockedOr(gs_ua3, gs_ub3, out_u3); + InterlockedXor(gs_ua3, gs_ub3); + InterlockedXor(gs_ua3, gs_ub3, out_u3); + + // TODO: ... add when float1 prototypes are generated + return float3(1,2,3); +} + +float4 ComputeShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1) +{ + uint4 out_u4; + + // Don't repeat all the pixel/vertex fns - just one for sanity. + all(inF0); + + // Test atomics + InterlockedAdd(gs_ua4, gs_ub4); + InterlockedAdd(gs_ua4, gs_ub4, out_u4); + InterlockedAnd(gs_ua4, gs_ub4); + InterlockedAnd(gs_ua4, gs_ub4, out_u4); + InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4); + InterlockedExchange(gs_ua4, gs_ub4, out_u4); + InterlockedMax(gs_ua4, gs_ub4); + InterlockedMax(gs_ua4, gs_ub4, out_u4); + InterlockedMin(gs_ua4, gs_ub4); + InterlockedMin(gs_ua4, gs_ub4, out_u4); + InterlockedOr(gs_ua4, gs_ub4); + InterlockedOr(gs_ua4, gs_ub4, out_u4); + InterlockedXor(gs_ua4, gs_ub4); + InterlockedXor(gs_ua4, gs_ub4, out_u4); + + // TODO: ... add when float1 prototypes are generated + return float4(1,2,3,4); +} diff --git a/Test/hlsl.intrinsics.evalfns.frag b/Test/hlsl.intrinsics.evalfns.frag new file mode 100644 index 00000000..96387068 --- /dev/null +++ b/Test/hlsl.intrinsics.evalfns.frag @@ -0,0 +1,10 @@ + +void main(float inF1, float2 inF2, float3 inF3, float4 inF4, int2 inI2) : COLOR +{ + EvaluateAttributeSnapped(inF1, int2(8,15)); + EvaluateAttributeSnapped(inF2, int2(0,1)); + EvaluateAttributeSnapped(inF3, int2(3,10)); + EvaluateAttributeSnapped(inF4, int2(7,8)); + + EvaluateAttributeSnapped(inF1, inI2); +} diff --git a/Test/hlsl.intrinsics.f1632.frag b/Test/hlsl.intrinsics.f1632.frag new file mode 100644 index 00000000..4a68a67d --- /dev/null +++ b/Test/hlsl.intrinsics.f1632.frag @@ -0,0 +1,34 @@ +float PixelShaderFunction(float inF0) +{ + f32tof16(inF0); + + return 0.0; +} + +float1 PixelShaderFunction(float1 inF0) +{ + // TODO: ... add when float1 prototypes are generated + return 0.0; +} + +float2 PixelShaderFunction(float2 inF0) +{ + f32tof16(inF0); + + return float2(1,2); +} + +float3 PixelShaderFunction(float3 inF0) +{ + f32tof16(inF0); + + return float3(1,2,3); +} + +float4 PixelShaderFunction(float4 inF0) +{ + f32tof16(inF0); + + return float4(1,2,3,4); +} + diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag new file mode 100644 index 00000000..a0915c29 --- /dev/null +++ b/Test/hlsl.intrinsics.frag @@ -0,0 +1,451 @@ + +#define gs // TODO: define as groupshared when available in the grammar +gs uint gs_ua; +gs uint gs_ub; +gs uint gs_uc; +gs uint2 gs_ua2; +gs uint2 gs_ub2; +gs uint2 gs_uc2; +gs uint3 gs_ua3; +gs uint3 gs_ub3; +gs uint3 gs_uc3; +gs uint4 gs_ua4; +gs uint4 gs_ub4; +gs uint4 gs_uc4; + +float PixelShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1) +{ + uint out_u1; + + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + clip(inF0); + cos(inF0); + cosh(inF0); + countbits(7); + ddx(inF0); + ddx_coarse(inF0); + ddx_fine(inF0); + ddy(inF0); + ddy_coarse(inF0); + ddy_fine(inF0); + degrees(inF0); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + fwidth(inF0); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + pow(inF0, inF1); + radians(inF0); + rcp(inF0); + reversebits(2); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + return 0.0; +} + +float1 PixelShaderFunction(float1 inF0, float1 inF1, float1 inF2) +{ + // TODO: ... add when float1 prototypes are generated + return 0.0; +} + +float2 PixelShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1) +{ + uint2 out_u2; + + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + clip(inF0); + cos(inF0); + cosh(inF0); + countbits(int2(7,3)); + ddx(inF0); + ddx_coarse(inF0); + ddx_fine(inF0); + ddy(inF0); + ddy_coarse(inF0); + ddy_fine(inF0); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + fwidth(inF0); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + rcp(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int2(1,2)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float2(1,2); +} + +float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1) +{ + uint3 out_u3; + + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + clip(inF0); + cos(inF0); + cosh(inF0); + countbits(int3(7,3,5)); + cross(inF0, inF1); + ddx(inF0); + ddx_coarse(inF0); + ddx_fine(inF0); + ddy(inF0); + ddy_coarse(inF0); + ddy_fine(inF0); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + fwidth(inF0); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + rcp(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int3(1,2,3)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float3(1,2,3); +} + +float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1) +{ + uint4 out_u4; + + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + clip(inF0); + cos(inF0); + cosh(inF0); + countbits(int4(7,3,5,2)); + ddx(inF0); + ddx_coarse(inF0); + ddx_fine(inF0); + ddy(inF0); + ddy_coarse(inF0); + ddy_fine(inF0); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + dst(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + fwidth(inF0); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + rcp(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int4(1,2,3,4)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float4(1,2,3,4); +} + +// TODO: for mats: +// asfloat(inU0); \ +// asint(inF0); \ +// asuint(inF0); \ + +// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. +#define MATFNS() \ + all(inF0); \ + abs(inF0); \ + acos(inF0); \ + any(inF0); \ + asin(inF0); \ + atan(inF0); \ + atan2(inF0, inF1); \ + ceil(inF0); \ + clip(inF0); \ + clamp(inF0, inF1, inF2); \ + cos(inF0); \ + cosh(inF0); \ + ddx(inF0); \ + ddx_coarse(inF0); \ + ddx_fine(inF0); \ + ddy(inF0); \ + ddy_coarse(inF0); \ + ddy_fine(inF0); \ + degrees(inF0); \ + determinant(inF0); \ + exp(inF0); \ + exp2(inF0); \ + firstbithigh(7); \ + firstbitlow(7); \ + floor(inF0); \ + fmod(inF0, inF1); \ + frac(inF0); \ + frexp(inF0, inF1); \ + fwidth(inF0); \ + ldexp(inF0, inF1); \ + log(inF0); \ + log10(inF0); \ + log2(inF0); \ + max(inF0, inF1); \ + min(inF0, inF1); \ + pow(inF0, inF1); \ + radians(inF0); \ + round(inF0); \ + rsqrt(inF0); \ + saturate(inF0); \ + sign(inF0); \ + sin(inF0); \ + sincos(inF0, inF1, inF2); \ + sinh(inF0); \ + smoothstep(inF0, inF1, inF2); \ + sqrt(inF0); \ + step(inF0, inF1); \ + tan(inF0); \ + tanh(inF0); \ + transpose(inF0); \ + trunc(inF0); + +// TODO: turn on non-square matrix tests when protos are available. + +float2x2 PixelShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + // TODO: ... add when float1 prototypes are generated + return float2x2(2,2,2,2); +} + +float3x3 PixelShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + // TODO: ... add when float1 prototypes are generated + return float3x3(3,3,3,3,3,3,3,3,3); +} + +float4x4 PixelShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + // TODO: ... add when float1 prototypes are generated + return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); +} + +#define TESTGENMUL(ST, VT, MT) \ + ST r0 = mul(inF0, inF1); \ + VT r1 = mul(inFV0, inF0); \ + VT r2 = mul(inF0, inFV0); \ + ST r3 = mul(inFV0, inFV1); \ + VT r4 = mul(inFM0, inFV0); \ + VT r5 = mul(inFV0, inFM0); \ + MT r6 = mul(inFM0, inF0); \ + MT r7 = mul(inF0, inFM0); \ + MT r8 = mul(inFM0, inFM1); + + +void TestGenMul(float inF0, float inF1, + float2 inFV0, float2 inFV1, + float2x2 inFM0, float2x2 inFM1) +{ + TESTGENMUL(float, float2, float2x2); +} + +void TestGenMul(float inF0, float inF1, + float3 inFV0, float3 inFV1, + float3x3 inFM0, float3x3 inFM1) +{ + TESTGENMUL(float, float3, float3x3); +} + +void TestGenMul(float inF0, float inF1, + float4 inFV0, float4 inFV1, + float4x4 inFM0, float4x4 inFM1) +{ + TESTGENMUL(float, float4, float4x4); +} diff --git a/Test/hlsl.intrinsics.lit.frag b/Test/hlsl.intrinsics.lit.frag new file mode 100644 index 00000000..bf4069a8 --- /dev/null +++ b/Test/hlsl.intrinsics.lit.frag @@ -0,0 +1,4 @@ +void PixelShaderFunction(float n_dot_l, float n_dot_h, float m) +{ + float4 r0 = lit(n_dot_l, n_dot_h, m); +} diff --git a/Test/hlsl.intrinsics.negative.comp b/Test/hlsl.intrinsics.negative.comp new file mode 100644 index 00000000..1b2ecd95 --- /dev/null +++ b/Test/hlsl.intrinsics.negative.comp @@ -0,0 +1,201 @@ +float ComputeShaderFunction(float inF0, float inF1, float inF2, int inI0) +{ + uint out_u1; + + // AllMemoryBarrier(); // invalid in fragment stage TODO: parser currently crashes on empty arg list + // AllMemoryBarrierWithGroupSync(); // invalid in fragment stage TODO: parser currently crashes on empty arg list + asdouble(inF0, inF1); // expected error: only integer inputs + CheckAccessFullyMapped(3.0); // expected error: only valid on integers + clip(inF0); // expected error: only valid in pixel stage + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + ddx(inF0); // expected error: only valid in pixel stage + ddx_coarse(inF0); // expected error: only valid in pixel stage + ddx_fine(inF0); // expected error: only valid in pixel stage + ddy(inF0); // expected error: only valid in pixel stage + ddy_coarse(inF0); // expected error: only valid in pixel stage + ddy_fine(inF0); // expected error: only valid in pixel stage + determinant(inF0); // expected error: only valid on mats + EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + fwidth(inF0); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1); // expected error: only valid in pixel stage + InterlockedExchange(gs_ua, gs_ub, out_u1);// expected error: only valid in pixel stage + InterlockedMax(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedMax(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedMin(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedMin(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedOr(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedOr(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedXor(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedXor(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + length(inF0); // expect error: invalid on scalars + msad4(inF0, float2(0), float4(0)); // expected error: only integer inputs + normalize(inF0); // expect error: invalid on scalars + reflect(inF0, inF1); // expect error: invalid on scalars + refract(inF0, inF1, inF2); // expect error: invalid on scalars + refract(float2(0), float2(0), float2(0)); // expected error: last parameter only scalar + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return 0.0; +} + +float1 ComputeShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0) +{ + // TODO: ... add when float1 prototypes are generated + + GetRenderTargetSamplePosition(inF0); // expected error: only integer inputs + + return 0.0; +} + +float2 ComputeShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0) +{ + uint2 out_u2; + + asdouble(inF0, inF1); // expected error: only integer inputs + CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + ddx(inF0); // only valid in pixel stage + ddx_coarse(inF0); // only valid in pixel stage + ddx_fine(inF0); // only valid in pixel stage + ddy(inF0); // only valid in pixel stage + ddy_coarse(inF0); // only valid in pixel stage + ddy_fine(inF0); // only valid in pixel stage + determinant(inF0); // expect error: only valid on mats + EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + fwidth(inF0); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2); // expected error: only valid in pixel stage + InterlockedExchange(gs_ua2, gs_ub2, out_u2);// expected error: only valid in pixel stage + InterlockedMax(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedMax(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedMin(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedMin(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedOr(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedOr(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedXor(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedXor(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + noise(inF0); // expected error: only valid in pixel stage + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float2(1,2); +} + +float3 ComputeShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0) +{ + uint3 out_u3; + + CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + ddx(inF0); // only valid in pixel stage + ddx_coarse(inF0); // only valid in pixel stage + ddx_fine(inF0); // only valid in pixel stage + ddy(inF0); // only valid in pixel stage + ddy_coarse(inF0); // only valid in pixel stage + ddy_fine(inF0); // only valid in pixel stage + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + determinant(inF0); // expect error: only valid on mats + EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + fwidth(inF0); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3); // expected error: only valid in pixel stage + InterlockedExchange(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedMax(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedMax(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedMin(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedMin(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedOr(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedOr(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedXor(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedXor(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + noise(inF0); // expected error: only valid in pixel stage + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float3(1,2,3); +} + +float4 ComputeShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0) +{ + uint4 out_u4; + + CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + determinant(inF0); // expect error: only valid on mats + ddx(inF0); // only valid in pixel stage + ddx_coarse(inF0); // only valid in pixel stage + ddx_fine(inF0); // only valid in pixel stage + ddy(inF0); // only valid in pixel stage + ddy_coarse(inF0); // only valid in pixel stage + ddy_fine(inF0); // only valid in pixel stage + EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + fwidth(inF0); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4); // expected error: only valid in pixel stage + InterlockedExchange(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedMax(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedMax(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedMin(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedMin(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedOr(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedOr(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedXor(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedXor(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + noise(inF0); // expected error: only valid in pixel stage + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float4(1,2,3,4); +} + diff --git a/Test/hlsl.intrinsics.negative.frag b/Test/hlsl.intrinsics.negative.frag new file mode 100644 index 00000000..ddbac06a --- /dev/null +++ b/Test/hlsl.intrinsics.negative.frag @@ -0,0 +1,137 @@ +float PixelShaderFunction(float inF0, float inF1, float inF2, int inI0) +{ + // AllMemoryBarrier(); // TODO: expected error: invalid in fragment stage + // AllMemoryBarrierWithGroupSync(); // TODO: expected error: invalid in fragment stage + asdouble(inF0, inF1); // expected error: only integer inputs + CheckAccessFullyMapped(3.0); // expected error: only valid on integers + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + determinant(inF0); // expected error: only valid on mats + // DeviceMemoryBarrierWithGroupSync(); // TODO: expected error: only valid in compute stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + // InterlockedAdd(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // InterlockedAnd(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out i // InterlockedMax(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // InterlockedMin(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // InterlockedOor(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // InterlockedXor(inI0, inI0, 3); // expected error: last parameter is out TODO: accepted even though marked as out in proto generator + // GroupMemoryBarrier(); // TODO: expected error: invalid in fragment stage + // GroupMemoryBarrierWithGroupSync(); // TODO: expected error: invalid in fragment stage + length(inF0); // expected error: invalid on scalars + msad4(inF0, float2(0), float4(0)); // expected error: only integer inputs + normalize(inF0); // expected error: invalid on scalars + reflect(inF0, inF1); // expected error: invalid on scalars + refract(inF0, inF1, inF2); // expected error: invalid on scalars + refract(float2(0), float2(0), float2(0)); // expected error: last parameter only scalar + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expected error: only valid on mats + + return 0.0; +} + +float1 PixelShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0) +{ + // TODO: ... add when float1 prototypes are generated + + GetRenderTargetSamplePosition(inF0); // expected error: only integer inputs + + return 0.0; +} + +float2 PixelShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0) +{ + asdouble(inF0, inF1); // expected error: only integer inputs + CheckAccessFullyMapped(inF0); // expected error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + determinant(inF0); // expected error: only valid on mats + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expected error: only valid on mats + + return float2(1,2); +} + +float3 PixelShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0) +{ + CheckAccessFullyMapped(inF0); // expected error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + determinant(inF0); // expected error: only valid on mats + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expected error: only valid on mats + + + return float3(1,2,3); +} + +float4 PixelShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0) +{ + CheckAccessFullyMapped(inF0); // expected error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + determinant(inF0); // expected error: only valid on mats + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expected error: only valid on mats + + return float4(1,2,3,4); +} + +// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. +#define MATFNS() \ + countbits(inF0); \ + D3DCOLORtoUBYTE4(inF0); \ + cross(inF0, inF1); \ + f16tof32(inF0); \ + firstbithigh(inF0); \ + firstbitlow(inF0); \ + fma(inF0, inF1, inF2); \ + reversebits(inF0); \ + length(inF0); \ + noise(inF0); \ + normalize(inF0); \ + reflect(inF0, inF1); \ + refract(inF0, inF1, 1.0); \ + reversebits(inF0); \ + + +// TODO: turn on non-square matrix tests when protos are available. + +float2x2 PixelShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float2x2(2,2,2,2); +} + +float3x3 PixelShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float3x3(3,3,3,3,3,3,3,3,3); +} + +float4x4 PixelShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); +} diff --git a/Test/hlsl.intrinsics.negative.vert b/Test/hlsl.intrinsics.negative.vert new file mode 100644 index 00000000..e716c688 --- /dev/null +++ b/Test/hlsl.intrinsics.negative.vert @@ -0,0 +1,273 @@ +uint gs_ua; +uint gs_ub; +uint gs_uc; +uint2 gs_ua2; +uint2 gs_ub2; +uint2 gs_uc2; +uint3 gs_ua3; +uint3 gs_ub3; +uint3 gs_uc3; +uint4 gs_ua4; +uint4 gs_ub4; +uint4 gs_uc4; + +float VertexShaderFunction(float inF0, float inF1, float inF2, int inI0) +{ + uint out_u1; + + AllMemoryBarrier(); // expected error: only valid in compute stage + AllMemoryBarrierWithGroupSync(); // expected error: only valid in compute stage + asdouble(inF0, inF1); // expected error: only integer inputs + CheckAccessFullyMapped(3.0); // expected error: only valid on integers + CheckAccessFullyMapped(3); // expected error: only valid in pixel & compute stages + clip(inF0); // expected error: only valid in pixel stage + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + DeviceMemoryBarrier(); // expected error: only valid in pixel & compute stages + DeviceMemoryBarrierWithGroupSync(); // expected error: only valid in compute stage + ddx(inF0); // expected error: only valid in pixel stage + ddx_coarse(inF0); // expected error: only valid in pixel stage + ddx_fine(inF0); // expected error: only valid in pixel stage + ddy(inF0); // expected error: only valid in pixel stage + ddy_coarse(inF0); // expected error: only valid in pixel stage + ddy_fine(inF0); // expected error: only valid in pixel stage + determinant(inF0); // expected error: only valid on mats + EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + fwidth(inF0); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedCompareExchange(gs_ua, gs_ub, gs_uc, out_u1); // expected error: only valid in pixel stage + InterlockedExchange(gs_ua, gs_ub, out_u1);// expected error: only valid in pixel stage + InterlockedMax(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedMax(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedMin(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedMin(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedOr(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedOr(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + InterlockedXor(gs_ua, gs_ub); // expected error: only valid in pixel stage + InterlockedXor(gs_ua, gs_ub, out_u1); // expected error: only valid in pixel stage + GroupMemoryBarrier(); // expected error: only valid in compute stage + GroupMemoryBarrierWithGroupSync(); // expected error: only valid in compute stage + length(inF0); // expect error: invalid on scalars + msad4(inF0, float2(0), float4(0)); // expected error: only integer inputs + normalize(inF0); // expect error: invalid on scalars + reflect(inF0, inF1); // expect error: invalid on scalars + refract(inF0, inF1, inF2); // expect error: invalid on scalars + refract(float2(0), float2(0), float2(0)); // expected error: last parameter only scalar + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return 0.0; +} + +float1 VertexShaderFunction(float1 inF0, float1 inF1, float1 inF2, int1 inI0) +{ + // TODO: ... add when float1 prototypes are generated + + GetRenderTargetSamplePosition(inF0); // expected error: only integer inputs + + return 0.0; +} + +float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, int2 inI0) +{ + uint2 out_u2; + + asdouble(inF0, inF1); // expected error: only integer inputs + CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + ddx(inF0); // only valid in pixel stage + ddx_coarse(inF0); // only valid in pixel stage + ddx_fine(inF0); // only valid in pixel stage + ddy(inF0); // only valid in pixel stage + ddy_coarse(inF0); // only valid in pixel stage + ddy_fine(inF0); // only valid in pixel stage + determinant(inF0); // expect error: only valid on mats + EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + fwidth(inF0); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedCompareExchange(gs_ua2, gs_ub2, gs_uc2, out_u2); // expected error: only valid in pixel stage + InterlockedExchange(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedMax(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedMax(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedMin(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedMin(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedOr(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedOr(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + InterlockedXor(gs_ua2, gs_ub2); // expected error: only valid in pixel stage + InterlockedXor(gs_ua2, gs_ub2, out_u2); // expected error: only valid in pixel stage + noise(inF0); // expected error: only valid in pixel stage + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float2(1,2); +} + +float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, int3 inI0) +{ + uint3 out_u3; + + CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + ddx(inF0); // only valid in pixel stage + ddx_coarse(inF0); // only valid in pixel stage + ddx_fine(inF0); // only valid in pixel stage + ddy(inF0); // only valid in pixel stage + ddy_coarse(inF0); // only valid in pixel stage + ddy_fine(inF0); // only valid in pixel stage + D3DCOLORtoUBYTE4(inF0); // expected error: only on float4 inputs + determinant(inF0); // expect error: only valid on mats + EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + fwidth(inF0); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedCompareExchange(gs_ua3, gs_ub3, gs_uc3, out_u3); // expected error: only valid in pixel stage + InterlockedExchange(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedMax(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedMax(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedMin(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedMin(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedOr(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedOr(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + InterlockedXor(gs_ua3, gs_ub3); // expected error: only valid in pixel stage + InterlockedXor(gs_ua3, gs_ub3, out_u3); // expected error: only valid in pixel stage + noise(inF0); // expected error: only valid in pixel stage + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float3(1,2,3); +} + +float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, int4 inI0) +{ + uint4 out_u4; + + CheckAccessFullyMapped(inF0); // expect error: only valid on scalars + countbits(inF0); // expected error: only integer inputs + cross(inF0, inF1); // expected error: only on float3 inputs + determinant(inF0); // expect error: only valid on mats + ddx(inF0); // only valid in pixel stage + ddx_coarse(inF0); // only valid in pixel stage + ddx_fine(inF0); // only valid in pixel stage + ddy(inF0); // only valid in pixel stage + ddy_coarse(inF0); // only valid in pixel stage + ddy_fine(inF0); // only valid in pixel stage + EvaluateAttributeAtCentroid(inF0); // expected error: only valid in pixel stage + EvaluateAttributeAtSample(inF0, 2); // expected error: only valid in pixel stage + EvaluateAttributeSnapped(inF0, int2(2)); // expected error: only valid in pixel stage + f16tof32(inF0); // expected error: only integer inputs + firstbithigh(inF0); // expected error: only integer inputs + firstbitlow(inF0); // expected error: only integer inputs + fma(inF0, inF1, inF2); // expected error: only double inputs + fwidth(inF0); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedAdd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedAnd(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedCompareExchange(gs_ua4, gs_ub4, gs_uc4, out_u4); // expected error: only valid in pixel stage + InterlockedExchange(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedMax(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedMax(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedMin(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedMin(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedOr(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedOr(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + InterlockedXor(gs_ua4, gs_ub4); // expected error: only valid in pixel stage + InterlockedXor(gs_ua4, gs_ub4, out_u4); // expected error: only valid in pixel stage + noise(inF0); // expected error: only valid in pixel stage + reversebits(inF0); // expected error: only integer inputs + transpose(inF0); // expect error: only valid on mats + + // TODO: texture intrinsics, when we can declare samplers. + + return float4(1,2,3,4); +} + +// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. +#define MATFNS() \ + countbits(inF0); \ + cross(inF0, inF1); \ + D3DCOLORtoUBYTE4(inF0); \ + ddx(inF0); \ + ddx_coarse(inF0); \ + ddx_fine(inF0); \ + ddy(inF0); \ + ddy_coarse(inF0); \ + ddy_fine(inF0); \ + EvaluateAttributeAtCentroid(inF0); \ + EvaluateAttributeAtSample(inF0, 2); \ + EvaluateAttributeSnapped(inF0, int2(2)); \ + f16tof32(inF0); \ + firstbithigh(inF0); \ + firstbitlow(inF0); \ + fma(inF0, inF1, inF2); \ + fwidth(inF0); \ + noise(inF0); \ + reversebits(inF0); \ + length(inF0); \ + noise(inF0); \ + normalize(inF0); \ + reflect(inF0, inF1); \ + refract(inF0, inF1, 1.0); \ + reversebits(inF0); \ + + +// TODO: turn on non-square matrix tests when protos are available. + +float2x2 VertexShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float2x2(2,2,2,2); +} + +float3x3 VertexShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float3x3(3,3,3,3,3,3,3,3,3); +} + +float4x4 VertexShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS() + + return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); +} diff --git a/Test/hlsl.intrinsics.vert b/Test/hlsl.intrinsics.vert new file mode 100644 index 00000000..c77404ed --- /dev/null +++ b/Test/hlsl.intrinsics.vert @@ -0,0 +1,388 @@ +float VertexShaderFunction(float inF0, float inF1, float inF2, uint inU0, uint inU1) +{ + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + cos(inF0); + cosh(inF0); + countbits(7); + degrees(inF0); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + // TODO: mul(inF0, inF1); + pow(inF0, inF1); + radians(inF0); + reversebits(2); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + return 0.0; +} + +float1 VertexShaderFunction(float1 inF0, float1 inF1, float1 inF2) +{ + // TODO: ... add when float1 prototypes are generated + return 0.0; +} + +float2 VertexShaderFunction(float2 inF0, float2 inF1, float2 inF2, uint2 inU0, uint2 inU1) +{ + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + cos(inF0); + cosh(inF0); + countbits(int2(7,3)); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + // TODO: mul(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int2(1,2)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float2(1,2); +} + +float3 VertexShaderFunction(float3 inF0, float3 inF1, float3 inF2, uint3 inU0, uint3 inU1) +{ + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + cos(inF0); + cosh(inF0); + countbits(int3(7,3,5)); + cross(inF0, inF1); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + // TODO: mul(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int3(1,2,3)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float3(1,2,3); +} + +float4 VertexShaderFunction(float4 inF0, float4 inF1, float4 inF2, uint4 inU0, uint4 inU1) +{ + all(inF0); + abs(inF0); + acos(inF0); + any(inF0); + asin(inF0); + asint(inF0); + asuint(inF0); + asfloat(inU0); + // asdouble(inU0, inU1); // TODO: enable when HLSL parser used for intrinsics + atan(inF0); + atan2(inF0, inF1); + ceil(inF0); + clamp(inF0, inF1, inF2); + cos(inF0); + cosh(inF0); + countbits(int4(7,3,5,2)); + degrees(inF0); + distance(inF0, inF1); + dot(inF0, inF1); + dst(inF0, inF1); + // EvaluateAttributeAtCentroid(inF0); + // EvaluateAttributeAtSample(inF0, 0); + // TODO: EvaluateAttributeSnapped(inF0, int2(1,2)); + exp(inF0); + exp2(inF0); + faceforward(inF0, inF1, inF2); + firstbithigh(7); + firstbitlow(7); + floor(inF0); + // TODO: fma(inD0, inD1, inD2); + fmod(inF0, inF1); + frac(inF0); + frexp(inF0, inF1); + isinf(inF0); + isnan(inF0); + ldexp(inF0, inF1); + length(inF0); + log(inF0); + log10(inF0); + log2(inF0); + max(inF0, inF1); + min(inF0, inF1); + // TODO: mul(inF0, inF1); + normalize(inF0); + pow(inF0, inF1); + radians(inF0); + reflect(inF0, inF1); + refract(inF0, inF1, 2.0); + reversebits(int4(1,2,3,4)); + round(inF0); + rsqrt(inF0); + saturate(inF0); + sign(inF0); + sin(inF0); + sincos(inF0, inF1, inF2); + sinh(inF0); + smoothstep(inF0, inF1, inF2); + sqrt(inF0); + step(inF0, inF1); + tan(inF0); + tanh(inF0); + // TODO: sampler intrinsics, when we can declare the types. + trunc(inF0); + + // TODO: ... add when float1 prototypes are generated + return float4(1,2,3,4); +} + +// TODO: for mats: +// asfloat(inU0); \ +// asint(inF0); \ +// asuint(inF0); \ + +// TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. +#define MATFNS() \ + all(inF0); \ + abs(inF0); \ + acos(inF0); \ + any(inF0); \ + asin(inF0); \ + atan(inF0); \ + atan2(inF0, inF1); \ + ceil(inF0); \ + clamp(inF0, inF1, inF2); \ + cos(inF0); \ + cosh(inF0); \ + degrees(inF0); \ + determinant(inF0); \ + exp(inF0); \ + exp2(inF0); \ + firstbithigh(7); \ + firstbitlow(7); \ + floor(inF0); \ + fmod(inF0, inF1); \ + frac(inF0); \ + frexp(inF0, inF1); \ + ldexp(inF0, inF1); \ + log(inF0); \ + log10(inF0); \ + log2(inF0); \ + max(inF0, inF1); \ + min(inF0, inF1); \ + pow(inF0, inF1); \ + radians(inF0); \ + round(inF0); \ + rsqrt(inF0); \ + saturate(inF0); \ + sign(inF0); \ + sin(inF0); \ + sincos(inF0, inF1, inF2); \ + sinh(inF0); \ + smoothstep(inF0, inF1, inF2); \ + sqrt(inF0); \ + step(inF0, inF1); \ + tan(inF0); \ + tanh(inF0); \ + transpose(inF0); \ + trunc(inF0); + +// TODO: turn on non-square matrix tests when protos are available. + +float2x2 VertexShaderFunction(float2x2 inF0, float2x2 inF1, float2x2 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(); + + // TODO: ... add when float1 prototypes are generated + return float2x2(2,2,2,2); +} + +float3x3 VertexShaderFunction(float3x3 inF0, float3x3 inF1, float3x3 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(); + + // TODO: ... add when float1 prototypes are generated + return float3x3(3,3,3,3,3,3,3,3,3); +} + +float4x4 VertexShaderFunction(float4x4 inF0, float4x4 inF1, float4x4 inF2) +{ + // TODO: FXC doesn't accept this with (), but glslang doesn't accept it without. + MATFNS(); + + // TODO: ... add when float1 prototypes are generated + return float4x4(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4); +} + +#define TESTGENMUL(ST, VT, MT) \ + ST r0 = mul(inF0, inF1); \ + VT r1 = mul(inFV0, inF0); \ + VT r2 = mul(inF0, inFV0); \ + ST r3 = mul(inFV0, inFV1); \ + VT r4 = mul(inFM0, inFV0); \ + VT r5 = mul(inFV0, inFM0); \ + MT r6 = mul(inFM0, inF0); \ + MT r7 = mul(inF0, inFM0); \ + MT r8 = mul(inFM0, inFM1); + + +void TestGenMul(float inF0, float inF1, + float2 inFV0, float2 inFV1, + float2x2 inFM0, float2x2 inFM1) +{ + TESTGENMUL(float, float2, float2x2); +} + +void TestGenMul(float inF0, float inF1, + float3 inFV0, float3 inFV1, + float3x3 inFM0, float3x3 inFM1) +{ + TESTGENMUL(float, float3, float3x3); +} + +void TestGenMul(float inF0, float inF1, + float4 inFV0, float4 inFV1, + float4x4 inFM0, float4x4 inFM1) +{ + TESTGENMUL(float, float4, float4x4); +} diff --git a/Test/hlsl.scope.frag b/Test/hlsl.scope.frag new file mode 100644 index 00000000..0d8cc1ad --- /dev/null +++ b/Test/hlsl.scope.frag @@ -0,0 +1,30 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + int x; + x; + { + float x; + x; + { + bool x; + x; + { + float3 x; + x; + } + x; + } + x; + } + x; + + if (x > 0) + bool x; + + while (x > 0) + bool x; + + do { + bool x; + } while (x > 0); +} diff --git a/Test/hlsl.struct.frag b/Test/hlsl.struct.frag new file mode 100644 index 00000000..25c803d6 --- /dev/null +++ b/Test/hlsl.struct.frag @@ -0,0 +1,40 @@ +struct { +}; + +struct { + bool b; +}; + +struct myS { + bool b, c; + float4 a, d; +}; + +myS s1; + +struct { + float4 i; +} s2; + +struct { + linear float4 a; + nointerpolation bool b; + noperspective centroid float1 c; + sample centroid float2 d; + bool ff1 : SV_IsFrontFace; + bool ff2 : packoffset(c0.y); + bool ff3 : packoffset(c0.y) : register(ps_5_0, s[0]) ; + float4 ff4 : VPOS : packoffset(c0.y) : register(ps_5_0, s[0]) ; +} s4; + +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + struct FS { + bool3 b3; + } s3; + + s3 == s3; + s2.i = s4.ff4; + + return input; +} \ No newline at end of file diff --git a/Test/hlsl.swizzle.frag b/Test/hlsl.swizzle.frag new file mode 100644 index 00000000..231430a9 --- /dev/null +++ b/Test/hlsl.swizzle.frag @@ -0,0 +1,6 @@ +float4 AmbientColor = float4(1, 0.5, 0, 1); + +float4 ShaderFunction(float4 input) : COLOR0 +{ + return input.wwyx * float4(AmbientColor.z); +} diff --git a/Test/hlsl.void.frag b/Test/hlsl.void.frag new file mode 100644 index 00000000..9bf06b72 --- /dev/null +++ b/Test/hlsl.void.frag @@ -0,0 +1,8 @@ +void foo1() {} +void foo2(void) {} + +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + foo1(); + foo2(); +} \ No newline at end of file diff --git a/Test/hlsl.whileLoop.frag b/Test/hlsl.whileLoop.frag new file mode 100644 index 00000000..f282375d --- /dev/null +++ b/Test/hlsl.whileLoop.frag @@ -0,0 +1,7 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + while (input != input) { return input; } + while (false) ; + [unroll] while (false) { } + while ((false)) { } +} diff --git a/Test/spv.310.bitcast.frag b/Test/spv.310.bitcast.frag new file mode 100644 index 00000000..dbde52f8 --- /dev/null +++ b/Test/spv.310.bitcast.frag @@ -0,0 +1,41 @@ +#version 310 es + +flat in mediump int i1; +flat in lowp ivec2 i2; +flat in mediump ivec3 i3; +flat in highp ivec4 i4; + +flat in mediump uint u1; +flat in lowp uvec2 u2; +flat in mediump uvec3 u3; +flat in highp uvec4 u4; + +mediump in float f1; +lowp in vec2 f2; +mediump in vec3 f3; +highp in vec4 f4; + +void main() +{ + highp ivec4 idata = ivec4(0); + idata.x += floatBitsToInt(f1); + idata.xy += floatBitsToInt(f2); + idata.xyz += floatBitsToInt(f3); + idata += floatBitsToInt(f4); + + highp uvec4 udata = uvec4(0); + udata.x += floatBitsToUint(f1); + udata.xy += floatBitsToUint(f2); + udata.xyz += floatBitsToUint(f3); + udata += floatBitsToUint(f4); + + highp vec4 fdata = vec4(0.0); + fdata.x += intBitsToFloat(i1); + fdata.xy += intBitsToFloat(i2); + fdata.xyz += intBitsToFloat(i3); + fdata += intBitsToFloat(i4); + fdata.x += uintBitsToFloat(u1); + fdata.xy += uintBitsToFloat(u2); + fdata.xyz += uintBitsToFloat(u3); + fdata += uintBitsToFloat(u4); +} \ No newline at end of file diff --git a/Test/spv.atomic.comp b/Test/spv.atomic.comp index d1215f7c..dc1fe6e8 100644 --- a/Test/spv.atomic.comp +++ b/Test/spv.atomic.comp @@ -1,6 +1,6 @@ #version 310 es -#extension GL_ARB_gl_spirv : enable + layout(binding = 0) uniform atomic_uint counter; diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index 05c8447f..efb78d44 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -175,7 +175,7 @@ template class TList : public std::list > { }; template > -class TMap : public std::map > > { +class TMap : public std::map > > { }; template , class PRED = std::equal_to > diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index c4933e07..e37c77cd 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -1,6 +1,6 @@ // //Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -//Copyright (C) 2012-2015 LunarG, Inc. +//Copyright (C) 2012-2016 LunarG, Inc. //Copyright (C) 2015-2016 Google, Inc. // //All rights reserved. @@ -1043,8 +1043,9 @@ public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) // for "empty" type (no args) or simple scalar/vector/matrix - explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0) : - basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(false), + explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0, + bool isVector = false) : + basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr) { sampler.clear(); @@ -1052,8 +1053,9 @@ public: qualifier.storage = q; } // for explicit precision qualifier - TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0) : - basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(false), + TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0, + bool isVector = false) : + basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr) { sampler.clear(); @@ -1255,6 +1257,8 @@ public: virtual bool isStruct() const { return structure != nullptr; } virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble; } + virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint; } + // "Image" is a superset of "Subpass" virtual bool isImage() const { return basicType == EbtSampler && getSampler().isImage(); } virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); } @@ -1315,7 +1319,7 @@ public: virtual bool containsOpaque() const { - if (basicType == EbtSampler || basicType == EbtAtomicUint) + if (isOpaque()) return true; if (! structure) return false; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 3b819de0..1dee257f 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1,6 +1,6 @@ // //Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -//Copyright (C) 2012-2013 LunarG, Inc. +//Copyright (C) 2012-2016 LunarG, Inc. // //All rights reserved. // @@ -493,6 +493,36 @@ enum TOperator { EOpBitCount, EOpFindLSB, EOpFindMSB, + + // + // HLSL operations + // + + EOpClip, // discard if input value < 0 + EOpIsFinite, + EOpLog10, // base 10 log + EOpRcp, // 1/x + EOpSaturate, // clamp from 0 to 1 + EOpSinCos, // sin and cos in out parameters + EOpGenMul, // mul(x,y) on any of mat/vec/scalars + EOpDst, // x = 1, y=src0.y * src1.y, z=src0.z, w=src1.w + EOpInterlockedAdd, // atomic ops, but uses [optional] out arg instead of return + EOpInterlockedAnd, // ... + EOpInterlockedCompareExchange, // ... + EOpInterlockedCompareStore, // ... + EOpInterlockedExchange, // ... + EOpInterlockedMax, // ... + EOpInterlockedMin, // ... + EOpInterlockedOr, // ... + EOpInterlockedXor, // ... + EOpAllMemoryBarrierWithGroupSync, // memory barriers without non-hlsl AST equivalents + EOpGroupMemoryBarrierWithGroupSync, // ... + EOpWorkgroupMemoryBarrier, // ... + EOpWorkgroupMemoryBarrierWithGroupSync, // ... + EOpEvaluateAttributeSnapped, // InterpolateAtOffset with int position on 16x16 grid + EOpF32tof16, // HLSL conversion: half of a PackHalf2x16 + EOpF16tof32, // HLSL conversion: half of an UnpackHalf2x16 + EOpLit, // HLSL lighting coefficient vector }; class TIntermTraverser; diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 034962a2..e8327c45 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -63,9 +63,9 @@ const bool ForwardCompatibility = false; // Using PureOperatorBuiltins=false is deprecated. bool PureOperatorBuiltins = true; -inline bool IncludeLegacy(int version, EProfile profile, int spv) +inline bool IncludeLegacy(int version, EProfile profile, const SpvVersion& spvVersion) { - return profile != EEsProfile && (version <= 130 || (spv == 0 && ARBCompatibility) || profile == ECompatibilityProfile); + return profile != EEsProfile && (version <= 130 || (spvVersion.spv == 0 && ARBCompatibility) || profile == ECompatibilityProfile); } // Construct TBuiltInParseables base class. This can be used for language-common constructs. @@ -114,7 +114,7 @@ TBuiltIns::~TBuiltIns() // Most built-ins variables can be added as simple text strings. Some need to // be added programmatically, which is done later in IdentifyBuiltIns() below. // -void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) +void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvVersion) { //============================================================================ // @@ -859,26 +859,26 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) if ((profile == EEsProfile && version >= 300) || (profile != EEsProfile && version >= 330)) { commonBuiltins.append( - "int floatBitsToInt(float value);" - "ivec2 floatBitsToInt(vec2 value);" - "ivec3 floatBitsToInt(vec3 value);" - "ivec4 floatBitsToInt(vec4 value);" + "highp int floatBitsToInt(highp float value);" + "highp ivec2 floatBitsToInt(highp vec2 value);" + "highp ivec3 floatBitsToInt(highp vec3 value);" + "highp ivec4 floatBitsToInt(highp vec4 value);" - "uint floatBitsToUint(float value);" - "uvec2 floatBitsToUint(vec2 value);" - "uvec3 floatBitsToUint(vec3 value);" - "uvec4 floatBitsToUint(vec4 value);" - - "float intBitsToFloat(int value);" - "vec2 intBitsToFloat(ivec2 value);" - "vec3 intBitsToFloat(ivec3 value);" - "vec4 intBitsToFloat(ivec4 value);" - - "float uintBitsToFloat(uint value);" - "vec2 uintBitsToFloat(uvec2 value);" - "vec3 uintBitsToFloat(uvec3 value);" - "vec4 uintBitsToFloat(uvec4 value);" - + "highp uint floatBitsToUint(highp float value);" + "highp uvec2 floatBitsToUint(highp vec2 value);" + "highp uvec3 floatBitsToUint(highp vec3 value);" + "highp uvec4 floatBitsToUint(highp vec4 value);" + + "highp float intBitsToFloat(highp int value);" + "highp vec2 intBitsToFloat(highp ivec2 value);" + "highp vec3 intBitsToFloat(highp ivec3 value);" + "highp vec4 intBitsToFloat(highp ivec4 value);" + + "highp float uintBitsToFloat(highp uint value);" + "highp vec2 uintBitsToFloat(highp uvec2 value);" + "highp vec3 uintBitsToFloat(highp uvec3 value);" + "highp vec4 uintBitsToFloat(highp uvec4 value);" + "\n"); } @@ -1174,7 +1174,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) profile == ECompatibilityProfile || (profile == ECoreProfile && version < 420) || profile == ENoProfile) { - if (spv == 0) { + if (spvVersion.spv == 0) { commonBuiltins.append( "vec4 texture2D(sampler2D, vec2);" @@ -1193,7 +1193,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) if ( profile == ECompatibilityProfile || (profile == ECoreProfile && version < 420) || profile == ENoProfile) { - if (spv == 0) { + if (spvVersion.spv == 0) { commonBuiltins.append( "vec4 texture1D(sampler1D, float);" @@ -1216,7 +1216,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) } if (profile == EEsProfile) { - if (spv == 0) { + if (spvVersion.spv == 0) { commonBuiltins.append( "vec4 texture2D(samplerExternalOES, vec2 coord);" // GL_OES_EGL_image_external, caught by keyword check "vec4 texture2DProj(samplerExternalOES, vec3);" // GL_OES_EGL_image_external, caught by keyword check @@ -1258,7 +1258,8 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "\n"); } - if (vulkan == 0) { + if (spvVersion.vulkan == 0) { + // gl_spirv TODO // // Atomic counter functions. // @@ -1479,7 +1480,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) // // Geometric Functions. // - if (IncludeLegacy(version, profile, spv)) + if (IncludeLegacy(version, profile, spvVersion)) stageBuiltins[EShLangVertex].append("vec4 ftransform();"); // @@ -1494,7 +1495,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) profile == ECompatibilityProfile || (profile == ECoreProfile && version < 420) || profile == ENoProfile) { - if (spv == 0) { + if (spvVersion.spv == 0) { s->append( "vec4 texture2DLod(sampler2D, vec2, float);" // GL_ARB_shader_texture_lod "vec4 texture2DProjLod(sampler2D, vec3, float);" // GL_ARB_shader_texture_lod @@ -1509,7 +1510,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) if ( profile == ECompatibilityProfile || (profile == ECoreProfile && version < 420) || profile == ENoProfile) { - if (spv == 0) { + if (spvVersion.spv == 0) { s->append( "vec4 texture1DLod(sampler1D, float, float);" // GL_ARB_shader_texture_lod "vec4 texture1DProjLod(sampler1D, vec2, float);" // GL_ARB_shader_texture_lod @@ -1572,7 +1573,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) stageBuiltins[EShLangTessControl].append( "void barrier();" ); - if ((profile != EEsProfile && version >= 430) || esBarrier) + if ((profile != EEsProfile && version >= 420) || esBarrier) stageBuiltins[EShLangCompute].append( "void barrier();" ); @@ -1580,7 +1581,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) commonBuiltins.append( "void memoryBarrier();" ); - if ((profile != EEsProfile && version >= 430) || esBarrier) { + if ((profile != EEsProfile && version >= 420) || esBarrier) { commonBuiltins.append( "void memoryBarrierAtomicCounter();" "void memoryBarrierBuffer();" @@ -1601,7 +1602,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) // // Original-style texture Functions with bias. // - if (spv == 0 && (profile != EEsProfile || version == 100)) { + if (spvVersion.spv == 0 && (profile != EEsProfile || version == 100)) { stageBuiltins[EShLangFragment].append( "vec4 texture2D(sampler2D, vec2, float);" "vec4 texture2DProj(sampler2D, vec3, float);" @@ -1612,7 +1613,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "\n"); } - if (spv == 0 && (profile != EEsProfile && version > 100)) { + if (spvVersion.spv == 0 && (profile != EEsProfile && version > 100)) { stageBuiltins[EShLangFragment].append( "vec4 texture1D(sampler1D, float, float);" "vec4 texture1DProj(sampler1D, vec2, float);" @@ -1624,7 +1625,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "\n"); } - if (spv == 0 && profile == EEsProfile) { + if (spvVersion.spv == 0 && profile == EEsProfile) { stageBuiltins[EShLangFragment].append( "vec4 texture2DLodEXT(sampler2D, vec2, float);" // GL_EXT_shader_texture_lod "vec4 texture2DProjLodEXT(sampler2D, vec3, float);" // GL_EXT_shader_texture_lod @@ -1722,7 +1723,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) // // Depth range in window coordinates, p. 33 // - if (vulkan == 0) { + if (spvVersion.spv == 0) { commonBuiltins.append( "struct gl_DepthRangeParameters {" ); @@ -1746,7 +1747,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "\n"); } - if (vulkan == 0 && IncludeLegacy(version, profile, spv)) { + if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) { // // Matrix state. p. 31, 32, 37, 39, 40. // @@ -1871,7 +1872,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) // //============================================================================ - if ((profile != EEsProfile && version >= 430) || + if ((profile != EEsProfile && version >= 420) || (profile == EEsProfile && version >= 310)) { stageBuiltins[EShLangCompute].append( "in highp uvec3 gl_NumWorkGroups;" @@ -1909,7 +1910,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "attribute vec4 gl_MultiTexCoord7;" "attribute float gl_FogCoord;" "\n"); - } else if (IncludeLegacy(version, profile, spv)) { + } else if (IncludeLegacy(version, profile, spvVersion)) { stageBuiltins[EShLangVertex].append( "in vec4 gl_Color;" "in vec4 gl_SecondaryColor;" @@ -1938,7 +1939,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "varying vec4 gl_TexCoord[];" "varying float gl_FogFragCoord;" "\n"); - } else if (IncludeLegacy(version, profile, spv)) { + } else if (IncludeLegacy(version, profile, spvVersion)) { stageBuiltins[EShLangVertex].append( " vec4 gl_ClipVertex;" // needs qualifier fixed later "out vec4 gl_FrontColor;" @@ -1966,7 +1967,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "float gl_PointSize;" // needs qualifier fixed later "float gl_ClipDistance[];" ); - if (IncludeLegacy(version, profile, spv)) + if (IncludeLegacy(version, profile, spvVersion)) stageBuiltins[EShLangVertex].append( "vec4 gl_ClipVertex;" // needs qualifier fixed later "vec4 gl_FrontColor;" @@ -1984,15 +1985,18 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "};" "\n"); } - if (version >= 130 && vulkan == 0) + if (version >= 130 && spvVersion.vulkan == 0) + // gl_spirv TODO stageBuiltins[EShLangVertex].append( "int gl_VertexID;" // needs qualifier fixed later ); - if (version >= 140 && vulkan == 0) + if (version >= 140 && spvVersion.vulkan == 0) + // gl_spirv TODO stageBuiltins[EShLangVertex].append( "int gl_InstanceID;" // needs qualifier fixed later ); - if (vulkan > 0 && version >= 140) + if (spvVersion.vulkan >= 100 && version >= 140) + // gl_spirv TODO stageBuiltins[EShLangVertex].append( "in int gl_VertexIndex;" "in int gl_InstanceIndex;" @@ -2012,12 +2016,14 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "mediump float gl_PointSize;" // needs qualifier fixed later ); } else { - if (vulkan == 0) + if (spvVersion.vulkan == 0) + // gl_spirv TODO stageBuiltins[EShLangVertex].append( "in highp int gl_VertexID;" // needs qualifier fixed later "in highp int gl_InstanceID;" // needs qualifier fixed later ); - if (vulkan > 0) + if (spvVersion.vulkan >= 100) + // gl_spirv TODO stageBuiltins[EShLangVertex].append( "in highp int gl_VertexIndex;" "in highp int gl_InstanceIndex;" @@ -2270,7 +2276,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) stageBuiltins[EShLangFragment].append( "vec2 gl_PointCoord;" // needs qualifier fixed later ); - if (IncludeLegacy(version, profile, spv) || (! ForwardCompatibility && version < 420)) + if (IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && version < 420)) stageBuiltins[EShLangFragment].append( "vec4 gl_FragColor;" // needs qualifier fixed later ); @@ -2287,7 +2293,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) "in float gl_ClipDistance[];" ); - if (IncludeLegacy(version, profile, spv)) { + if (IncludeLegacy(version, profile, spvVersion)) { if (version < 150) stageBuiltins[EShLangFragment].append( "in float gl_FogFragCoord;" @@ -2373,7 +2379,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) stageBuiltins[EShLangFragment].append("\n"); if (version >= 130) - add2ndGenerationSamplingImaging(version, profile, spv, vulkan); + add2ndGenerationSamplingImaging(version, profile, spvVersion); // GL_ARB_shader_ballot if (profile != EEsProfile && version >= 450) { @@ -2398,7 +2404,7 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv, int vulkan) // Helper function for initialize(), to add the second set of names for texturing, // when adding context-independent built-in functions. // -void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, int /*spv*/, int vulkan) +void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, const SpvVersion& spvVersion) { // // In this function proper, enumerate the types, then calls the next set of functions @@ -2425,7 +2431,7 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, i for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, 2D, ..., buffer - if (dim == EsdSubpass && vulkan == 0) + if (dim == EsdSubpass && spvVersion.vulkan == 0) continue; if (dim == EsdSubpass && (image || shadow || arrayed)) continue; @@ -3029,7 +3035,7 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int vers // add stage-specific entries to the commonBuiltins, and only if that stage // was requested. // -void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, int spv, int vulkan, EShLanguage language) +void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language) { // // Initialize the context-dependent (resource-dependent) built-in strings for parsing. @@ -3192,7 +3198,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentUniformComponents = %d;", resources.maxFragmentUniformComponents); s.append(builtInConstant); - if (vulkan == 0 && IncludeLegacy(version, profile, spv)) { + if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) { // // OpenGL'uniform' state. Page numbers are in reference to version // 1.4 of the OpenGL specification. @@ -3421,7 +3427,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf // compute - if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 430)) { + if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) { snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX, resources.maxComputeWorkGroupCountY, resources.maxComputeWorkGroupCountZ); @@ -3536,7 +3542,7 @@ static void BuiltInVariable(const char* blockName, const char* name, TBuiltInVar // 3) Tag extension-related symbols added to their base version with their extensions, so // that if an early version has the extension turned off, there is an error reported on use. // -void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLanguage language, TSymbolTable& symbolTable) +void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) { // // Tag built-in variables and functions with additional qualifier and extension information @@ -3589,7 +3595,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul } // Compatibility variables, vertex only - if (spv == 0) { + if (spvVersion.spv == 0) { BuiltInVariable("gl_Color", EbvColor, symbolTable); BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable); BuiltInVariable("gl_Normal", EbvNormal, symbolTable); @@ -3606,7 +3612,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul } if (profile == EEsProfile) { - if (spv == 0) { + if (spvVersion.spv == 0) { symbolTable.setFunctionExtensions("texture2DGradEXT", 1, &E_GL_EXT_shader_texture_lod); symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod); symbolTable.setFunctionExtensions("textureCubeGradEXT", 1, &E_GL_EXT_shader_texture_lod); @@ -3627,7 +3633,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic); } - if (vulkan == 0) { + if (spvVersion.vulkan == 0) { + // gl_spirv TODO SpecialQualifier("gl_VertexID", EvqVertexId, EbvVertexId, symbolTable); SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable); } @@ -3762,7 +3769,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul // built-in functions if (profile == EEsProfile) { - if (spv == 0) { + if (spvVersion.spv == 0) { symbolTable.setFunctionExtensions("texture2DLodEXT", 1, &E_GL_EXT_shader_texture_lod); symbolTable.setFunctionExtensions("texture2DProjLodEXT", 1, &E_GL_EXT_shader_texture_lod); symbolTable.setFunctionExtensions("textureCubeLodEXT", 1, &E_GL_EXT_shader_texture_lod); @@ -3783,7 +3790,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul symbolTable.setFunctionExtensions("interpolateAtOffset", 1, &E_GL_OES_shader_multisample_interpolation); } } else if (version < 130) { - if (spv == 0) { + if (spvVersion.spv == 0) { symbolTable.setFunctionExtensions("texture1DLod", 1, &E_GL_ARB_shader_texture_lod); symbolTable.setFunctionExtensions("texture2DLod", 1, &E_GL_ARB_shader_texture_lod); symbolTable.setFunctionExtensions("texture3DLod", 1, &E_GL_ARB_shader_texture_lod); @@ -3799,7 +3806,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul } // E_GL_ARB_shader_texture_lod functions usable only with the extension enabled - if (profile != EEsProfile && spv == 0) { + if (profile != EEsProfile && spvVersion.spv == 0) { symbolTable.setFunctionExtensions("texture1DGradARB", 1, &E_GL_ARB_shader_texture_lod); symbolTable.setFunctionExtensions("texture1DProjGradARB", 1, &E_GL_ARB_shader_texture_lod); symbolTable.setFunctionExtensions("texture2DGradARB", 1, &E_GL_ARB_shader_texture_lod); @@ -3896,6 +3903,30 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul BuiltInVariable("gl_LocalInvocationID", EbvLocalInvocationId, symbolTable); BuiltInVariable("gl_GlobalInvocationID", EbvGlobalInvocationId, symbolTable); BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable); + + if (profile != EEsProfile && version < 430) { + symbolTable.setVariableExtensions("gl_NumWorkGroups", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_WorkGroupSize", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_WorkGroupID", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationID", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_GlobalInvocationID", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_ARB_compute_shader); + + symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupCount", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupSize", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeUniformComponents", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeTextureImageUnits", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeImageUniforms", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounters", 1, &E_GL_ARB_compute_shader); + symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounterBuffers", 1, &E_GL_ARB_compute_shader); + + symbolTable.setFunctionExtensions("barrier", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("memoryBarrierAtomicCounter", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("memoryBarrierBuffer", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("memoryBarrierImage", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("memoryBarrierShared", 1, &E_GL_ARB_compute_shader); + symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_ARB_compute_shader); + } break; default: @@ -4092,7 +4123,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul symbolTable.relateToOperator("noise3", EOpNoise); symbolTable.relateToOperator("noise4", EOpNoise); - if (spv == 0 && (IncludeLegacy(version, profile, spv) || (profile == EEsProfile && version == 100))) { + if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) || + (profile == EEsProfile && version == 100))) { symbolTable.relateToOperator("ftransform", EOpFtransform); symbolTable.relateToOperator("texture1D", EOpTexture); @@ -4232,7 +4264,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int vul // 2) Tag extension-related symbols added to their base version with their extensions, so // that if an early version has the extension turned off, there is an error reported on use. // -void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int /*vulkan*/, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) +void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) { if (profile != EEsProfile && version >= 430 && version < 440) { symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts); @@ -4248,7 +4280,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, int spv, int /*v switch(language) { case EShLangFragment: // Set up gl_FragData based on current array size. - if (version == 100 || IncludeLegacy(version, profile, spv) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) { + if (version == 100 || IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) { TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone; TType fragData(EbtFloat, EvqFragColor, pq, 4); TArraySizes& arraySizes = *new TArraySizes; diff --git a/glslang/MachineIndependent/Initialize.h b/glslang/MachineIndependent/Initialize.h index 40551cdd..23f57acc 100644 --- a/glslang/MachineIndependent/Initialize.h +++ b/glslang/MachineIndependent/Initialize.h @@ -61,14 +61,14 @@ public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) TBuiltInParseables(); virtual ~TBuiltInParseables(); - virtual void initialize(int version, EProfile, int spv, int vulkan) = 0; - virtual void initialize(const TBuiltInResource& resources, int version, EProfile, int spv, int vulkan, EShLanguage) = 0; + virtual void initialize(int version, EProfile, const SpvVersion& spvVersion) = 0; + virtual void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage) = 0; virtual const TString& getCommonString() const { return commonBuiltins; } virtual const TString& getStageString(EShLanguage language) const { return stageBuiltins[language]; } - virtual void identifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLanguage language, TSymbolTable& symbolTable) = 0; + virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) = 0; - virtual void identifyBuiltIns(int version, EProfile profile, int spv, int /*vulkan*/, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) = 0; + virtual void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) = 0; protected: TString commonBuiltins; @@ -85,15 +85,15 @@ public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) TBuiltIns(); virtual ~TBuiltIns(); - void initialize(int version, EProfile, int spv, int vulkan); - void initialize(const TBuiltInResource& resources, int version, EProfile, int spv, int vulkan, EShLanguage); + void initialize(int version, EProfile, const SpvVersion& spvVersion); + void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage); - void identifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLanguage language, TSymbolTable& symbolTable); + void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable); - void identifyBuiltIns(int version, EProfile profile, int spv, int /*vulkan*/, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources); + void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources); protected: - void add2ndGenerationSamplingImaging(int version, EProfile profile, int spv, int vulkan); + void add2ndGenerationSamplingImaging(int version, EProfile profile, const SpvVersion& spvVersion); void addSubpassSampling(TSampler, TString& typeName, int version, EProfile profile); void addQueryFunctions(TSampler, TString& typeName, int version, EProfile profile); void addImageFunctions(TSampler, TString& typeName, int version, EProfile profile); diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 416dc34a..02681ac5 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -1028,7 +1028,7 @@ const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool } // -// Create loop nodes. +// Create while and do-while loop nodes. // TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc) { @@ -1038,6 +1038,22 @@ TIntermLoop* TIntermediate::addLoop(TIntermNode* body, TIntermTyped* test, TInte return node; } +// +// Create a for-loop sequence. +// +TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* initializer, TIntermTyped* test, TIntermTyped* terminal, bool testFirst, const TSourceLoc& loc) +{ + TIntermLoop* node = new TIntermLoop(body, test, terminal, testFirst); + node->setLoc(loc); + + // make a sequence of the initializer and statement + TIntermAggregate* loopSequence = makeAggregate(initializer, loc); + loopSequence = growAggregate(loopSequence, node); + loopSequence->setOperator(EOpSequence); + + return loopSequence; +} + // // Add branches. // diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 15d0dae3..8d7ecdec 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -49,9 +49,9 @@ extern int yyparse(glslang::TParseContext*); namespace glslang { TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins, - int version, EProfile profile, int spv, int vulkan, EShLanguage language, + int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) : - TParseContextBase(symbolTable, interm, version, profile, spv, vulkan, language, infoSink, forwardCompatible, messages), + TParseContextBase(symbolTable, interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), contextPragma(true, false), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), statementNestingLevel(0), inMain(false), postMainReturn(false), currentFunctionType(nullptr), blockName(nullptr), limits(resources.limits), parsingBuiltins(parsingBuiltins), @@ -104,11 +104,11 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b globalUniformDefaults.clear(); globalUniformDefaults.layoutMatrix = ElmColumnMajor; - globalUniformDefaults.layoutPacking = vulkan > 0 ? ElpStd140 : ElpShared; + globalUniformDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd140 : ElpShared; globalBufferDefaults.clear(); globalBufferDefaults.layoutMatrix = ElmColumnMajor; - globalBufferDefaults.layoutPacking = vulkan > 0 ? ElpStd430 : ElpShared; + globalBufferDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd430 : ElpShared; globalInputDefaults.clear(); globalOutputDefaults.clear(); @@ -622,10 +622,20 @@ void TParseContext::makeEditable(TSymbol*& symbol) intermediate.addSymbolLinkageNode(linkage, *symbol); } +// Return a writable version of the variable 'name'. +// +// Return nullptr if 'name' is not found. This should mean +// something is seriously wrong (e.g., compiler asking self for +// built-in that doesn't exist). TVariable* TParseContext::getEditableVariable(const char* name) { bool builtIn; TSymbol* symbol = symbolTable.find(name, &builtIn); + + assert(symbol != nullptr); + if (symbol == nullptr) + return nullptr; + if (builtIn) makeEditable(symbol); @@ -2555,7 +2565,7 @@ void TParseContext::transparentCheck(const TSourceLoc& loc, const TType& type, c return; // Vulkan doesn't allow transparent uniforms outside of blocks - if (vulkan == 0 || type.getQualifier().storage != EvqUniform) + if (spvVersion.vulkan == 0 || type.getQualifier().storage != EvqUniform) return; if (type.containsNonOpaque()) vulkanRemoved(loc, "non-opaque uniforms outside a block"); @@ -2651,6 +2661,8 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali requireProfile(loc, ~EEsProfile, "vertex input arrays"); profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays"); } + if (publicType.basicType == EbtDouble) + profileRequires(loc, ~EEsProfile, 410, nullptr, "vertex-shader `double` type input"); if (qualifier.isAuxiliary() || qualifier.isInterpolation() || qualifier.isMemory() || qualifier.invariant) error(loc, "vertex input cannot be further qualified", "", ""); break; @@ -2725,6 +2737,8 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali error(loc, "can't use auxiliary qualifier on a fragment output", "centroid/sample/patch", ""); if (qualifier.isInterpolation()) error(loc, "can't use interpolation qualifier on a fragment output", "flat/smooth/noperspective", ""); + if (publicType.basicType == EbtDouble) + error(loc, "cannot contain a double", GetStorageQualifierString(qualifier.storage), ""); break; case EShLangCompute: @@ -2857,11 +2871,17 @@ void TParseContext::setDefaultPrecision(const TSourceLoc& loc, TPublicType& publ // correlates with the declaration of defaultSamplerPrecision[] int TParseContext::computeSamplerTypeIndex(TSampler& sampler) { - int arrayIndex = sampler.arrayed ? 1 : 0; - int shadowIndex = sampler.shadow ? 1 : 0; - int externalIndex = sampler.external ? 1 : 0; + int arrayIndex = sampler.arrayed ? 1 : 0; + int shadowIndex = sampler.shadow ? 1 : 0; + int externalIndex = sampler.external? 1 : 0; + int imageIndex = sampler.image ? 1 : 0; + int msIndex = sampler.ms ? 1 : 0; - return EsdNumDims * (EbtNumTypes * (2 * (2 * arrayIndex + shadowIndex) + externalIndex) + sampler.type) + sampler.dim; + int flattened = EsdNumDims * (EbtNumTypes * (2 * (2 * (2 * (2 * arrayIndex + msIndex) + imageIndex) + shadowIndex) + + externalIndex) + sampler.type) + sampler.dim; + assert(flattened < maxSamplerIndex); + + return flattened; } TPrecisionQualifier TParseContext::getDefaultPrecision(TPublicType& publicType) @@ -3844,7 +3864,7 @@ void TParseContext::finalErrorCheck() break; case EShLangCompute: if (profile != EEsProfile && version < 430) - requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "tessellation shaders"); + requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders"); break; default: break; @@ -3870,14 +3890,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } if (id == TQualifier::getLayoutPackingString(ElpPacked)) { - if (vulkan > 0) - vulkanRemoved(loc, "packed"); + if (spvVersion.spv != 0) + spvRemoved(loc, "packed"); publicType.qualifier.layoutPacking = ElpPacked; return; } if (id == TQualifier::getLayoutPackingString(ElpShared)) { - if (vulkan > 0) - vulkanRemoved(loc, "shared"); + if (spvVersion.spv != 0) + spvRemoved(loc, "shared"); publicType.qualifier.layoutPacking = ElpShared; return; } @@ -4215,6 +4235,13 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi requireProfile(loc, ECompatibilityProfile | ECoreProfile, "index layout qualifier on fragment output"); const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; profileRequires(loc, ECompatibilityProfile | ECoreProfile, 330, 2, exts, "index layout qualifier on fragment output"); + + // "It is also a compile-time error if a fragment shader sets a layout index to less than 0 or greater than 1." + if (value < 0 || value > 1) { + value = 0; + error(loc, "value must be 0 or 1", "index", ""); + } + publicType.qualifier.layoutIndex = value; return; } @@ -4222,6 +4249,8 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi case EShLangCompute: if (id.compare(0, 11, "local_size_") == 0) { + profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize"); + profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize"); if (id == "local_size_x") { publicType.shaderQualifiers.localSize[0] = value; return; @@ -4234,7 +4263,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi publicType.shaderQualifiers.localSize[2] = value; return; } - if (spv > 0) { + if (spvVersion.spv != 0) { if (id == "local_size_x_id") { publicType.shaderQualifiers.localSizeSpecId[0] = value; return; @@ -5054,11 +5083,13 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp // "In declarations of global variables with no storage qualifier or with a const // qualifier any initializer must be a constant expression." if (symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) { - const char* initFeature = "non-constant global initializer"; - if (relaxedErrors()) - warn(loc, "not allowed in this version", initFeature, ""); - else - requireProfile(loc, ~EEsProfile, initFeature); + const char* initFeature = "non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)"; + if (profile == EEsProfile) { + if (relaxedErrors() && ! extensionTurnedOn(E_GL_EXT_shader_non_constant_global_initializers)) + warn(loc, "not allowed in this version", initFeature, ""); + else + profileRequires(loc, EEsProfile, 0, E_GL_EXT_shader_non_constant_global_initializers, initFeature); + } } } @@ -5967,7 +5998,8 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con // Fix the existing constant gl_WorkGroupSize with this new information. TVariable* workGroupSize = getEditableVariable("gl_WorkGroupSize"); - workGroupSize->getWritableConstArray()[i].setUConst(intermediate.getLocalSize(i)); + if (workGroupSize != nullptr) + workGroupSize->getWritableConstArray()[i].setUConst(intermediate.getLocalSize(i)); } } else error(loc, "can only apply to 'in'", "local_size", ""); @@ -5980,7 +6012,8 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con error(loc, "can only apply to 'in'", "local_size id", ""); // Set the workgroup built-in variable as a specialization constant TVariable* workGroupSize = getEditableVariable("gl_WorkGroupSize"); - workGroupSize->getWritableType().getQualifier().specConstant = true; + if (workGroupSize != nullptr) + workGroupSize->getWritableType().getQualifier().specConstant = true; } } if (publicType.shaderQualifiers.earlyFragmentTests) { diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index a4775e71..67815bbb 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -74,9 +74,9 @@ typedef std::set TIdSetType; class TParseContextBase : public TParseVersions { public: TParseContextBase(TSymbolTable& symbolTable, TIntermediate& interm, int version, - EProfile profile, int spv, int vulkan, EShLanguage language, + EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) - : TParseVersions(interm, version, profile, spv, vulkan, language, infoSink, forwardCompatible, messages), + : TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), symbolTable(symbolTable), tokensBeforeEOF(false), linkage(nullptr), scanContext(nullptr), ppContext(nullptr) { } virtual ~TParseContextBase() { } @@ -151,7 +151,7 @@ protected: // class TParseContext : public TParseContextBase { public: - TParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, int version, EProfile, int spv, int vulkan, EShLanguage, TInfoSink&, + TParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&, bool forwardCompatible = false, EShMessages messages = EShMsgDefault); virtual ~TParseContext(); @@ -335,7 +335,7 @@ protected: TParseContext& operator=(TParseContext&); const bool parsingBuiltins; // true if parsing built-in symbols/functions - static const int maxSamplerIndex = EsdNumDims * (EbtNumTypes * (2 * 2 * 2)); // see computeSamplerTypeIndex() + static const int maxSamplerIndex = EsdNumDims * (EbtNumTypes * (2 * 2 * 2 * 2 * 2)); // see computeSamplerTypeIndex() TPrecisionQualifier defaultSamplerPrecision[maxSamplerIndex]; bool afterEOF; TQualifier globalBufferDefaults; diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index 762fb86c..b8cb869f 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -1092,7 +1092,7 @@ int TScanContext::tokenizeIdentifier() case TEXTURE1DARRAY: case SAMPLER: case SAMPLERSHADOW: - if (parseContext.spv > 0) + if (parseContext.spvVersion.vulkan >= 100) return keyword; else return identifierOrType(); @@ -1103,7 +1103,7 @@ int TScanContext::tokenizeIdentifier() case ISUBPASSINPUTMS: case USUBPASSINPUT: case USUBPASSINPUTMS: - if (parseContext.spv > 0) + if (parseContext.spvVersion.vulkan >= 100) return keyword; else return identifierOrType(); diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 1446298c..9766fa33 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -69,9 +69,6 @@ using namespace glslang; // Create a language specific version of parseables. TBuiltInParseables* CreateBuiltInParseables(TInfoSink& infoSink, EShSource source) { - // TODO: hardcode to the GLSL path, until HLSL intrinsics are available. - source = EShSourceGlsl; // REMOVE - switch (source) { case EShSourceGlsl: return new TBuiltIns(); // GLSL builtIns case EShSourceHlsl: return new TBuiltInParseablesHlsl(); // HLSL intrinsics @@ -81,7 +78,7 @@ TBuiltInParseables* CreateBuiltInParseables(TInfoSink& infoSink, EShSource sourc return nullptr; } } - + // Local mapping functions for making arrays of symbol tables.... int MapVersionToIndex(int version) @@ -144,12 +141,12 @@ TPoolAllocator* PerProcessGPA = 0; // // Parse and add to the given symbol table the content of the given shader string. // -bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, int spv, int vulkan, EShLanguage language, TInfoSink& infoSink, +bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, TSymbolTable& symbolTable) { TIntermediate intermediate(language, version, profile); - TParseContext parseContext(symbolTable, intermediate, true, version, profile, spv, vulkan, language, infoSink); + TParseContext parseContext(symbolTable, intermediate, true, version, profile, spvVersion, language, infoSink); TShader::ForbidInclude includer; TPpContext ppContext(parseContext, "", includer); TScanContext scanContext(parseContext); @@ -169,6 +166,9 @@ bool InitializeSymbolTable(const TString& builtIns, int version, EProfile profil builtInShaders[0] = builtIns.c_str(); builtInLengths[0] = builtIns.size(); + if (builtInLengths[0] == 0) + return true; + TInputScanner input(1, builtInShaders, builtInLengths); if (! parseContext.parseShaderStrings(ppContext, input) != 0) { infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins"); @@ -189,12 +189,12 @@ int CommonIndex(EProfile profile, EShLanguage language) // // To initialize per-stage shared tables, with the common table already complete. // -void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int version, EProfile profile, int spv, int vulkan, +void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables) { (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]); - InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spv, vulkan, language, infoSink, *symbolTables[language]); - builtInParseables.identifyBuiltIns(version, profile, spv, vulkan, language, *symbolTables[language]); + InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, infoSink, *symbolTables[language]); + builtInParseables.identifyBuiltIns(version, profile, spvVersion, language, *symbolTables[language]); if (profile == EEsProfile && version >= 300) (*symbolTables[language]).setNoBuiltInRedeclarations(); if (version == 110) @@ -205,51 +205,51 @@ void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int versi // Initialize the full set of shareable symbol tables; // The common (cross-stage) and those shareable per-stage. // -bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables, int version, EProfile profile, int spv, int vulkan, EShSource source) +bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TSymbolTable** symbolTables, int version, EProfile profile, const SpvVersion& spvVersion, EShSource source) { std::unique_ptr builtInParseables(CreateBuiltInParseables(infoSink, source)); - builtInParseables->initialize(version, profile, spv, vulkan); + builtInParseables->initialize(version, profile, spvVersion); // do the common tables - InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spv, vulkan, EShLangVertex, infoSink, *commonTable[EPcGeneral]); + InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, infoSink, *commonTable[EPcGeneral]); if (profile == EEsProfile) - InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spv, vulkan, EShLangFragment, infoSink, *commonTable[EPcFragment]); + InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, infoSink, *commonTable[EPcFragment]); // do the per-stage tables // always have vertex and fragment - InitializeStageSymbolTable(*builtInParseables, version, profile, spv, vulkan, EShLangVertex, infoSink, commonTable, symbolTables); - InitializeStageSymbolTable(*builtInParseables, version, profile, spv, vulkan, EShLangFragment, infoSink, commonTable, symbolTables); + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, infoSink, commonTable, symbolTables); + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, infoSink, commonTable, symbolTables); // check for tessellation if ((profile != EEsProfile && version >= 150) || (profile == EEsProfile && version >= 310)) { - InitializeStageSymbolTable(*builtInParseables, version, profile, spv, vulkan, EShLangTessControl, infoSink, commonTable, symbolTables); - InitializeStageSymbolTable(*builtInParseables, version, profile, spv, vulkan, EShLangTessEvaluation, infoSink, commonTable, symbolTables); + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, infoSink, commonTable, symbolTables); + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, infoSink, commonTable, symbolTables); } // check for geometry if ((profile != EEsProfile && version >= 150) || (profile == EEsProfile && version >= 310)) - InitializeStageSymbolTable(*builtInParseables, version, profile, spv, vulkan, EShLangGeometry, infoSink, commonTable, symbolTables); + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, infoSink, commonTable, symbolTables); // check for compute - if ((profile != EEsProfile && version >= 430) || + if ((profile != EEsProfile && version >= 420) || (profile == EEsProfile && version >= 310)) - InitializeStageSymbolTable(*builtInParseables, version, profile, spv, vulkan, EShLangCompute, infoSink, commonTable, symbolTables); - + InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, infoSink, commonTable, symbolTables); + return true; } bool AddContextSpecificSymbols(const TBuiltInResource* resources, TInfoSink& infoSink, TSymbolTable& symbolTable, int version, - EProfile profile, int spv, int vulkan, EShLanguage language, EShSource source) + EProfile profile, const SpvVersion& spvVersion, EShLanguage language, EShSource source) { std::unique_ptr builtInParseables(CreateBuiltInParseables(infoSink, source)); - builtInParseables->initialize(*resources, version, profile, spv, vulkan, language); - InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spv, vulkan, language, infoSink, symbolTable); - builtInParseables->identifyBuiltIns(version, profile, spv, vulkan, language, symbolTable, *resources); + builtInParseables->initialize(*resources, version, profile, spvVersion, language); + InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, infoSink, symbolTable); + builtInParseables->identifyBuiltIns(version, profile, spvVersion, language, symbolTable, *resources); return true; } @@ -266,7 +266,7 @@ bool AddContextSpecificSymbols(const TBuiltInResource* resources, TInfoSink& inf // This only gets done the first time any thread needs a particular symbol table // (lazy evaluation). // -void SetupBuiltinSymbolTable(int version, EProfile profile, int spv, int vulkan, EShSource source) +void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& spvVersion, EShSource source) { TInfoSink infoSink; @@ -296,7 +296,7 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, int spv, int vulkan, stageTables[stage] = new TSymbolTable; // Generate the local symbol tables using the new pool - InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spv, vulkan, source); + InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spvVersion, source); // Switch to the process-global pool SetThreadPoolAllocator(*PerProcessGPA); @@ -332,13 +332,13 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, int spv, int vulkan, // Return true if the shader was correctly specified for version/profile/stage. bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNotFirst, int defaultVersion, - EShSource source, int& version, EProfile& profile, int spv) + EShSource source, int& version, EProfile& profile, const SpvVersion& spvVersion) { const int FirstProfileVersion = 150; bool correct = true; if (source == EShSourceHlsl) { - version = defaultVersion; + version = 450; // TODO: GLSL parser is still used for builtins. profile = ENoProfile; return correct; } @@ -417,7 +417,7 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo (profile != EEsProfile && version < 420)) { correct = false; infoSink.info.message(EPrefixError, "#version: compute shaders require es profile with version 310 or above, or non-es profile with version 420 or above"); - version = profile == EEsProfile ? 310 : 430; // 420 supports the extension, correction is to 430 which does not + version = profile == EEsProfile ? 310 : 420; } break; default: @@ -430,19 +430,27 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo } // Check for SPIR-V compatibility - if (spv > 0) { - if (profile == EEsProfile) { - if (version < 310) { + if (spvVersion.spv != 0) { + switch (profile) { + case EEsProfile: + if (spvVersion.vulkan >= 100 && version < 310) { correct = false; - infoSink.info.message(EPrefixError, "#version: ES shaders for SPIR-V require version 310 or higher"); + infoSink.info.message(EPrefixError, "#version: ES shaders for Vulkan SPIR-V require version 310 or higher"); version = 310; } - } else { - if (version < 140) { + // gl_spirv TODO: test versions + break; + case ECompatibilityProfile: + infoSink.info.message(EPrefixError, "#version: compilation for SPIR-V does not support the compatibility profile"); + break; + default: + if (spvVersion.vulkan >= 100 && version < 140) { correct = false; - infoSink.info.message(EPrefixError, "#version: Desktop shaders for SPIR-V require version 140 or higher"); + infoSink.info.message(EPrefixError, "#version: Desktop shaders for Vulkan SPIR-V require version 140 or higher"); version = 140; } + // gl_spirv TODO: test versions + break; } } @@ -581,9 +589,11 @@ bool ProcessDeferred( version = defaultVersion; profile = defaultProfile; } - int spv = (messages & EShMsgSpvRules) ? 100 : 0; // TODO find path to get real version number here, for now non-0 is what matters + SpvVersion spvVersion; + if (messages & EShMsgSpvRules) + spvVersion.spv = 0x00010000; // TODO: eventually have this come from the outside EShSource source = (messages & EShMsgReadHlsl) ? EShSourceHlsl : EShSourceGlsl; - bool goodVersion = DeduceVersionProfile(compiler->infoSink, compiler->getLanguage(), versionNotFirst, defaultVersion, source, version, profile, spv); + bool goodVersion = DeduceVersionProfile(compiler->infoSink, compiler->getLanguage(), versionNotFirst, defaultVersion, source, version, profile, spvVersion); bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst)); bool warnVersionNotFirst = false; if (! versionWillBeError && versionNotFirstToken) { @@ -593,14 +603,17 @@ bool ProcessDeferred( versionWillBeError = true; } - int vulkan = (messages & EShMsgVulkanRules) ? 100 : 0; // TODO find path to get real version number here, for now non-0 is what matters + if (messages & EShMsgVulkanRules) + spvVersion.vulkan = 100; // TODO: eventually have this come from the outside + else if (spvVersion.spv != 0) + spvVersion.openGl = 100; intermediate.setSource(source); intermediate.setVersion(version); intermediate.setProfile(profile); - intermediate.setSpv(spv); - if (vulkan) + intermediate.setSpv(spvVersion); + if (spvVersion.vulkan >= 100) intermediate.setOriginUpperLeft(); - SetupBuiltinSymbolTable(version, profile, spv, vulkan, source); + SetupBuiltinSymbolTable(version, profile, spvVersion, source); TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)] [MapProfileToIndex(profile)] @@ -614,7 +627,7 @@ bool ProcessDeferred( // Add built-in symbols that are potentially context dependent; // they get popped again further down. - AddContextSpecificSymbols(resources, compiler->infoSink, symbolTable, version, profile, spv, vulkan, + AddContextSpecificSymbols(resources, compiler->infoSink, symbolTable, version, profile, spvVersion, compiler->getLanguage(), source); // @@ -623,12 +636,12 @@ bool ProcessDeferred( TParseContextBase* parseContext; if (source == EShSourceHlsl) { - parseContext = new HlslParseContext(symbolTable, intermediate, false, version, profile, spv, vulkan, + parseContext = new HlslParseContext(symbolTable, intermediate, false, version, profile, spvVersion, compiler->getLanguage(), compiler->infoSink, forwardCompatible, messages); } else { intermediate.setEntryPoint("main"); - parseContext = new TParseContext(symbolTable, intermediate, false, version, profile, spv, vulkan, + parseContext = new TParseContext(symbolTable, intermediate, false, version, profile, spvVersion, compiler->getLanguage(), compiler->infoSink, forwardCompatible, messages); } TPpContext ppContext(*parseContext, names[numPre]? names[numPre]: "", includer); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index eeff270a..7d5a81e7 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -162,7 +162,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_texture_gather] = EBhDisable; extensionBehavior[E_GL_ARB_gpu_shader5] = EBhDisablePartial; extensionBehavior[E_GL_ARB_separate_shader_objects] = EBhDisable; - extensionBehavior[E_GL_ARB_compute_shader] = EBhDisablePartial; + extensionBehavior[E_GL_ARB_compute_shader] = EBhDisable; extensionBehavior[E_GL_ARB_tessellation_shader] = EBhDisable; extensionBehavior[E_GL_ARB_enhanced_layouts] = EBhDisable; extensionBehavior[E_GL_ARB_texture_cube_map_array] = EBhDisable; @@ -182,6 +182,8 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_sparse_texture_clamp] = EBhDisable; // extensionBehavior[E_GL_ARB_cull_distance] = EBhDisable; // present for 4.5, but need extension control over block members + extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable; + // #line and #include extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable; extensionBehavior[E_GL_GOOGLE_include_directive] = EBhDisable; @@ -256,6 +258,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_OES_tessellation_point_size 1\n" "#define GL_OES_texture_buffer 1\n" "#define GL_OES_texture_cube_map_array 1\n" + "#define GL_EXT_shader_non_constant_global_initializers 1\n" ; } else { preamble = @@ -284,6 +287,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_ARB_sparse_texture2 1\n" "#define GL_ARB_sparse_texture_clamp 1\n" // "#define GL_ARB_cull_distance 1\n" // present for 4.5, but need extension control over block members + "#define GL_EXT_shader_non_constant_global_initializers 1\n" ; } @@ -293,8 +297,15 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_GOOGLE_include_directive 1\n" ; - if (vulkan > 0) - preamble += "#define VULKAN 100\n"; + // #define VULKAN XXXX + if (spvVersion.vulkan > 0) { + preamble += "#define VULKAN "; + char number[12]; + snprintf(number, 12, "%d", spvVersion.vulkan); + preamble += number; + preamble += "\n"; + } + // gl_spirv TODO } // @@ -575,9 +586,6 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString); else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0) updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString); - // SPIR-V - else if (strcmp(extension, "GL_ARB_gl_spirv") == 0) - spv = 100; } void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior) @@ -649,28 +657,28 @@ void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool buil // Call for any operation removed because SPIR-V is in use. void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op) { - if (spv > 0) + if (spvVersion.spv != 0) error(loc, "not allowed when generating SPIR-V", op, ""); } // Call for any operation removed because Vulkan SPIR-V is being generated. void TParseVersions::vulkanRemoved(const TSourceLoc& loc, const char* op) { - if (vulkan > 0) + if (spvVersion.vulkan >= 100) error(loc, "not allowed when using GLSL for Vulkan", op, ""); } // Call for any operation that requires Vulkan. void TParseVersions::requireVulkan(const TSourceLoc& loc, const char* op) { - if (vulkan == 0) + if (spvVersion.vulkan == 0) error(loc, "only allowed when using GLSL for Vulkan", op, ""); } // Call for any operation that requires SPIR-V. void TParseVersions::requireSpv(const TSourceLoc& loc, const char* op) { - if (spv == 0) + if (spvVersion.spv == 0) error(loc, "only allowed when generating SPIR-V", op, ""); } diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index ba08ca3c..3a212a00 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -71,6 +71,17 @@ inline const char* ProfileName(EProfile profile) } } +// +// SPIR-V has versions for multiple things; tie them together. +// 0 means a target or rule set is not enabled. +// +struct SpvVersion { + SpvVersion() : spv(0), vulkan(0), openGl(0) {} + unsigned int spv; // the version of the targeted SPIR-V, as defined by SPIR-V in word 1 of the SPIR-V binary header + int vulkan; // the version of semantics for Vulkan; e.g., for GLSL from KHR_vulkan_glsl "#define VULKAN" + int openGl; // the version of semantics for OpenGL; gl_spirv TODO +}; + // // The behaviors from the GLSL "#extension extension_name : behavior" // @@ -119,6 +130,8 @@ const char* const E_GL_ARB_sparse_texture2 = "GL_ARB_sparse_texture const char* const E_GL_ARB_sparse_texture_clamp = "GL_ARB_sparse_texture_clamp"; //const char* const E_GL_ARB_cull_distance = "GL_ARB_cull_distance"; // present for 4.5, but need extension control over block members +const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers"; + // #line and #include const char* const E_GL_GOOGLE_cpp_style_line_directive = "GL_GOOGLE_cpp_style_line_directive"; const char* const E_GL_GOOGLE_include_directive = "GL_GOOGLE_include_directive"; diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index f4c7857c..4f8e3fc1 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -1208,7 +1208,7 @@ storage_qualifier $$.qualifier.storage = EvqBuffer; } | SHARED { - parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, 0, "shared"); + parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared"); parseContext.requireStage($1.loc, EShLangCompute, "shared"); $$.init($1.loc); diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 9d632d8a..a284fda4 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -4737,7 +4737,7 @@ yyreduce: case 155: #line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { - parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, 0, "shared"); + parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared"); parseContext.requireStage((yyvsp[0].lex).loc, EShLangCompute, "shared"); (yyval.interm.type).init((yyvsp[0].lex).loc); diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index d3d90c58..03519bc9 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -1,6 +1,6 @@ // //Copyright (C) 2002-2005 3Dlabs Inc. Ltd. -//Copyright (C) 2012-2013 LunarG, Inc. +//Copyright (C) 2012-2016 LunarG, Inc. // //All rights reserved. // @@ -39,6 +39,8 @@ #ifdef _MSC_VER #include +#elif defined __ANDROID__ || defined __linux__ || __MINGW32__ || __MINGW64__ +#include #else #include #endif @@ -357,6 +359,12 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) case EOpAllInvocations: out.debug << "allInvocations"; break; case EOpAllInvocationsEqual: out.debug << "allInvocationsEqual"; break; + case EOpClip: out.debug << "clip"; break; + case EOpIsFinite: out.debug << "isfinite"; break; + case EOpLog10: out.debug << "log10"; break; + case EOpRcp: out.debug << "rcp"; break; + case EOpSaturate: out.debug << "saturate"; break; + default: out.debug.message(EPrefixError, "Bad unary op"); } @@ -532,6 +540,14 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpInterpolateAtSample: out.debug << "interpolateAtSample"; break; case EOpInterpolateAtOffset: out.debug << "interpolateAtOffset"; break; + case EOpSinCos: out.debug << "sincos"; break; + case EOpGenMul: out.debug << "mul"; break; + + case EOpAllMemoryBarrierWithGroupSync: out.debug << "AllMemoryBarrierWithGroupSync"; break; + case EOpGroupMemoryBarrierWithGroupSync: out.debug << "GroupMemoryBarrierWithGroupSync"; break; + case EOpWorkgroupMemoryBarrier: out.debug << "WorkgroupMemoryBarrier"; break; + case EOpWorkgroupMemoryBarrierWithGroupSync: out.debug << "WorkgroupMemoryBarrierWithGroupSync"; break; + default: out.debug.message(EPrefixError, "Bad aggregation op"); } diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index d60c59ed..d855e723 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -125,7 +125,7 @@ class TVariable; class TIntermediate { public: explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : - source(EShSourceNone), language(l), profile(p), version(v), spv(0), treeRoot(0), + source(EShSourceNone), language(l), profile(p), version(v), treeRoot(0), numMains(0), numErrors(0), numPushConstants(0), recursive(false), invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet), inputPrimitive(ElgNone), outputPrimitive(ElgNone), pixelCenterInteger(false), originUpperLeft(false), @@ -154,8 +154,8 @@ public: int getVersion() const { return version; } void setProfile(EProfile p) { profile = p; } EProfile getProfile() const { return profile; } - void setSpv(int s) { spv = s; } - int getSpv() const { return spv; } + void setSpv(const SpvVersion& s) { spvVersion = s; } + const SpvVersion& getSpv() const { return spvVersion; } EShLanguage getStage() const { return language; } void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); } const std::set& getRequestedExtensions() const { return requestedExtensions; } @@ -198,6 +198,7 @@ public: TIntermTyped* promoteConstantUnion(TBasicType, TIntermConstantUnion*) const; bool parseConstTree(TIntermNode*, TConstUnionArray, TOperator, const TType&, bool singleConstantParam = false); TIntermLoop* addLoop(TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&); + TIntermAggregate* addForLoop(TIntermNode*, TIntermNode*, TIntermTyped*, TIntermTyped*, bool testFirst, const TSourceLoc&); TIntermBranch* addBranch(TOperator, const TSourceLoc&); TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&); TIntermTyped* addSwizzle(TVectorFields&, const TSourceLoc&); @@ -351,7 +352,7 @@ protected: std::string entryPoint; EProfile profile; int version; - int spv; + SpvVersion spvVersion; TIntermNode* treeRoot; std::set requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them TBuiltInResource resources; diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h index 0eebb10a..c0c89457 100755 --- a/glslang/MachineIndependent/parseVersions.h +++ b/glslang/MachineIndependent/parseVersions.h @@ -54,10 +54,10 @@ namespace glslang { class TParseVersions { public: TParseVersions(TIntermediate& interm, int version, EProfile profile, - int spv, int vulkan, EShLanguage language, TInfoSink& infoSink, + const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) : infoSink(infoSink), version(version), profile(profile), language(language), - spv(spv), vulkan(vulkan), forwardCompatible(forwardCompatible), + spvVersion(spvVersion), forwardCompatible(forwardCompatible), intermediate(interm), messages(messages), numErrors(0), currentScanner(0) { } virtual ~TParseVersions() { } virtual void initializeExtensionBehavior(); @@ -114,8 +114,7 @@ public: int version; // version, updated by #version in the shader EProfile profile; // the declared profile in the shader (core by default) EShLanguage language; // really the stage - int spv; // SPIR-V version; 0 means not SPIR-V - int vulkan; // Vulkan version; 0 means not vulkan + SpvVersion spvVersion; bool forwardCompatible; // true if errors are to be given for use of deprecated features TIntermediate& intermediate; // helper for making and hooking up pieces of the parse tree diff --git a/glslang/OSDependent/Windows/ossource.cpp b/glslang/OSDependent/Windows/ossource.cpp index 56dbf791..1d09fd38 100644 --- a/glslang/OSDependent/Windows/ossource.cpp +++ b/glslang/OSDependent/Windows/ossource.cpp @@ -134,7 +134,7 @@ unsigned int __stdcall EnterGenericThread (void* entry) void* OS_CreateThread(TThreadEntrypoint entry) { - return (void*)_beginthreadex(0, 0, EnterGenericThread, entry, 0, 0); + return (void*)_beginthreadex(0, 0, EnterGenericThread, (void*)entry, 0, 0); } void OS_WaitForAllThreads(void* threads, int numThreads) diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 3f4819a3..38d6d0ae 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -113,6 +113,9 @@ INSTANTIATE_TEST_CASE_P( "110scope.vert", "300scope.vert", "400.frag", + "400.vert", + "410.vert", + "420.comp", "420.frag", "420.vert", "420.geom", diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index dae0df3c..4aafd11f 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -22,6 +22,7 @@ if (TARGET gmock) add_executable(glslangtests ${TEST_SOURCES}) set_property(TARGET glslangtests PROPERTY FOLDER tests) + glslang_set_link_args(glslangtests) install(TARGETS glslangtests RUNTIME DESTINATION bin) diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 1307dae1..51be6f71 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -1,5 +1,6 @@ // // Copyright (C) 2016 Google, Inc. +// Copyright (C) 2016 LunarG, Inc. // // All rights reserved. // @@ -71,14 +72,35 @@ TEST_P(HlslCompileTest, FromFile) INSTANTIATE_TEST_CASE_P( ToSpirv, HlslCompileTest, ::testing::ValuesIn(std::vector{ + {"hlsl.array.frag", "PixelShaderFunction"}, {"hlsl.assoc.frag", "PixelShaderFunction"}, + {"hlsl.attribute.frag", "PixelShaderFunction"}, + {"hlsl.cast.frag", "PixelShaderFunction"}, + {"hlsl.doLoop.frag", "PixelShaderFunction"}, {"hlsl.float1.frag", "PixelShaderFunction"}, {"hlsl.float4.frag", "PixelShaderFunction"}, + {"hlsl.forLoop.frag", "PixelShaderFunction"}, + {"hlsl.if.frag", "PixelShaderFunction"}, + {"hlsl.intrinsics.barriers.comp", "ComputeShaderFunction"}, + {"hlsl.intrinsics.comp", "ComputeShaderFunction"}, + {"hlsl.intrinsics.evalfns.frag", "main"}, + {"hlsl.intrinsics.f1632.frag", "PixelShaderFunction"}, + {"hlsl.intrinsics.frag", "PixelShaderFunction"}, + {"hlsl.intrinsics.lit.frag", "PixelShaderFunction"}, + {"hlsl.intrinsics.negative.comp", "ComputeShaderFunction"}, + {"hlsl.intrinsics.negative.frag", "PixelShaderFunction"}, + {"hlsl.intrinsics.negative.vert", "VertexShaderFunction"}, + {"hlsl.intrinsics.vert", "VertexShaderFunction"}, {"hlsl.matType.frag", "PixelShaderFunction"}, {"hlsl.max.frag", "PixelShaderFunction"}, {"hlsl.precedence.frag", "PixelShaderFunction"}, {"hlsl.precedence2.frag", "PixelShaderFunction"}, + {"hlsl.scope.frag", "PixelShaderFunction"}, {"hlsl.sin.frag", "PixelShaderFunction"}, + {"hlsl.struct.frag", "PixelShaderFunction"}, + {"hlsl.swizzle.frag", "PixelShaderFunction"}, + {"hlsl.whileLoop.frag", "PixelShaderFunction"}, + {"hlsl.void.frag", "PixelShaderFunction"}, }), FileNameAsCustomTestSuffix ); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 054e293a..fd9a38b5 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -100,6 +100,7 @@ INSTANTIATE_TEST_CASE_P( "spv.300layout.vert", "spv.300layoutp.vert", "spv.310.comp", + "spv.310.bitcast.frag", "spv.330.geom", "spv.400.frag", "spv.400.tesc", diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp index 443db4ba..17ec8208 100755 --- a/hlsl/hlslGrammar.cpp +++ b/hlsl/hlslGrammar.cpp @@ -107,10 +107,9 @@ bool HlslGrammar::acceptCompilationUnit() // declaration // : SEMICOLON // : fully_specified_type SEMICOLON -// | fully_specified_type identifier SEMICOLON -// | fully_specified_type identifier = expression SEMICOLON -// | fully_specified_type identifier function_parameters SEMICOLON // function prototype -// | fully_specified_type identifier function_parameters COLON semantic compound_statement // function definition +// | fully_specified_type identifier array_specifier post_decls (EQUAL expression)opt SEMICOLON +// | fully_specified_type identifier function_parameters post_decls SEMICOLON // function prototype +// | fully_specified_type identifier function_parameters post_decls compound_statement // function definition // // 'node' could get created if the declaration creates code, like an initializer // or a function body. @@ -127,7 +126,14 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& node) // identifier HlslToken idToken; if (acceptIdentifier(idToken)) { - // = expression + // array_specifier + TArraySizes* arraySizes = nullptr; + acceptArraySpecifier(arraySizes); + + // post_decls + acceptPostDecls(type); + + // EQUAL expression TIntermTyped* expressionNode = nullptr; if (acceptTokenClass(EHTokAssign)) { if (! acceptExpression(expressionNode)) { @@ -138,15 +144,15 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& node) // SEMICOLON if (acceptTokenClass(EHTokSemicolon)) { - node = parseContext.declareVariable(idToken.loc, *idToken.string, type, 0, expressionNode); + node = parseContext.declareVariable(idToken.loc, *idToken.string, type, arraySizes, expressionNode); return true; } // function_parameters TFunction* function = new TFunction(idToken.string, type); if (acceptFunctionParameters(*function)) { - // COLON semantic - acceptSemantic(); + // post_decls + acceptPostDecls(type); // compound_statement if (peekTokenClass(EHTokLeftBrace)) @@ -186,22 +192,66 @@ bool HlslGrammar::acceptFullySpecifiedType(TType& type) return true; } -// If token is a qualifier, return its token class and advance to the next -// qualifier. Otherwise, return false, and don't advance. +// type_qualifier +// : qualifier qualifier ... +// +// Zero or more of these, so this can't return false. +// void HlslGrammar::acceptQualifier(TQualifier& qualifier) { - switch (peek()) { - case EHTokUniform: - qualifier.storage = EvqUniform; - break; - case EHTokConst: - qualifier.storage = EvqConst; - break; - default: - return; - } - - advanceToken(); + do { + switch (peek()) { + case EHTokStatic: + // normal glslang default + break; + case EHTokExtern: + // TODO: no meaning in glslang? + break; + case EHTokShared: + // TODO: hint + break; + case EHTokGroupShared: + qualifier.storage = EvqShared; + break; + case EHTokUniform: + qualifier.storage = EvqUniform; + break; + case EHTokConst: + qualifier.storage = EvqConst; + break; + case EHTokVolatile: + qualifier.volatil = true; + break; + case EHTokLinear: + qualifier.storage = EvqVaryingIn; + qualifier.smooth = true; + break; + case EHTokCentroid: + qualifier.centroid = true; + break; + case EHTokNointerpolation: + qualifier.flat = true; + break; + case EHTokNoperspective: + qualifier.nopersp = true; + break; + case EHTokSample: + qualifier.sample = true; + break; + case EHTokRowMajor: + qualifier.layoutMatrix = ElmRowMajor; + break; + case EHTokColumnMajor: + qualifier.layoutMatrix = ElmColumnMajor; + break; + case EHTokPrecise: + qualifier.noContraction = true; + break; + default: + return; + } + advanceToken(); + } while (true); } // If token is for a type, update 'type' with the type information, @@ -209,24 +259,34 @@ void HlslGrammar::acceptQualifier(TQualifier& qualifier) // Otherwise, return false, and don't advance bool HlslGrammar::acceptType(TType& type) { - if (! token.isType) - return false; - switch (peek()) { - case EHTokInt: - case EHTokInt1: - case EHTokDword: - new(&type) TType(EbtInt); + case EHTokStruct: + return acceptStruct(type); break; + + case EHTokIdentifier: + // An identifier could be for a user-defined type. + // Note we cache the symbol table lookup, to save for a later rule + // when this is not a type. + token.symbol = parseContext.symbolTable.find(*token.string); + if (token.symbol && token.symbol->getAsVariable() && token.symbol->getAsVariable()->isUserType()) { + type.shallowCopy(token.symbol->getType()); + advanceToken(); + return true; + } else + return false; + + case EHTokVoid: + new(&type) TType(EbtVoid); + break; + case EHTokFloat: new(&type) TType(EbtFloat); break; - case EHTokFloat1: new(&type) TType(EbtFloat); type.makeVector(); break; - case EHTokFloat2: new(&type) TType(EbtFloat, EvqTemporary, 2); break; @@ -237,6 +297,31 @@ bool HlslGrammar::acceptType(TType& type) new(&type) TType(EbtFloat, EvqTemporary, 4); break; + case EHTokDouble: + new(&type) TType(EbtDouble); + break; + case EHTokDouble1: + new(&type) TType(EbtDouble); + type.makeVector(); + break; + case EHTokDouble2: + new(&type) TType(EbtDouble, EvqTemporary, 2); + break; + case EHTokDouble3: + new(&type) TType(EbtDouble, EvqTemporary, 3); + break; + case EHTokDouble4: + new(&type) TType(EbtDouble, EvqTemporary, 4); + break; + + case EHTokInt: + case EHTokDword: + new(&type) TType(EbtInt); + break; + case EHTokInt1: + new(&type) TType(EbtInt); + type.makeVector(); + break; case EHTokInt2: new(&type) TType(EbtInt, EvqTemporary, 2); break; @@ -247,6 +332,30 @@ bool HlslGrammar::acceptType(TType& type) new(&type) TType(EbtInt, EvqTemporary, 4); break; + case EHTokUint: + new(&type) TType(EbtUint); + break; + case EHTokUint1: + new(&type) TType(EbtUint); + type.makeVector(); + break; + case EHTokUint2: + new(&type) TType(EbtUint, EvqTemporary, 2); + break; + case EHTokUint3: + new(&type) TType(EbtUint, EvqTemporary, 3); + break; + case EHTokUint4: + new(&type) TType(EbtUint, EvqTemporary, 4); + break; + + case EHTokBool: + new(&type) TType(EbtBool); + break; + case EHTokBool1: + new(&type) TType(EbtBool); + type.makeVector(); + break; case EHTokBool2: new(&type) TType(EbtBool, EvqTemporary, 2); break; @@ -306,6 +415,104 @@ bool HlslGrammar::acceptType(TType& type) new(&type) TType(EbtInt, EvqTemporary, 0, 4, 4); break; + case EHTokUint1x1: + new(&type) TType(EbtUint, EvqTemporary, 0, 1, 1); + break; + case EHTokUint1x2: + new(&type) TType(EbtUint, EvqTemporary, 0, 2, 1); + break; + case EHTokUint1x3: + new(&type) TType(EbtUint, EvqTemporary, 0, 3, 1); + break; + case EHTokUint1x4: + new(&type) TType(EbtUint, EvqTemporary, 0, 4, 1); + break; + case EHTokUint2x1: + new(&type) TType(EbtUint, EvqTemporary, 0, 1, 2); + break; + case EHTokUint2x2: + new(&type) TType(EbtUint, EvqTemporary, 0, 2, 2); + break; + case EHTokUint2x3: + new(&type) TType(EbtUint, EvqTemporary, 0, 3, 2); + break; + case EHTokUint2x4: + new(&type) TType(EbtUint, EvqTemporary, 0, 4, 2); + break; + case EHTokUint3x1: + new(&type) TType(EbtUint, EvqTemporary, 0, 1, 3); + break; + case EHTokUint3x2: + new(&type) TType(EbtUint, EvqTemporary, 0, 2, 3); + break; + case EHTokUint3x3: + new(&type) TType(EbtUint, EvqTemporary, 0, 3, 3); + break; + case EHTokUint3x4: + new(&type) TType(EbtUint, EvqTemporary, 0, 4, 3); + break; + case EHTokUint4x1: + new(&type) TType(EbtUint, EvqTemporary, 0, 1, 4); + break; + case EHTokUint4x2: + new(&type) TType(EbtUint, EvqTemporary, 0, 2, 4); + break; + case EHTokUint4x3: + new(&type) TType(EbtUint, EvqTemporary, 0, 3, 4); + break; + case EHTokUint4x4: + new(&type) TType(EbtUint, EvqTemporary, 0, 4, 4); + break; + + case EHTokBool1x1: + new(&type) TType(EbtBool, EvqTemporary, 0, 1, 1); + break; + case EHTokBool1x2: + new(&type) TType(EbtBool, EvqTemporary, 0, 2, 1); + break; + case EHTokBool1x3: + new(&type) TType(EbtBool, EvqTemporary, 0, 3, 1); + break; + case EHTokBool1x4: + new(&type) TType(EbtBool, EvqTemporary, 0, 4, 1); + break; + case EHTokBool2x1: + new(&type) TType(EbtBool, EvqTemporary, 0, 1, 2); + break; + case EHTokBool2x2: + new(&type) TType(EbtBool, EvqTemporary, 0, 2, 2); + break; + case EHTokBool2x3: + new(&type) TType(EbtBool, EvqTemporary, 0, 3, 2); + break; + case EHTokBool2x4: + new(&type) TType(EbtBool, EvqTemporary, 0, 4, 2); + break; + case EHTokBool3x1: + new(&type) TType(EbtBool, EvqTemporary, 0, 1, 3); + break; + case EHTokBool3x2: + new(&type) TType(EbtBool, EvqTemporary, 0, 2, 3); + break; + case EHTokBool3x3: + new(&type) TType(EbtBool, EvqTemporary, 0, 3, 3); + break; + case EHTokBool3x4: + new(&type) TType(EbtBool, EvqTemporary, 0, 4, 3); + break; + case EHTokBool4x1: + new(&type) TType(EbtBool, EvqTemporary, 0, 1, 4); + break; + case EHTokBool4x2: + new(&type) TType(EbtBool, EvqTemporary, 0, 2, 4); + break; + case EHTokBool4x3: + new(&type) TType(EbtBool, EvqTemporary, 0, 3, 4); + break; + case EHTokBool4x4: + new(&type) TType(EbtBool, EvqTemporary, 0, 4, 4); + break; + case EHTokFloat1x1: new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 1); break; @@ -413,8 +620,133 @@ bool HlslGrammar::acceptType(TType& type) return true; } +// struct +// : STRUCT IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE +// | STRUCT LEFT_BRACE struct_declaration_list RIGHT_BRACE +// +bool HlslGrammar::acceptStruct(TType& type) +{ + // STRUCT + if (! acceptTokenClass(EHTokStruct)) + return false; + + // IDENTIFIER + TString structName = ""; + if (peekTokenClass(EHTokIdentifier)) { + structName = *token.string; + advanceToken(); + } + + // LEFT_BRACE + if (! acceptTokenClass(EHTokLeftBrace)) { + expected("{"); + return false; + } + + // struct_declaration_list + TTypeList* typeList; + if (! acceptStructDeclarationList(typeList)) { + expected("struct member declarations"); + return false; + } + + // RIGHT_BRACE + if (! acceptTokenClass(EHTokRightBrace)) { + expected("}"); + return false; + } + + // create the user-defined type + new(&type) TType(typeList, structName); + + // If it was named, which means it can be reused later, add + // it to the symbol table. + if (structName.size() > 0) { + TVariable* userTypeDef = new TVariable(&structName, type, true); + if (! parseContext.symbolTable.insert(*userTypeDef)) + parseContext.error(token.loc, "redefinition", structName.c_str(), "struct"); + } + + return true; +} + +// struct_declaration_list +// : struct_declaration SEMI_COLON struct_declaration SEMI_COLON ... +// +// struct_declaration +// : fully_specified_type struct_declarator COMMA struct_declarator ... +// +// struct_declarator +// : IDENTIFIER post_decls +// | IDENTIFIER array_specifier post_decls +// +bool HlslGrammar::acceptStructDeclarationList(TTypeList*& typeList) +{ + typeList = new TTypeList(); + + do { + // success on seeing the RIGHT_BRACE coming up + if (peekTokenClass(EHTokRightBrace)) + return true; + + // struct_declaration + + // fully_specified_type + TType memberType; + if (! acceptFullySpecifiedType(memberType)) { + expected("member type"); + return false; + } + + // struct_declarator COMMA struct_declarator ... + do { + // peek IDENTIFIER + if (! peekTokenClass(EHTokIdentifier)) { + expected("member name"); + return false; + } + + // add it to the list of members + TTypeLoc member = { new TType(EbtVoid), token.loc }; + member.type->shallowCopy(memberType); + member.type->setFieldName(*token.string); + typeList->push_back(member); + + // accept IDENTIFIER + advanceToken(); + + // array_specifier + TArraySizes* arraySizes = nullptr; + acceptArraySpecifier(arraySizes); + if (arraySizes) + typeList->back().type->newArraySizes(*arraySizes); + + acceptPostDecls(*member.type); + + // success on seeing the SEMICOLON coming up + if (peekTokenClass(EHTokSemicolon)) + break; + + // COMMA + if (! acceptTokenClass(EHTokComma)) { + expected(","); + return false; + } + + } while (true); + + // SEMI_COLON + if (! acceptTokenClass(EHTokSemicolon)) { + expected(";"); + return false; + } + + } while (true); +} + // function_parameters // : LEFT_PAREN parameter_declaration COMMA parameter_declaration ... RIGHT_PAREN +// | LEFT_PAREN VOID RIGHT_PAREN // bool HlslGrammar::acceptFunctionParameters(TFunction& function) { @@ -422,19 +754,22 @@ bool HlslGrammar::acceptFunctionParameters(TFunction& function) if (! acceptTokenClass(EHTokLeftParen)) return false; - do { - // parameter_declaration - if (! acceptParameterDeclaration(function)) - break; + // VOID RIGHT_PAREN + if (! acceptTokenClass(EHTokVoid)) { + do { + // parameter_declaration + if (! acceptParameterDeclaration(function)) + break; - // COMMA - if (! acceptTokenClass(EHTokComma)) - break; - } while (true); + // COMMA + if (! acceptTokenClass(EHTokComma)) + break; + } while (true); + } // RIGHT_PAREN if (! acceptTokenClass(EHTokRightParen)) { - expected("right parenthesis"); + expected(")"); return false; } @@ -442,8 +777,8 @@ bool HlslGrammar::acceptFunctionParameters(TFunction& function) } // parameter_declaration -// : fully_specified_type -// | fully_specified_type identifier +// : fully_specified_type post_decls +// | fully_specified_type identifier array_specifier post_decls // bool HlslGrammar::acceptParameterDeclaration(TFunction& function) { @@ -456,6 +791,17 @@ bool HlslGrammar::acceptParameterDeclaration(TFunction& function) HlslToken idToken; acceptIdentifier(idToken); + // array_specifier + TArraySizes* arraySizes = nullptr; + acceptArraySpecifier(arraySizes); + if (arraySizes) + type->newArraySizes(*arraySizes); + + // post_decls + acceptPostDecls(*type); + + parseContext.paramFix(*type); + TParameter param = { idToken.string, type }; function.addParameter(param); @@ -468,16 +814,16 @@ bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& no { TFunction* functionDeclarator = parseContext.handleFunctionDeclarator(token.loc, function, false /* not prototype */); - // This does a symbol table push + // This does a pushScope() node = parseContext.handleFunctionDefinition(token.loc, *functionDeclarator); // compound_statement - TIntermAggregate* functionBody = nullptr; + TIntermNode* functionBody = nullptr; if (acceptCompoundStatement(functionBody)) { node = intermediate.growAggregate(node, functionBody); intermediate.setAggregateOperator(node, EOpFunction, functionDeclarator->getType(), token.loc); node->getAsAggregate()->setName(functionDeclarator->getMangledName().c_str()); - parseContext.symbolTable.pop(nullptr); + parseContext.popScope(); return true; } @@ -485,6 +831,31 @@ bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& no return false; } +// Accept an expression with parenthesis around it, where +// the parenthesis ARE NOT expression parenthesis, but the +// syntactically required ones like in "if ( expression )" +// +// Note this one is not set up to be speculative; as it gives +// errors if not found. +// +bool HlslGrammar::acceptParenExpression(TIntermTyped*& expression) +{ + // LEFT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) + expected("("); + + if (! acceptExpression(expression)) { + expected("expression"); + return false; + } + + // RIGHT_PAREN + if (! acceptTokenClass(EHTokRightParen)) + expected(")"); + + return true; +} + // The top-level full expression recognizer. // // expression @@ -492,6 +863,8 @@ bool HlslGrammar::acceptFunctionDefinition(TFunction& function, TIntermNode*& no // bool HlslGrammar::acceptExpression(TIntermTyped*& node) { + node = nullptr; + // assignment_expression if (! acceptAssignmentExpression(node)) return false; @@ -600,7 +973,8 @@ bool HlslGrammar::acceptBinaryExpression(TIntermTyped*& node, PrecedenceLevel pr } // unary_expression -// : + unary_expression +// : (type) unary_expression +// | + unary_expression // | - unary_expression // | ! unary_expression // | ~ unary_expression @@ -610,9 +984,46 @@ bool HlslGrammar::acceptBinaryExpression(TIntermTyped*& node, PrecedenceLevel pr // bool HlslGrammar::acceptUnaryExpression(TIntermTyped*& node) { + // (type) unary_expression + // Have to look two steps ahead, because this could be, e.g., a + // postfix_expression instead, since that also starts with at "(". + if (acceptTokenClass(EHTokLeftParen)) { + TType castType; + if (acceptType(castType)) { + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + return false; + } + + // We've matched "(type)" now, get the expression to cast + TSourceLoc loc = token.loc; + if (! acceptUnaryExpression(node)) + return false; + + // Hook it up like a constructor + TFunction* constructorFunction = parseContext.handleConstructorCall(loc, castType); + if (constructorFunction == nullptr) { + expected("type that can be constructed"); + return false; + } + TIntermTyped* arguments = nullptr; + parseContext.handleFunctionArgument(constructorFunction, arguments, node); + node = parseContext.handleFunctionCall(loc, constructorFunction, arguments); + + return true; + } else { + // This isn't a type cast, but it still started "(", so if it is a + // unary expression, it can only be a postfix_expression, so try that. + // Back it up first. + recedeToken(); + return acceptPostfixExpression(node); + } + } + + // peek for "op unary_expression" TOperator unaryOp = HlslOpMap::preUnary(peek()); - // postfix_expression + // postfix_expression (if no unary operator) if (unaryOp == EOpNull) return acceptPostfixExpression(node); @@ -650,14 +1061,16 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node) // idToken will pick up either a variable or a function name in a function call HlslToken idToken; - // LEFT_PAREN expression RIGHT_PAREN + // Find something before the postfix operations, as they can't operate + // on nothing. So, no "return true", they fall through, only "return false". if (acceptTokenClass(EHTokLeftParen)) { + // LEFT_PAREN expression RIGHT_PAREN if (! acceptExpression(node)) { expected("expression"); return false; } if (! acceptTokenClass(EHTokRightParen)) { - expected("right parenthesis"); + expected(")"); return false; } } else if (acceptLiteral(node)) { @@ -674,8 +1087,12 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node) expected("function call arguments"); return false; } + } else { + // nothing found, can't post operate + return false; } + // Something was found, chain as many postfix operations as exist. do { TSourceLoc loc = token.loc; TOperator postOp = HlslOpMap::postUnary(peek()); @@ -695,20 +1112,36 @@ bool HlslGrammar::acceptPostfixExpression(TIntermTyped*& node) // We have a valid post-unary operator, process it. switch (postOp) { case EOpIndexDirectStruct: - // todo + { + // DOT IDENTIFIER + // includes swizzles and struct members + // TODO: possibly includes "method" syntax + HlslToken field; + if (! acceptIdentifier(field)) { + expected("swizzle or member"); + return false; + } + node = parseContext.handleDotDereference(field.loc, node, *field.string); break; + } case EOpIndexIndirect: { + // LEFT_BRACKET integer_expression RIGHT_BRACKET TIntermTyped* indexNode = nullptr; if (! acceptExpression(indexNode) || ! peekTokenClass(EHTokRightBracket)) { expected("expression followed by ']'"); return false; } - // todo: node = intermediate.addBinaryMath( + advanceToken(); + node = parseContext.handleBracketDereference(indexNode->getLoc(), node, indexNode); + break; } case EOpPostIncrement: + // INC_OP + // fall through case EOpPostDecrement: + // DEC_OP node = intermediate.addUnaryMath(postOp, node, loc); break; default: @@ -792,7 +1225,7 @@ bool HlslGrammar::acceptArguments(TFunction* function, TIntermTyped*& arguments) // RIGHT_PAREN if (! acceptTokenClass(EHTokRightParen)) { - expected("right parenthesis"); + expected(")"); return false; } @@ -827,8 +1260,10 @@ bool HlslGrammar::acceptLiteral(TIntermTyped*& node) // compound_statement // : LEFT_CURLY statement statement ... RIGHT_CURLY // -bool HlslGrammar::acceptCompoundStatement(TIntermAggregate*& compoundStatement) +bool HlslGrammar::acceptCompoundStatement(TIntermNode*& retStatement) { + TIntermAggregate* compoundStatement = nullptr; + // LEFT_CURLY if (! acceptTokenClass(EHTokLeftBrace)) return false; @@ -842,68 +1277,471 @@ bool HlslGrammar::acceptCompoundStatement(TIntermAggregate*& compoundStatement) if (compoundStatement) compoundStatement->setOperator(EOpSequence); + retStatement = compoundStatement; + // RIGHT_CURLY return acceptTokenClass(EHTokRightBrace); } +bool HlslGrammar::acceptScopedStatement(TIntermNode*& statement) +{ + parseContext.pushScope(); + bool result = acceptStatement(statement); + parseContext.popScope(); + + return result; +} + +bool HlslGrammar::acceptScopedCompoundStatement(TIntermNode*& statement) +{ + parseContext.pushScope(); + bool result = acceptCompoundStatement(statement); + parseContext.popScope(); + + return result; +} + // statement +// : attributes attributed_statement +// +// attributed_statement // : compound_statement -// | return SEMICOLON -// | return expression SEMICOLON +// | SEMICOLON // | expression SEMICOLON +// | declaration_statement +// | selection_statement +// | switch_statement +// | case_label +// | iteration_statement +// | jump_statement // bool HlslGrammar::acceptStatement(TIntermNode*& statement) { - // compound_statement - TIntermAggregate* compoundStatement = nullptr; - if (acceptCompoundStatement(compoundStatement)) { - statement = compoundStatement; - return true; - } + statement = nullptr; - // RETURN - if (acceptTokenClass(EHTokReturn)) { - // expression - TIntermTyped* node; - if (acceptExpression(node)) { - // hook it up - statement = intermediate.addBranch(EOpReturn, node, token.loc); - } else - statement = intermediate.addBranch(EOpReturn, token.loc); + // attributes + acceptAttributes(); - // SEMICOLON - if (! acceptTokenClass(EHTokSemicolon)) - return false; + // attributed_statement + switch (peek()) { + case EHTokLeftBrace: + return acceptScopedCompoundStatement(statement); - return true; - } + case EHTokIf: + return acceptSelectionStatement(statement); - // expression - TIntermTyped* node; - if (acceptExpression(node)) - statement = node; + case EHTokSwitch: + return acceptSwitchStatement(statement); - // SEMICOLON - if (! acceptTokenClass(EHTokSemicolon)) + case EHTokFor: + case EHTokDo: + case EHTokWhile: + return acceptIterationStatement(statement); + + case EHTokContinue: + case EHTokBreak: + case EHTokDiscard: + case EHTokReturn: + return acceptJumpStatement(statement); + + case EHTokCase: + return acceptCaseLabel(statement); + + case EHTokSemicolon: + return acceptTokenClass(EHTokSemicolon); + + case EHTokRightBrace: + // Performance: not strictly necessary, but stops a bunch of hunting early, + // and is how sequences of statements end. return false; - return true; -} + default: + { + // declaration + if (acceptDeclaration(statement)) + return true; -// COLON semantic -bool HlslGrammar::acceptSemantic() -{ - // COLON - if (acceptTokenClass(EHTokColon)) { - // semantic - HlslToken idToken; - if (! acceptIdentifier(idToken)) { - expected("semantic"); - return false; + // expression + TIntermTyped* node; + if (acceptExpression(node)) + statement = node; + else + return false; + + // SEMICOLON (following an expression) + if (! acceptTokenClass(EHTokSemicolon)) { + expected(";"); + return false; + } } } return true; } +// attributes +// : list of zero or more of: LEFT_BRACKET attribute RIGHT_BRACKET +// +// attribute: +// : UNROLL +// | UNROLL LEFT_PAREN literal RIGHT_PAREN +// | FASTOPT +// | ALLOW_UAV_CONDITION +// | BRANCH +// | FLATTEN +// | FORCECASE +// | CALL +// +void HlslGrammar::acceptAttributes() +{ + // For now, accept the [ XXX(X) ] syntax, but drop. + // TODO: subset to correct set? Pass on? + do { + // LEFT_BRACKET? + if (! acceptTokenClass(EHTokLeftBracket)) + return; + + // attribute + if (peekTokenClass(EHTokIdentifier)) { + // 'token.string' is the attribute + advanceToken(); + } else if (! peekTokenClass(EHTokRightBracket)) { + expected("identifier"); + advanceToken(); + } + + // (x) + if (acceptTokenClass(EHTokLeftParen)) { + TIntermTyped* node; + if (! acceptLiteral(node)) + expected("literal"); + // 'node' has the literal in it + if (! acceptTokenClass(EHTokRightParen)) + expected(")"); + } + + // RIGHT_BRACKET + if (acceptTokenClass(EHTokRightBracket)) + continue; + + expected("]"); + return; + + } while (true); +} + +// selection_statement +// : IF LEFT_PAREN expression RIGHT_PAREN statement +// : IF LEFT_PAREN expression RIGHT_PAREN statement ELSE statement +// +bool HlslGrammar::acceptSelectionStatement(TIntermNode*& statement) +{ + TSourceLoc loc = token.loc; + + // IF + if (! acceptTokenClass(EHTokIf)) + return false; + + // so that something declared in the condition is scoped to the lifetimes + // of the then-else statements + parseContext.pushScope(); + + // LEFT_PAREN expression RIGHT_PAREN + TIntermTyped* condition; + if (! acceptParenExpression(condition)) + return false; + + // create the child statements + TIntermNodePair thenElse = { nullptr, nullptr }; + + // then statement + if (! acceptScopedStatement(thenElse.node1)) { + expected("then statement"); + return false; + } + + // ELSE + if (acceptTokenClass(EHTokElse)) { + // else statement + if (! acceptScopedStatement(thenElse.node2)) { + expected("else statement"); + return false; + } + } + + // Put the pieces together + statement = intermediate.addSelection(condition, thenElse, loc); + parseContext.popScope(); + + return true; +} + +bool HlslGrammar::acceptSwitchStatement(TIntermNode*& statement) +{ + return false; +} + +// iteration_statement +// : WHILE LEFT_PAREN condition RIGHT_PAREN statement +// | DO LEFT_BRACE statement RIGHT_BRACE WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON +// | FOR LEFT_PAREN for_init_statement for_rest_statement RIGHT_PAREN statement +// +// Non-speculative, only call if it needs to be found; WHILE or DO or FOR already seen. +bool HlslGrammar::acceptIterationStatement(TIntermNode*& statement) +{ + TSourceLoc loc = token.loc; + TIntermTyped* condition = nullptr; + + EHlslTokenClass loop = peek(); + assert(loop == EHTokDo || loop == EHTokFor || loop == EHTokWhile); + + // WHILE or DO or FOR + advanceToken(); + + switch (loop) { + case EHTokWhile: + // so that something declared in the condition is scoped to the lifetime + // of the while sub-statement + parseContext.pushScope(); + parseContext.nestLooping(); + + // LEFT_PAREN condition RIGHT_PAREN + if (! acceptParenExpression(condition)) + return false; + + // statement + if (! acceptScopedStatement(statement)) { + expected("while sub-statement"); + return false; + } + + parseContext.unnestLooping(); + parseContext.popScope(); + + statement = intermediate.addLoop(statement, condition, nullptr, true, loc); + + return true; + + case EHTokDo: + parseContext.nestLooping(); + + if (! acceptTokenClass(EHTokLeftBrace)) + expected("{"); + + // statement + if (! peekTokenClass(EHTokRightBrace) && ! acceptScopedStatement(statement)) { + expected("do sub-statement"); + return false; + } + + if (! acceptTokenClass(EHTokRightBrace)) + expected("}"); + + // WHILE + if (! acceptTokenClass(EHTokWhile)) { + expected("while"); + return false; + } + + // LEFT_PAREN condition RIGHT_PAREN + TIntermTyped* condition; + if (! acceptParenExpression(condition)) + return false; + + if (! acceptTokenClass(EHTokSemicolon)) + expected(";"); + + parseContext.unnestLooping(); + + statement = intermediate.addLoop(statement, condition, 0, false, loc); + + return true; + + case EHTokFor: + { + // LEFT_PAREN + if (! acceptTokenClass(EHTokLeftParen)) + expected("("); + + // so that something declared in the condition is scoped to the lifetime + // of the for sub-statement + parseContext.pushScope(); + + // initializer SEMI_COLON + TIntermTyped* initializer = nullptr; // TODO, "for (initializer" needs to support decl. statement + acceptExpression(initializer); + if (! acceptTokenClass(EHTokSemicolon)) + expected(";"); + + parseContext.nestLooping(); + + // condition SEMI_COLON + acceptExpression(condition); + if (! acceptTokenClass(EHTokSemicolon)) + expected(";"); + + // iterator SEMI_COLON + TIntermTyped* iterator = nullptr; + acceptExpression(iterator); + if (! acceptTokenClass(EHTokRightParen)) + expected(")"); + + // statement + if (! acceptScopedStatement(statement)) { + expected("for sub-statement"); + return false; + } + + statement = intermediate.addForLoop(statement, initializer, condition, iterator, true, loc); + + parseContext.popScope(); + parseContext.unnestLooping(); + + return true; + } + + default: + return false; + } +} + +// jump_statement +// : CONTINUE SEMICOLON +// | BREAK SEMICOLON +// | DISCARD SEMICOLON +// | RETURN SEMICOLON +// | RETURN expression SEMICOLON +// +bool HlslGrammar::acceptJumpStatement(TIntermNode*& statement) +{ + switch (peek()) { + case EHTokContinue: + case EHTokBreak: + case EHTokDiscard: + // TODO + return false; + + case EHTokReturn: + // return + if (acceptTokenClass(EHTokReturn)) { + // expression + TIntermTyped* node; + if (acceptExpression(node)) { + // hook it up + statement = intermediate.addBranch(EOpReturn, node, token.loc); + } else + statement = intermediate.addBranch(EOpReturn, token.loc); + + // SEMICOLON + if (! acceptTokenClass(EHTokSemicolon)) { + expected(";"); + return false; + } + + return true; + } + + default: + return false; + } +} + + +bool HlslGrammar::acceptCaseLabel(TIntermNode*& statement) +{ + return false; +} + +// array_specifier +// : LEFT_BRACKET integer_expression RGHT_BRACKET post_decls // optional +// +void HlslGrammar::acceptArraySpecifier(TArraySizes*& arraySizes) +{ + arraySizes = nullptr; + + if (! acceptTokenClass(EHTokLeftBracket)) + return; + + TSourceLoc loc = token.loc; + TIntermTyped* sizeExpr; + if (! acceptAssignmentExpression(sizeExpr)) { + expected("array-sizing expression"); + return; + } + + if (! acceptTokenClass(EHTokRightBracket)) { + expected("]"); + return; + } + + TArraySize arraySize; + parseContext.arraySizeCheck(loc, sizeExpr, arraySize); + arraySizes = new TArraySizes; + arraySizes->addInnerSize(arraySize); +} + +// post_decls +// : COLON semantic // optional +// COLON PACKOFFSET LEFT_PAREN ... RIGHT_PAREN // optional +// COLON REGISTER // optional +// annotations // optional +// +void HlslGrammar::acceptPostDecls(TType& type) +{ + do { + // COLON + if (acceptTokenClass(EHTokColon)) { + HlslToken idToken; + if (acceptTokenClass(EHTokPackOffset)) { + if (! acceptTokenClass(EHTokLeftParen)) { + expected("("); + return; + } + acceptTokenClass(EHTokIdentifier); + acceptTokenClass(EHTokDot); + acceptTokenClass(EHTokIdentifier); + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + break; + } + // TODO: process the packoffset information + } else if (! acceptIdentifier(idToken)) { + expected("semantic or packoffset or register"); + return; + } else if (*idToken.string == "register") { + if (! acceptTokenClass(EHTokLeftParen)) { + expected("("); + return; + } + acceptTokenClass(EHTokIdentifier); + acceptTokenClass(EHTokComma); + acceptTokenClass(EHTokIdentifier); + acceptTokenClass(EHTokLeftBracket); + if (peekTokenClass(EHTokIntConstant)) + advanceToken(); + acceptTokenClass(EHTokRightBracket); + if (! acceptTokenClass(EHTokRightParen)) { + expected(")"); + break; + } + // TODO: process the register information + } else { + // semantic, in idToken.string + parseContext.handleSemantic(type, *idToken.string); + } + } else if (acceptTokenClass(EHTokLeftAngle)) { + // TODO: process annotations, just accepting them for now + do { + if (peekTokenClass(EHTokNone)) + return; + if (acceptTokenClass(EHTokRightAngle)) + break; + advanceToken(); + } while (true); + } else + break; + + } while (true); +} + } // end namespace glslang diff --git a/hlsl/hlslGrammar.h b/hlsl/hlslGrammar.h index d834aa93..b4a948f2 100755 --- a/hlsl/hlslGrammar.h +++ b/hlsl/hlslGrammar.h @@ -61,9 +61,12 @@ namespace glslang { bool acceptFullySpecifiedType(TType&); void acceptQualifier(TQualifier&); bool acceptType(TType&); + bool acceptStruct(TType&); + bool acceptStructDeclarationList(TTypeList*&); bool acceptFunctionParameters(TFunction&); bool acceptParameterDeclaration(TFunction&); bool acceptFunctionDefinition(TFunction&, TIntermNode*&); + bool acceptParenExpression(TIntermTyped*&); bool acceptExpression(TIntermTyped*&); bool acceptAssignmentExpression(TIntermTyped*&); bool acceptBinaryExpression(TIntermTyped*&, PrecedenceLevel); @@ -73,9 +76,19 @@ namespace glslang { bool acceptFunctionCall(HlslToken, TIntermTyped*&); bool acceptArguments(TFunction*, TIntermTyped*&); bool acceptLiteral(TIntermTyped*&); - bool acceptCompoundStatement(TIntermAggregate*&); + bool acceptCompoundStatement(TIntermNode*&); bool acceptStatement(TIntermNode*&); - bool acceptSemantic(); + bool acceptScopedStatement(TIntermNode*&); + bool acceptScopedCompoundStatement(TIntermNode*&); + bool acceptNestedStatement(TIntermNode*&); + void acceptAttributes(); + bool acceptSelectionStatement(TIntermNode*&); + bool acceptSwitchStatement(TIntermNode*&); + bool acceptIterationStatement(TIntermNode*&); + bool acceptJumpStatement(TIntermNode*&); + bool acceptCaseLabel(TIntermNode*&); + void acceptArraySpecifier(TArraySizes*&); + void acceptPostDecls(TType&); HlslParseContext& parseContext; // state of parsing and helper functions for building the intermediate TIntermediate& intermediate; // the final product, the intermediate representation, includes the AST diff --git a/hlsl/hlslOpMap.cpp b/hlsl/hlslOpMap.cpp index c31dd7cf..524e66a2 100755 --- a/hlsl/hlslOpMap.cpp +++ b/hlsl/hlslOpMap.cpp @@ -113,7 +113,7 @@ TOperator HlslOpMap::postUnary(EHlslTokenClass op) { switch (op) { case EHTokDot: return EOpIndexDirectStruct; - case EHTokLeftBracket: return EOpIndexIndirect; // may need to change later to EOpIndexDirect + case EHTokLeftBracket: return EOpIndexIndirect; case EHTokIncOp: return EOpPostIncrement; case EHTokDecOp: return EOpPostDecrement; diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 2cdaf0c0..228ac4ff 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -1,5 +1,6 @@ // //Copyright (C) 2016 Google, Inc. +//Copyright (C) 2016 LunarG, Inc. // //All rights reserved. // @@ -48,10 +49,10 @@ namespace glslang { HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool /*parsingBuiltins*/, - int version, EProfile profile, int spv, int vulkan, EShLanguage language, TInfoSink& infoSink, + int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) : - TParseContextBase(symbolTable, interm, version, profile, spv, vulkan, language, infoSink, forwardCompatible, messages), - contextPragma(true, false), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), statementNestingLevel(0), + TParseContextBase(symbolTable, interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), + contextPragma(true, false), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), postMainReturn(false), limits(resources.limits), afterEOF(false) @@ -61,11 +62,11 @@ HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& int globalUniformDefaults.clear(); globalUniformDefaults.layoutMatrix = ElmColumnMajor; - globalUniformDefaults.layoutPacking = vulkan > 0 ? ElpStd140 : ElpShared; + globalUniformDefaults.layoutPacking = ElpStd140; globalBufferDefaults.clear(); globalBufferDefaults.layoutMatrix = ElmColumnMajor; - globalBufferDefaults.layoutPacking = vulkan > 0 ? ElpStd430 : ElpShared; + globalBufferDefaults.layoutPacking = ElpStd430; globalInputDefaults.clear(); globalOutputDefaults.clear(); @@ -284,7 +285,12 @@ void C_DECL HlslParseContext::ppWarn(const TSourceLoc& loc, const char* szReason // TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symbol, const TString* string) { - TIntermTyped* node = nullptr; + if (symbol == nullptr) + symbol = symbolTable.find(*string); + if (symbol && symbol->getAsVariable() && symbol->getAsVariable()->isUserType()) { + error(loc, "expected symbol, not user-defined type", string->c_str(), ""); + return nullptr; + } // Error check for requiring specific extensions present. if (symbol && symbol->getNumExtensions()) @@ -305,6 +311,7 @@ TIntermTyped* HlslParseContext::handleVariable(const TSourceLoc& loc, TSymbol* s const TVariable* variable; const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr; + TIntermTyped* node = nullptr; if (anon) { // It was a member of an anonymous container. @@ -710,11 +717,16 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l functionReturnsValue = false; inEntrypoint = (function.getName() == intermediate.getEntryPoint().c_str()); + if (inEntrypoint) { + // parameters are actually shader-level inputs + for (int i = 0; i < function.getParamCount(); i++) + function[i].type->getQualifier().storage = EvqVaryingIn; + } // // New symbol table scope for body of function plus its arguments // - symbolTable.push(); + pushScope(); // // Insert parameters into the symbol table. @@ -747,7 +759,6 @@ TIntermAggregate* HlslParseContext::handleFunctionDefinition(const TSourceLoc& l } intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc); loopNestingLevel = 0; - statementNestingLevel = 0; controlFlowNestingLevel = 0; postMainReturn = false; @@ -765,6 +776,348 @@ void HlslParseContext::handleFunctionArgument(TFunction* function, TIntermTyped* arguments = newArg; } +// +// HLSL atomic operations have slightly different arguments than +// GLSL/AST/SPIRV. The semantics are converted below in decomposeIntrinsic. +// This provides the post-decomposition equivalent opcode. +// +TOperator HlslParseContext::mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage) +{ + switch (op) { + case EOpInterlockedAdd: return isImage ? EOpImageAtomicAdd : EOpAtomicAdd; + case EOpInterlockedAnd: return isImage ? EOpImageAtomicAnd : EOpAtomicAnd; + case EOpInterlockedCompareExchange: return isImage ? EOpImageAtomicCompSwap : EOpAtomicCompSwap; + case EOpInterlockedMax: return isImage ? EOpImageAtomicMax : EOpAtomicMax; + case EOpInterlockedMin: return isImage ? EOpImageAtomicMin : EOpAtomicMin; + case EOpInterlockedOr: return isImage ? EOpImageAtomicOr : EOpAtomicOr; + case EOpInterlockedXor: return isImage ? EOpImageAtomicXor : EOpAtomicXor; + case EOpInterlockedExchange: return isImage ? EOpImageAtomicExchange : EOpAtomicExchange; + case EOpInterlockedCompareStore: // TODO: ... + default: + error(loc, "unknown atomic operation", "unknown op", ""); + return EOpNull; + } +} + +// Optionally decompose intrinsics to AST opcodes. +// +void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& node, TIntermNode* arguments) +{ + // HLSL intrinsics can be pass through to native AST opcodes, or decomposed here to existing AST + // opcodes for compatibility with existing software stacks. + static const bool decomposeHlslIntrinsics = true; + + if (!decomposeHlslIntrinsics || !node || !node->getAsOperator()) + return; + + const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr; + TIntermUnary* fnUnary = node->getAsUnaryNode(); + const TOperator op = node->getAsOperator()->getOp(); + + switch (op) { + case EOpGenMul: + { + // mul(a,b) -> MatrixTimesMatrix, MatrixTimesVector, MatrixTimesScalar, VectorTimesScalar, Dot, Mul + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); + + if (arg0->isVector() && arg1->isVector()) { // vec * vec + node->getAsAggregate()->setOperator(EOpDot); + } else { + node = handleBinaryMath(loc, "mul", EOpMul, arg0, arg1); + } + + break; + } + + case EOpRcp: + { + // rcp(a) -> 1 / a + TIntermTyped* arg0 = fnUnary->getOperand(); + TBasicType type0 = arg0->getBasicType(); + TIntermTyped* one = intermediate.addConstantUnion(1, type0, loc, true); + node = handleBinaryMath(loc, "rcp", EOpDiv, one, arg0); + + break; + } + + case EOpSaturate: + { + // saturate(a) -> clamp(a,0,1) + TIntermTyped* arg0 = fnUnary->getOperand(); + TBasicType type0 = arg0->getBasicType(); + TIntermAggregate* clamp = new TIntermAggregate(EOpClamp); + + clamp->getSequence().push_back(arg0); + clamp->getSequence().push_back(intermediate.addConstantUnion(0, type0, loc, true)); + clamp->getSequence().push_back(intermediate.addConstantUnion(1, type0, loc, true)); + clamp->setLoc(loc); + clamp->setType(node->getType()); + clamp->getWritableType().getQualifier().makeTemporary(); + node = clamp; + + break; + } + + case EOpSinCos: + { + // sincos(a,b,c) -> b = sin(a), c = cos(a) + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped(); + + TIntermTyped* sinStatement = handleUnaryMath(loc, "sin", EOpSin, arg0); + TIntermTyped* cosStatement = handleUnaryMath(loc, "cos", EOpCos, arg0); + TIntermTyped* sinAssign = intermediate.addAssign(EOpAssign, arg1, sinStatement, loc); + TIntermTyped* cosAssign = intermediate.addAssign(EOpAssign, arg2, cosStatement, loc); + + TIntermAggregate* compoundStatement = intermediate.makeAggregate(sinAssign, loc); + compoundStatement = intermediate.growAggregate(compoundStatement, cosAssign); + compoundStatement->setOperator(EOpSequence); + compoundStatement->setLoc(loc); + + node = compoundStatement; + + break; + } + + case EOpClip: + { + // clip(a) -> if (any(a<0)) discard; + TIntermTyped* arg0 = fnUnary->getOperand(); + TBasicType type0 = arg0->getBasicType(); + TIntermTyped* compareNode = nullptr; + + // For non-scalars: per experiment with FXC compiler, discard if any component < 0. + if (!arg0->isScalar()) { + // component-wise compare: a < 0 + TIntermAggregate* less = new TIntermAggregate(EOpLessThan); + less->getSequence().push_back(arg0); + less->setLoc(loc); + + // make vec or mat of bool matching dimensions of input + less->setType(TType(EbtBool, EvqTemporary, + arg0->getType().getVectorSize(), + arg0->getType().getMatrixCols(), + arg0->getType().getMatrixRows(), + arg0->getType().isVector())); + + // calculate # of components for comparison const + const int constComponentCount = + std::max(arg0->getType().getVectorSize(), 1) * + std::max(arg0->getType().getMatrixCols(), 1) * + std::max(arg0->getType().getMatrixRows(), 1); + + TConstUnion zero; + zero.setDConst(0.0); + TConstUnionArray zeros(constComponentCount, zero); + + less->getSequence().push_back(intermediate.addConstantUnion(zeros, arg0->getType(), loc, true)); + + compareNode = intermediate.addBuiltInFunctionCall(loc, EOpAny, true, less, TType(EbtBool)); + } else { + TIntermTyped* zero = intermediate.addConstantUnion(0, type0, loc, true); + compareNode = handleBinaryMath(loc, "clip", EOpLessThan, arg0, zero); + } + + TIntermBranch* killNode = intermediate.addBranch(EOpKill, loc); + + node = new TIntermSelection(compareNode, killNode, nullptr); + node->setLoc(loc); + + break; + } + + case EOpLog10: + { + // log10(a) -> log2(a) * 0.301029995663981 (== 1/log2(10)) + TIntermTyped* arg0 = fnUnary->getOperand(); + TIntermTyped* log2 = handleUnaryMath(loc, "log2", EOpLog2, arg0); + TIntermTyped* base = intermediate.addConstantUnion(0.301029995663981f, EbtFloat, loc, true); + + node = handleBinaryMath(loc, "mul", EOpMul, log2, base); + + break; + } + + case EOpDst: + { + // dest.x = 1; + // dest.y = src0.y * src1.y; + // dest.z = src0.z; + // dest.w = src1.w; + + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); + TBasicType type0 = arg0->getBasicType(); + + TIntermTyped* x = intermediate.addConstantUnion(0, loc, true); + TIntermTyped* y = intermediate.addConstantUnion(1, loc, true); + TIntermTyped* z = intermediate.addConstantUnion(2, loc, true); + TIntermTyped* w = intermediate.addConstantUnion(3, loc, true); + + TIntermTyped* src0y = intermediate.addIndex(EOpIndexDirect, arg0, y, loc); + TIntermTyped* src1y = intermediate.addIndex(EOpIndexDirect, arg1, y, loc); + TIntermTyped* src0z = intermediate.addIndex(EOpIndexDirect, arg0, z, loc); + TIntermTyped* src1w = intermediate.addIndex(EOpIndexDirect, arg1, w, loc); + + TIntermAggregate* dst = new TIntermAggregate(EOpConstructVec4); + + dst->getSequence().push_back(intermediate.addConstantUnion(1.0, EbtFloat, loc, true)); + dst->getSequence().push_back(handleBinaryMath(loc, "mul", EOpMul, src0y, src1y)); + dst->getSequence().push_back(src0z); + dst->getSequence().push_back(src1w); + dst->setType(TType(EbtFloat, EvqTemporary, 4)); + dst->setLoc(loc); + node = dst; + + break; + } + + case EOpInterlockedAdd: // optional last argument (if present) is assigned from return value + case EOpInterlockedMin: // ... + case EOpInterlockedMax: // ... + case EOpInterlockedAnd: // ... + case EOpInterlockedOr: // ... + case EOpInterlockedXor: // ... + case EOpInterlockedExchange: // always has output arg + { + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); + + const bool isImage = arg0->getType().isImage(); + const TOperator atomicOp = mapAtomicOp(loc, op, isImage); + + if (argAggregate->getSequence().size() > 2) { + // optional output param is present. return value goes to arg2. + TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped(); + + TIntermAggregate* atomic = new TIntermAggregate(atomicOp); + atomic->getSequence().push_back(arg0); + atomic->getSequence().push_back(arg1); + atomic->setLoc(loc); + atomic->setType(arg0->getType()); + atomic->getWritableType().getQualifier().makeTemporary(); + + node = intermediate.addAssign(EOpAssign, arg2, atomic, loc); + } else { + // Set the matching operator. Since output is absent, this is all we need to do. + node->getAsAggregate()->setOperator(atomicOp); + } + + break; + } + + case EOpInterlockedCompareExchange: + { + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); // dest + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); // cmp + TIntermTyped* arg2 = argAggregate->getSequence()[2]->getAsTyped(); // value + TIntermTyped* arg3 = argAggregate->getSequence()[3]->getAsTyped(); // orig + + const bool isImage = arg0->getType().isImage(); + TIntermAggregate* atomic = new TIntermAggregate(mapAtomicOp(loc, op, isImage)); + atomic->getSequence().push_back(arg0); + atomic->getSequence().push_back(arg1); + atomic->getSequence().push_back(arg2); + atomic->setLoc(loc); + atomic->setType(arg2->getType()); + atomic->getWritableType().getQualifier().makeTemporary(); + + node = intermediate.addAssign(EOpAssign, arg3, atomic, loc); + + break; + } + + case EOpEvaluateAttributeSnapped: + { + // SPIR-V InterpolateAtOffset uses float vec2 offset in pixels + // HLSL uses int2 offset on a 16x16 grid in [-8..7] on x & y: + // iU = (iU<<28)>>28 + // fU = ((float)iU)/16 + // Targets might handle this natively, in which case they can disable + // decompositions. + + TIntermTyped* arg0 = argAggregate->getSequence()[0]->getAsTyped(); // value + TIntermTyped* arg1 = argAggregate->getSequence()[1]->getAsTyped(); // offset + + TIntermTyped* i28 = intermediate.addConstantUnion(28, loc, true); + TIntermTyped* iU = handleBinaryMath(loc, ">>", EOpRightShift, + handleBinaryMath(loc, "<<", EOpLeftShift, arg1, i28), + i28); + + TIntermTyped* recip16 = intermediate.addConstantUnion((1.0/16.0), EbtFloat, loc, true); + TIntermTyped* floatOffset = handleBinaryMath(loc, "mul", EOpMul, + intermediate.addConversion(EOpConstructFloat, + TType(EbtFloat, EvqTemporary, 2), iU), + recip16); + + TIntermAggregate* interp = new TIntermAggregate(EOpInterpolateAtOffset); + interp->getSequence().push_back(arg0); + interp->getSequence().push_back(floatOffset); + interp->setLoc(loc); + interp->setType(arg0->getType()); + interp->getWritableType().getQualifier().makeTemporary(); + + node = interp; + + break; + } + + case EOpLit: + { + TIntermTyped* n_dot_l = argAggregate->getSequence()[0]->getAsTyped(); + TIntermTyped* n_dot_h = argAggregate->getSequence()[1]->getAsTyped(); + TIntermTyped* m = argAggregate->getSequence()[2]->getAsTyped(); + + TIntermAggregate* dst = new TIntermAggregate(EOpConstructVec4); + + // Ambient + dst->getSequence().push_back(intermediate.addConstantUnion(1.0, EbtFloat, loc, true)); + + // Diffuse: + TIntermTyped* zero = intermediate.addConstantUnion(0.0, EbtFloat, loc, true); + TIntermAggregate* diffuse = new TIntermAggregate(EOpMax); + diffuse->getSequence().push_back(n_dot_l); + diffuse->getSequence().push_back(zero); + diffuse->setLoc(loc); + diffuse->setType(TType(EbtFloat)); + dst->getSequence().push_back(diffuse); + + // Specular: + TIntermAggregate* min_ndot = new TIntermAggregate(EOpMin); + min_ndot->getSequence().push_back(n_dot_l); + min_ndot->getSequence().push_back(n_dot_h); + min_ndot->setLoc(loc); + min_ndot->setType(TType(EbtFloat)); + + TIntermTyped* compare = handleBinaryMath(loc, "<", EOpLessThan, min_ndot, zero); + TIntermTyped* n_dot_h_m = handleBinaryMath(loc, "mul", EOpMul, n_dot_h, m); // n_dot_h * m + + dst->getSequence().push_back(intermediate.addSelection(compare, zero, n_dot_h_m, loc)); + + // One: + dst->getSequence().push_back(intermediate.addConstantUnion(1.0, EbtFloat, loc, true)); + + dst->setLoc(loc); + dst->setType(TType(EbtFloat, EvqTemporary, 4)); + node = dst; + break; + } + + case EOpF16tof32: + case EOpF32tof16: + { + // Temporary until decomposition is available. + error(loc, "unimplemented intrinsic: handle natively", "f32tof16", ""); + break; + } + + default: + break; // most pass through unchanged + } +} + // // Handle seeing function call syntax in the grammar, which could be any of // - .length() method @@ -867,6 +1220,8 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct } result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate()); } + + decomposeIntrinsic(loc, result, arguments); } } @@ -1207,6 +1562,38 @@ TFunction* HlslParseContext::handleConstructorCall(const TSourceLoc& loc, const return new TFunction(&empty, type, op); } +// +// Handle seeing a "COLON semantic" at the end of a type declaration, +// by updating the type according to the semantic. +// +void HlslParseContext::handleSemantic(TType& type, const TString& semantic) +{ + // TODO: need to know if it's an input or an output + // The following sketches what needs to be done, but can't be right + // without taking into account stage and input/output. + + if (semantic == "PSIZE") + type.getQualifier().builtIn = EbvPointSize; + else if (semantic == "POSITION") + type.getQualifier().builtIn = EbvPosition; + else if (semantic == "FOG") + type.getQualifier().builtIn = EbvFogFragCoord; + else if (semantic == "DEPTH" || semantic == "SV_Depth") + type.getQualifier().builtIn = EbvFragDepth; + else if (semantic == "VFACE" || semantic == "SV_IsFrontFace") + type.getQualifier().builtIn = EbvFace; + else if (semantic == "VPOS" || semantic == "SV_Position") + type.getQualifier().builtIn = EbvFragCoord; + else if (semantic == "SV_ClipDistance") + type.getQualifier().builtIn = EbvClipDistance; + else if (semantic == "SV_CullDistance") + type.getQualifier().builtIn = EbvCullDistance; + else if (semantic == "SV_VertexID") + type.getQualifier().builtIn = EbvVertexId; + else if (semantic == "SV_ViewportArrayIndex") + type.getQualifier().builtIn = EbvViewportIndex; +} + // // Given a type, find what operation would fully construct it. // @@ -2059,42 +2446,21 @@ void HlslParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& n intermediate.addSymbolLinkageNode(linkage, *block); } -void HlslParseContext::paramCheckFix(const TSourceLoc& loc, const TStorageQualifier& qualifier, TType& type) +void HlslParseContext::paramFix(TType& type) { - switch (qualifier) { + switch (type.getQualifier().storage) { case EvqConst: - case EvqConstReadOnly: type.getQualifier().storage = EvqConstReadOnly; break; - case EvqIn: - case EvqOut: - case EvqInOut: - type.getQualifier().storage = qualifier; - break; case EvqGlobal: case EvqTemporary: type.getQualifier().storage = EvqIn; break; default: - type.getQualifier().storage = EvqIn; - error(loc, "storage qualifier not allowed on function parameter", GetStorageQualifierString(qualifier), ""); break; } } -void HlslParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& qualifier, TType& type) -{ - if (qualifier.isMemory()) { - type.getQualifier().volatil = qualifier.volatil; - type.getQualifier().coherent = qualifier.coherent; - type.getQualifier().readonly = qualifier.readonly; - type.getQualifier().writeonly = qualifier.writeonly; - type.getQualifier().restrict = qualifier.restrict; - } - - paramCheckFix(loc, qualifier.storage, type); -} - void HlslParseContext::specializationCheck(const TSourceLoc& loc, const TType& type, const char* op) { if (type.containsSpecializationSize()) @@ -2119,18 +2485,6 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& pu publicType.qualifier.layoutMatrix = ElmRowMajor; return; } - if (id == TQualifier::getLayoutPackingString(ElpPacked)) { - if (vulkan > 0) - vulkanRemoved(loc, "packed"); - publicType.qualifier.layoutPacking = ElpPacked; - return; - } - if (id == TQualifier::getLayoutPackingString(ElpShared)) { - if (vulkan > 0) - vulkanRemoved(loc, "shared"); - publicType.qualifier.layoutPacking = ElpShared; - return; - } if (id == "push_constant") { requireVulkan(loc, "push_constant"); publicType.qualifier.layoutPushConstant = true; @@ -2417,7 +2771,7 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& pu publicType.shaderQualifiers.localSize[2] = value; return; } - if (spv > 0) { + if (spvVersion.spv != 0) { if (id == "local_size_x_id") { publicType.shaderQualifiers.localSizeSpecId[0] = value; return; diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h index 7fa267ff..dd97e490 100755 --- a/hlsl/hlslParseHelper.h +++ b/hlsl/hlslParseHelper.h @@ -1,5 +1,6 @@ // //Copyright (C) 2016 Google, Inc. +//Copyright (C) 2016 LunarG, Inc. // //All rights reserved. // @@ -43,7 +44,7 @@ namespace glslang { class HlslParseContext : public TParseContextBase { public: HlslParseContext(TSymbolTable&, TIntermediate&, bool parsingBuiltins, - int version, EProfile, int spv, int vulkan, EShLanguage, TInfoSink&, + int version, EProfile, const SpvVersion& spvVersion, EShLanguage, TInfoSink&, bool forwardCompatible = false, EShMessages messages = EShMsgDefault); virtual ~HlslParseContext(); void setLimits(const TBuiltInResource&); @@ -65,7 +66,7 @@ public: bool builtInName(const TString&); void handlePragma(const TSourceLoc&, const TVector&); - TIntermTyped* handleVariable(const TSourceLoc&, TSymbol* symbol, const TString* string); + TIntermTyped* handleVariable(const TSourceLoc&, TSymbol* symbol, const TString* string); TIntermTyped* handleBracketDereference(const TSourceLoc&, TIntermTyped* base, TIntermTyped* index); void checkIndex(const TSourceLoc&, const TType&, int& index); @@ -85,11 +86,13 @@ public: TIntermAggregate* handleFunctionDefinition(const TSourceLoc&, TFunction&); void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg); TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*); + void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments); TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*); void addInputArgumentConversions(const TFunction&, TIntermNode*&) const; TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&) const; void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&); TFunction* handleConstructorCall(const TSourceLoc&, const TType&); + void handleSemantic(TType& type, const TString& semantic); bool parseVectorFields(const TSourceLoc&, const TString&, int vecSize, TVectorFields&); void assignError(const TSourceLoc&, const char* op, TString left, TString right); @@ -113,8 +116,7 @@ public: int computeSamplerTypeIndex(TSampler&); TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&, bool& newDeclaration); void redeclareBuiltinBlock(const TSourceLoc&, TTypeList& typeList, const TString& blockName, const TString* instanceName, TArraySizes* arraySizes); - void paramCheckFix(const TSourceLoc&, const TStorageQualifier&, TType& type); - void paramCheckFix(const TSourceLoc&, const TQualifier&, TType& type); + void paramFix(TType& type); void specializationCheck(const TSourceLoc&, const TType&, const char* op); void setLayoutQualifier(const TSourceLoc&, TPublicType&, TString&); @@ -139,6 +141,11 @@ public: void updateImplicitArraySize(const TSourceLoc&, TIntermNode*, int index); + void nestLooping() { ++loopNestingLevel; } + void unnestLooping() { --loopNestingLevel; } + void pushScope() { symbolTable.push(); } + void popScope() { symbolTable.pop(0); } + protected: void inheritGlobalDefaults(TQualifier& dst) const; TVariable* makeInternalVariable(const char* name, const TType&) const; @@ -147,6 +154,7 @@ protected: TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable); TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer); TOperator mapTypeToConstructorOp(const TType&) const; + TOperator mapAtomicOp(const TSourceLoc& loc, TOperator op, bool isImage); void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken, const char* szExtraInfoFormat, TPrefixType prefix, va_list args); @@ -156,7 +164,6 @@ protected: int loopNestingLevel; // 0 if outside all loops int structNestingLevel; // 0 if outside blocks and structures int controlFlowNestingLevel; // 0 if outside all flow control - int statementNestingLevel; // 0 if outside all flow control or compound statements TList switchSequenceStack; // case, node, case, case, node, ...; ensure only one node between cases; stack of them for nesting TList switchLevel; // the statementNestingLevel the current switch statement is at, which must match the level of its case statements bool inEntrypoint; // if inside a function, true if the function is the entry point diff --git a/hlsl/hlslParseables.cpp b/hlsl/hlslParseables.cpp index b29226d2..cf8574ca 100755 --- a/hlsl/hlslParseables.cpp +++ b/hlsl/hlslParseables.cpp @@ -49,12 +49,165 @@ // #include "hlslParseables.h" +#include +#include + +namespace { // anonymous namespace functions + +const char* BaseTypeName(const char* argOrder, const char* scalarName, const char* vecName, const char* matName) +{ + switch (*argOrder) { + case 'S': return scalarName; + case 'V': return vecName; + case 'M': return matName; + default: return "UNKNOWN_TYPE"; + } +} + +// Create and return a type name. This is done in GLSL, not HLSL conventions, until such +// time as builtins are parsed using the HLSL parser. +// +// order: S = scalar, V = vector, M = matrix +// argType: F = float, D = double, I = int, U = uint, B = bool, S = sampler +// dim0 = vector dimension, or matrix 1st dimension +// dim1 = matrix 2nd dimension +glslang::TString& AppendTypeName(glslang::TString& s, const char* argOrder, const char* argType, int dim0, int dim1) +{ + const bool transpose = (argOrder[0] == '^'); + + // Take transpose of matrix dimensions + if (transpose) { + std::swap(dim0, dim1); + ++argOrder; + } + + switch (*argType) { + case '-': s += "void"; break; + case 'F': s += BaseTypeName(argOrder, "float", "vec", "mat"); break; + case 'D': s += BaseTypeName(argOrder, "double", "dvec", "dmat"); break; + case 'I': s += BaseTypeName(argOrder, "int", "ivec", "imat"); break; + case 'U': s += BaseTypeName(argOrder, "uint", "uvec", "umat"); break; + case 'B': s += BaseTypeName(argOrder, "bool", "bvec", "bmat"); break; + case 'S': s += BaseTypeName(argOrder, "sampler", "sampler", "sampler"); break; // TODO: + default: s += "UNKNOWN_TYPE"; break; + } + + // handle fixed vector sizes, such as float3, and only ever 3. + const int fixedVecSize = isdigit(argOrder[1]) ? (argOrder[1] - '0') : 0; + if (fixedVecSize != 0) + dim0 = dim1 = fixedVecSize; + + // Add sampler dimensions + if (*argType == 'S') { + switch (dim0) { + case 1: s += "1D"; break; + case 2: s += "2D"; break; + case 3: s += "3D"; break; + case 4: s += "Cube"; break; + default: s += "UNKNOWN_SAMPLER"; break; + } + } + + // verify dimensions + if ((*argOrder == 'V' || *argOrder == 'M') && (dim0 < 1 || dim0 > 4) || + (*argOrder == 'M' && (dim1 < 1 || dim1 > 4))) { + s += "UNKNOWN_DIMENSION"; + return s; + } + + switch (*argOrder) { + case '-': break; // no dimensions for voids + case 'S': break; // no dimensions on scalars + case 'V': s += ('0' + dim0); break; + case 'M': s += ('0' + dim0); s += 'x'; s += ('0' + dim1); break; + } + + return s; +} + +// TODO: the GLSL parser is currently used to parse HLSL prototypes. However, many valid HLSL prototypes +// are not valid GLSL prototypes. This rejects the invalid ones. Thus, there is a single switch below +// to enable creation of the entire HLSL space. +inline bool IsValidGlsl(const char* cname, char retOrder, char retType, char argOrder, char argType, + int dim0, int dim1, int dim0Max, int dim1Max) +{ + const bool isVec = dim0Max > 1 || argType == 'V'; + const bool isMat = dim1Max > 1 || argType == 'M'; + + if (argType == 'D' || // avoid double args + retType == 'D' || // avoid double return + (isVec && dim0 == 1) || // avoid vec1 + (isMat && dim0 == 1 && dim1 == 1)) // avoid mat1x1 + return false; + + const std::string name(cname); // for ease of comparison. slow, but temporary, until HLSL parser is online. + + if (isMat && dim0 != dim1) // TODO: avoid mats until we find the right GLSL profile + return false; + + if (isMat && (argType == 'I' || argType == 'U' || argType == 'B') || + retOrder == 'M' && (retType == 'I' || retType == 'U' || retType == 'B')) + return false; + + if (name == "GetRenderTargetSamplePosition" || + name == "tex1D" || + name == "tex1Dgrad") + return false; + + return true; +} + + +// Return true for the end of a single argument key, which can be the end of the string, or +// the comma separator. +inline bool IsEndOfArg(const char* arg) +{ + return arg == nullptr || *arg == '\0' || *arg == ','; +} + + +// return position of end of argument specifier +inline const char* FindEndOfArg(const char* arg) +{ + while (!IsEndOfArg(arg)) + ++arg; + + return *arg == '\0' ? nullptr : arg; +} + + +// Return pointer to beginning of Nth argument specifier in the string. +inline const char* NthArg(const char* arg, int n) +{ + for (int x=0; x 0) // handle fixed sized vectors + dim0Min = dim0Max = fixedVecSize; +} + +} // end anonymous namespace namespace glslang { TBuiltInParseablesHlsl::TBuiltInParseablesHlsl() { - assert(0 && "Unimplemented TBuiltInParseablesHlsl::TBuiltInParseablesHlsl"); } // @@ -65,9 +218,277 @@ TBuiltInParseablesHlsl::TBuiltInParseablesHlsl() // Most built-ins variables can be added as simple text strings. Some need to // be added programmatically, which is done later in IdentifyBuiltIns() below. // -void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, int spv, int vulkan) +void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, const SpvVersion& spvVersion) { - assert(0 && "Unimplemented TBuiltInParseablesHlsl::initialize"); + static const EShLanguageMask EShLangAll = EShLanguageMask(EShLangCount - 1); + + // This structure encodes the prototype information for each HLSL intrinsic. + // Because explicit enumeration would be cumbersome, it's procedurally generated. + // orderKey can be: + // S = scalar, V = vector, M = matrix, - = void + // typekey can be: + // D = double, F = float, U = uint, I = int, B = bool, S = sampler, - = void + // An empty order or type key repeats the first one. E.g: SVM,, means 3 args each of SVM. + // '>' as first letter of order creates an output parameter + // '<' as first letter of order creates an input parameter + // '^' as first letter of order takes transpose dimensions + + static const struct { + const char* name; // intrinsic name + const char* retOrder; // return type key: empty matches order of 1st argument + const char* retType; // return type key: empty matches type of 1st argument + const char* argOrder; // argument order key + const char* argType; // argument type key + unsigned int stage; // stage mask + } hlslIntrinsics[] = { + // name retOrd retType argOrder argType stage mask + // ----------------------------------------------------------------------------------------------- + { "abort", nullptr, nullptr, "-", "-", EShLangAll }, + { "abs", nullptr, nullptr, "SVM", "DFUI", EShLangAll }, + { "acos", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "all", "S", "B", "SVM", "BFI", EShLangAll }, + { "AllMemoryBarrier", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "AllMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "any", "S", "B", "SVM", "BFI", EShLangAll }, + { "asdouble", "S", "D", "S,", "U,", EShLangAll }, + { "asdouble", "V2", "D", "V2,", "U,", EShLangAll }, + { "asfloat", nullptr, "F", "SVM", "BFIU", EShLangAll }, + { "asin", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "asint", nullptr, "I", "SVM", "FU", EShLangAll }, + { "asuint", nullptr, "U", "SVM", "FU", EShLangAll }, + { "atan", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "atan2", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "ceil", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "CheckAccessFullyMapped", "S", "B" , "S", "U", EShLangFragmentMask | EShLangComputeMask }, + { "clamp", nullptr, nullptr, "SVM,,", "FUI,,", EShLangAll }, + { "clip", "-", "-", "SVM", "F", EShLangFragmentMask }, + { "cos", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "cosh", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "countbits", nullptr, nullptr, "SV", "U", EShLangAll }, + { "cross", nullptr, nullptr, "V3,", "F,", EShLangAll }, + { "D3DCOLORtoUBYTE4", "V4", "I", "V4", "F", EShLangAll }, + { "ddx", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddx_coarse", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddx_fine", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddy", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddy_coarse", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "ddy_fine", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "degrees", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "determinant", "S", "F", "M", "F", EShLangAll }, + { "DeviceMemoryBarrier", nullptr, nullptr, "-", "-", EShLangFragmentMask | EShLangComputeMask }, + { "DeviceMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "distance", "S", "F", "V,", "F,", EShLangAll }, + { "dot", "S", nullptr, "V,", "FI,", EShLangAll }, + { "dst", nullptr, nullptr, "V4,V4", "F,", EShLangAll }, + // { "errorf", "-", "-", "", "", EShLangAll }, TODO: varargs + { "EvaluateAttributeAtCentroid", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "EvaluateAttributeAtSample", nullptr, nullptr, "SVM,S", "F,U", EShLangFragmentMask }, + { "EvaluateAttributeSnapped", nullptr, nullptr, "SVM,V2", "F,I", EShLangFragmentMask }, + { "exp", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "exp2", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "f16tof32", nullptr, "F", "SV", "U", EShLangAll }, + { "f32tof16", nullptr, "U", "SV", "F", EShLangAll }, + { "faceforward", nullptr, nullptr, "V,,", "F,,", EShLangAll }, + { "firstbithigh", nullptr, nullptr, "SV", "UI", EShLangAll }, + { "firstbitlow", nullptr, nullptr, "SV", "UI", EShLangAll }, + { "floor", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "fma", nullptr, nullptr, "SVM,,", "D,,", EShLangAll }, + { "fmod", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "frac", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "frexp", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "fwidth", nullptr, nullptr, "SVM", "F", EShLangFragmentMask }, + { "GetRenderTargetSampleCount", "S", "U", "-", "-", EShLangAll }, + { "GetRenderTargetSamplePosition", "V2", "F", "V1", "I", EShLangAll }, + { "GroupMemoryBarrier", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "GroupMemoryBarrierWithGroupSync", nullptr, nullptr, "-", "-", EShLangComputeMask }, + { "InterlockedAdd", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedAdd", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedAnd", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedAnd", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedCompareExchange", "-", "-", "SVM,,,>", "UI,,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedCompareStore", "-", "-", "SVM,,", "UI,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedExchange", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedMax", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedMax", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedMin", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedMin", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedOr", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedOr", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedXor", "-", "-", "SVM,,>", "UI,,", EShLangFragmentMask | EShLangComputeMask }, + { "InterlockedXor", "-", "-", "SVM,", "UI,", EShLangFragmentMask | EShLangComputeMask }, + { "isfinite", nullptr, "B" , "SVM", "F", EShLangAll }, + { "isinf", nullptr, "B" , "SVM", "F", EShLangAll }, + { "isnan", nullptr, "B" , "SVM", "F", EShLangAll }, + { "ldexp", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "length", "S", "F", "V", "F", EShLangAll }, + { "lit", "V4", "F", "S,,", "F,,", EShLangAll }, + { "log", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "log10", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "log2", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "mad", nullptr, nullptr, "SVM,,", "DFUI,,", EShLangAll }, + { "max", nullptr, nullptr, "SVM,", "FI,", EShLangAll }, + { "min", nullptr, nullptr, "SVM,", "FI,", EShLangAll }, + { "modf", nullptr, nullptr, "SVM,>", "FI,", EShLangAll }, + { "msad4", "V4", "U", "S,V2,V4", "U,,", EShLangAll }, + // TODO: fix matrix return size for non-square mats used with mul opcode + { "mul", "S", nullptr, "S,S", "FI,", EShLangAll }, + { "mul", "V", nullptr, "S,V", "FI,", EShLangAll }, + { "mul", "M", nullptr, "S,M", "FI,", EShLangAll }, + { "mul", "V", nullptr, "V,S", "FI,", EShLangAll }, + { "mul", "S", nullptr, "V,V", "FI,", EShLangAll }, + { "mul", "V", nullptr, "V,M", "FI,", EShLangAll }, + { "mul", "M", nullptr, "M,S", "FI,", EShLangAll }, + { "mul", "V", nullptr, "M,V", "FI,", EShLangAll }, + { "mul", "M", nullptr, "M,M", "FI,", EShLangAll }, + { "noise", "S", "F", "V", "F", EShLangFragmentMask }, + { "normalize", nullptr, nullptr, "V", "F", EShLangAll }, + { "pow", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + // { "printf", "-", "-", "", "", EShLangAll }, TODO: varargs + { "Process2DQuadTessFactorsAvg", "-", "-", "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, + { "Process2DQuadTessFactorsMax", "-", "-", "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, + { "Process2DQuadTessFactorsMin", "-", "-", "V4,V2,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, + { "ProcessIsolineTessFactors", "-", "-", "S,,>,>", "F,,,", EShLangTessControlMask }, + { "ProcessQuadTessFactorsAvg", "-", "-", "V4,S,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, + { "ProcessQuadTessFactorsMax", "-", "-", "V4,S,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, + { "ProcessQuadTessFactorsMin", "-", "-", "V4,S,>V4,>V2,>V2", "F,,,,", EShLangTessControlMask }, + { "ProcessTriTessFactorsAvg", "-", "-", "V3,S,>V3,>S,>S", "F,,,,", EShLangTessControlMask }, + { "ProcessTriTessFactorsMax", "-", "-", "V3,S,>V3,>S,>S", "F,,,,", EShLangTessControlMask }, + { "ProcessTriTessFactorsMin", "-", "-", "V3,S,>V3,>S,>S", "F,,,,", EShLangTessControlMask }, + { "radians", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "rcp", nullptr, nullptr, "SVM", "FD", EShLangAll }, + { "reflect", nullptr, nullptr, "V,", "F,", EShLangAll }, + { "refract", nullptr, nullptr, "V,V,S", "F,,", EShLangAll }, + { "reversebits", nullptr, nullptr, "SV", "U", EShLangAll }, + { "round", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "rsqrt", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "saturate", nullptr, nullptr , "SVM", "F", EShLangAll }, + { "sign", nullptr, nullptr, "SVM", "FI", EShLangAll }, + { "sin", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "sincos", "-", "-", "SVM,>,>", "F,,", EShLangAll }, + { "sinh", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "smoothstep", nullptr, nullptr, "SVM,,", "F,,", EShLangAll }, + { "sqrt", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "step", nullptr, nullptr, "SVM,", "F,", EShLangAll }, + { "tan", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "tanh", nullptr, nullptr, "SVM", "F", EShLangAll }, + { "tex1D", "V4", "F", "S1,S", "S,F", EShLangFragmentMask }, + { "tex1D", "V4", "F", "S1,S,V1,V1", "S,F,F,F",EShLangFragmentMask }, + { "tex1Dbias", "V4", "F", "S1,V4", "S,F", EShLangFragmentMask }, + { "tex1Dgrad", "V4", "F", "S1,V1,V1,V1","S,F,F,F",EShLangFragmentMask }, + { "tex1Dlod", "V4", "F", "S1,V4", "S,F", EShLangFragmentMask }, + { "tex1Dproj", "V4", "F", "S1,V4", "S,F", EShLangFragmentMask }, + { "tex2D", "V4", "F", "S2,V2", "S,F", EShLangFragmentMask }, + { "tex2D", "V4", "F", "S2,V2,V2,V2","S,F,F,F",EShLangFragmentMask }, + { "tex2Dbias", "V4", "F", "S2,V4", "S,F", EShLangFragmentMask }, + { "tex2Dgrad", "V4", "F", "S2,V2,V2,V2","S,F,F,F",EShLangFragmentMask }, + { "tex2Dlod", "V4", "F", "S2,V4", "S,F", EShLangFragmentMask }, + { "tex2Dproj", "V4", "F", "S2,V4", "S,F", EShLangFragmentMask }, + { "tex3D", "V4", "F", "S3,V3", "S,F", EShLangFragmentMask }, + { "tex3D", "V4", "F", "S3,V3,V3,V3","S,F,F,F",EShLangFragmentMask }, + { "tex3Dbias", "V4", "F", "S3,V4", "S,F", EShLangFragmentMask }, + { "tex3Dgrad", "V4", "F", "S3,V3,V3,V3","S,F,F,F",EShLangFragmentMask }, + { "tex3Dlod", "V4", "F", "S3,V4", "S,F", EShLangFragmentMask }, + { "tex3Dproj", "V4", "F", "S3,V4", "S,F", EShLangFragmentMask }, + { "texCUBE", "V4", "F", "S4,V3", "S,F", EShLangFragmentMask }, + { "texCUBE", "V4", "F", "S4,V3,V3,V3","S,F,F,F",EShLangFragmentMask }, + { "texCUBEbias", "V4", "F", "S4,V4", "S,F", EShLangFragmentMask }, + { "texCUBEgrad", "V4", "F", "S4,V3,V3,V3","S,F,F,F",EShLangFragmentMask }, + { "texCUBElod", "V4", "F", "S4,V4", "S,F", EShLangFragmentMask }, + { "texCUBEproj", "V4", "F", "S4,V4", "S,F", EShLangFragmentMask }, + { "transpose", "^M", nullptr, "M", "F", EShLangAll }, + { "trunc", nullptr, nullptr, "SVM", "F", EShLangAll }, + + // Mark end of list, since we want to avoid a range-based for, as some compilers don't handle it yet. + { nullptr, nullptr, nullptr, nullptr, nullptr, 0 }, + }; + + // Set this to true to avoid generating prototypes that will be invalid for the GLSL parser. + // TODO: turn it off (and remove the code) when the HLSL parser can be used to parse builtins. + static const bool skipInvalidGlsl = true; + + // Create prototypes for the intrinsics. TODO: Avoid ranged based for until all compilers can handle it. + for (int icount = 0; hlslIntrinsics[icount].name; ++icount) { + const auto& intrinsic = hlslIntrinsics[icount]; + + for (int stage = 0; stage < EShLangCount; ++stage) { // for each stage... + if ((intrinsic.stage & (1< 0 ? ", ": ""); // comma separator if needed + + if (*nthArgOrder == '>') { // output params + ++nthArgOrder; + s.append("out "); + } else if (*nthArgOrder == '<') { // input params + ++nthArgOrder; + s.append("in "); + } + + // Comma means use the 1st argument order and type. + if (*nthArgOrder == ',' || *nthArgOrder == '\0') nthArgOrder = argOrder; + if (*nthArgType == ',' || *nthArgType == '\0') nthArgType = argType; + + AppendTypeName(s, nthArgOrder, nthArgType, dim0, dim1); // Add first argument + } + + s.append(");\n"); // close paren and trailing semicolon + } + } + } + + if (fixedVecSize > 0) // skip over number for fixed size vectors + ++argOrder; + } + + if (intrinsic.stage == EShLangAll) // common builtins are only added once. + break; + } + } + + // printf("Common:\n%s\n", getCommonString().c_str()); + // printf("Frag:\n%s\n", getStageString(EShLangFragment).c_str()); + // printf("Vertex:\n%s\n", getStageString(EShLangVertex).c_str()); + // printf("Geo:\n%s\n", getStageString(EShLangGeometry).c_str()); + // printf("TessCtrl:\n%s\n", getStageString(EShLangTessControl).c_str()); + // printf("TessEval:\n%s\n", getStageString(EShLangTessEvaluation).c_str()); + // printf("Compute:\n%s\n", getStageString(EShLangCompute).c_str()); } // @@ -77,10 +498,9 @@ void TBuiltInParseablesHlsl::initialize(int version, EProfile profile, int spv, // add stage-specific entries to the commonBuiltins, and only if that stage // was requested. // -void TBuiltInParseablesHlsl::initialize(const TBuiltInResource &resources, int version, EProfile profile, int spv, - int vulkan, EShLanguage language) +void TBuiltInParseablesHlsl::initialize(const TBuiltInResource &resources, int version, EProfile profile, + const SpvVersion& spvVersion, EShLanguage language) { - assert(0 && "Unimplemented TBuiltInParseablesHlsl::initialize"); } @@ -92,10 +512,143 @@ void TBuiltInParseablesHlsl::initialize(const TBuiltInResource &resources, int v // 3) Tag extension-related symbols added to their base version with their extensions, so // that if an early version has the extension turned off, there is an error reported on use. // -void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLanguage language, +void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable) { - assert(0 && "Unimplemented TBuiltInParseablesHlsl::identifyBuiltIns"); + // symbolTable.relateToOperator("abort", EOpAbort); + symbolTable.relateToOperator("abs", EOpAbs); + symbolTable.relateToOperator("acos", EOpAcos); + symbolTable.relateToOperator("all", EOpAll); + symbolTable.relateToOperator("AllMemoryBarrier", EOpMemoryBarrier); + symbolTable.relateToOperator("AllMemoryBarrierWithGroupSync", EOpAllMemoryBarrierWithGroupSync); + symbolTable.relateToOperator("any", EOpAny); + symbolTable.relateToOperator("asdouble", EOpUint64BitsToDouble); + symbolTable.relateToOperator("asfloat", EOpIntBitsToFloat); + symbolTable.relateToOperator("asin", EOpAsin); + symbolTable.relateToOperator("asint", EOpFloatBitsToInt); + symbolTable.relateToOperator("asuint", EOpFloatBitsToUint); + symbolTable.relateToOperator("atan", EOpAtan); + symbolTable.relateToOperator("atan2", EOpAtan); + symbolTable.relateToOperator("ceil", EOpCeil); + // symbolTable.relateToOperator("CheckAccessFullyMapped"); + symbolTable.relateToOperator("clamp", EOpClamp); + symbolTable.relateToOperator("clip", EOpClip); + symbolTable.relateToOperator("cos", EOpCos); + symbolTable.relateToOperator("cosh", EOpCosh); + symbolTable.relateToOperator("countbits", EOpBitCount); + symbolTable.relateToOperator("cross", EOpCross); + // symbolTable.relateToOperator("D3DCOLORtoUBYTE4", EOpD3DCOLORtoUBYTE4); + symbolTable.relateToOperator("ddx", EOpDPdx); + symbolTable.relateToOperator("ddx_coarse", EOpDPdxCoarse); + symbolTable.relateToOperator("ddx_fine", EOpDPdxFine); + symbolTable.relateToOperator("ddy", EOpDPdy); + symbolTable.relateToOperator("ddy_coarse", EOpDPdyCoarse); + symbolTable.relateToOperator("ddy_fine", EOpDPdyFine); + symbolTable.relateToOperator("degrees", EOpDegrees); + symbolTable.relateToOperator("determinant", EOpDeterminant); + symbolTable.relateToOperator("DeviceMemoryBarrier", EOpGroupMemoryBarrier); // == ScopeDevice+CrossWorkGroup + symbolTable.relateToOperator("DeviceMemoryBarrierWithGroupSync", EOpGroupMemoryBarrierWithGroupSync); // ... + symbolTable.relateToOperator("distance", EOpDistance); + symbolTable.relateToOperator("dot", EOpDot); + symbolTable.relateToOperator("dst", EOpDst); + // symbolTable.relateToOperator("errorf", EOpErrorf); + symbolTable.relateToOperator("EvaluateAttributeAtCentroid", EOpInterpolateAtCentroid); + symbolTable.relateToOperator("EvaluateAttributeAtSample", EOpInterpolateAtSample); + symbolTable.relateToOperator("EvaluateAttributeSnapped", EOpEvaluateAttributeSnapped); + symbolTable.relateToOperator("exp", EOpExp); + symbolTable.relateToOperator("exp2", EOpExp2); + symbolTable.relateToOperator("f16tof32", EOpF16tof32); + symbolTable.relateToOperator("f32tof16", EOpF32tof16); + symbolTable.relateToOperator("faceforward", EOpFaceForward); + symbolTable.relateToOperator("firstbithigh", EOpFindMSB); + symbolTable.relateToOperator("firstbitlow", EOpFindLSB); + symbolTable.relateToOperator("floor", EOpFloor); + symbolTable.relateToOperator("fma", EOpFma); + symbolTable.relateToOperator("fmod", EOpMod); + symbolTable.relateToOperator("frac", EOpFract); + symbolTable.relateToOperator("frexp", EOpFrexp); + symbolTable.relateToOperator("fwidth", EOpFwidth); + // symbolTable.relateToOperator("GetRenderTargetSampleCount"); + // symbolTable.relateToOperator("GetRenderTargetSamplePosition"); + symbolTable.relateToOperator("GroupMemoryBarrier", EOpWorkgroupMemoryBarrier); + symbolTable.relateToOperator("GroupMemoryBarrierWithGroupSync", EOpWorkgroupMemoryBarrierWithGroupSync); + symbolTable.relateToOperator("InterlockedAdd", EOpInterlockedAdd); + symbolTable.relateToOperator("InterlockedAnd", EOpInterlockedAnd); + symbolTable.relateToOperator("InterlockedCompareExchange", EOpInterlockedCompareExchange); + symbolTable.relateToOperator("InterlockedCompareStore", EOpInterlockedCompareStore); + symbolTable.relateToOperator("InterlockedExchange", EOpInterlockedExchange); + symbolTable.relateToOperator("InterlockedMax", EOpInterlockedMax); + symbolTable.relateToOperator("InterlockedMin", EOpInterlockedMin); + symbolTable.relateToOperator("InterlockedOr", EOpInterlockedOr); + symbolTable.relateToOperator("InterlockedXor", EOpInterlockedXor); + symbolTable.relateToOperator("isfinite", EOpIsFinite); + symbolTable.relateToOperator("isinf", EOpIsInf); + symbolTable.relateToOperator("isnan", EOpIsNan); + symbolTable.relateToOperator("ldexp", EOpLdexp); + symbolTable.relateToOperator("length", EOpLength); + symbolTable.relateToOperator("lit", EOpLit); + symbolTable.relateToOperator("log", EOpLog); + symbolTable.relateToOperator("log10", EOpLog10); + symbolTable.relateToOperator("log2", EOpLog2); + // symbolTable.relateToOperator("mad"); + symbolTable.relateToOperator("max", EOpMax); + symbolTable.relateToOperator("min", EOpMin); + symbolTable.relateToOperator("modf", EOpModf); + // symbolTable.relateToOperator("msad4", EOpMsad4); + symbolTable.relateToOperator("mul", EOpGenMul); + // symbolTable.relateToOperator("noise", EOpNoise); // TODO: check return type + symbolTable.relateToOperator("normalize", EOpNormalize); + symbolTable.relateToOperator("pow", EOpPow); + // symbolTable.relateToOperator("printf", EOpPrintf); + // symbolTable.relateToOperator("Process2DQuadTessFactorsAvg"); + // symbolTable.relateToOperator("Process2DQuadTessFactorsMax"); + // symbolTable.relateToOperator("Process2DQuadTessFactorsMin"); + // symbolTable.relateToOperator("ProcessIsolineTessFactors"); + // symbolTable.relateToOperator("ProcessQuadTessFactorsAvg"); + // symbolTable.relateToOperator("ProcessQuadTessFactorsMax"); + // symbolTable.relateToOperator("ProcessQuadTessFactorsMin"); + // symbolTable.relateToOperator("ProcessTriTessFactorsAvg"); + // symbolTable.relateToOperator("ProcessTriTessFactorsMax"); + // symbolTable.relateToOperator("ProcessTriTessFactorsMin"); + symbolTable.relateToOperator("radians", EOpRadians); + symbolTable.relateToOperator("rcp", EOpRcp); + symbolTable.relateToOperator("reflect", EOpReflect); + symbolTable.relateToOperator("refract", EOpRefract); + symbolTable.relateToOperator("reversebits", EOpBitFieldReverse); + symbolTable.relateToOperator("round", EOpRoundEven); + symbolTable.relateToOperator("rsqrt", EOpInverseSqrt); + symbolTable.relateToOperator("saturate", EOpSaturate); + symbolTable.relateToOperator("sign", EOpSign); + symbolTable.relateToOperator("sin", EOpSin); + symbolTable.relateToOperator("sincos", EOpSinCos); + symbolTable.relateToOperator("sinh", EOpSinh); + symbolTable.relateToOperator("smoothstep", EOpSmoothStep); + symbolTable.relateToOperator("sqrt", EOpSqrt); + symbolTable.relateToOperator("step", EOpStep); + symbolTable.relateToOperator("tan", EOpTan); + symbolTable.relateToOperator("tanh", EOpTanh); + symbolTable.relateToOperator("tex1D", EOpTexture); + // symbolTable.relateToOperator("tex1Dbias", // TODO: + symbolTable.relateToOperator("tex1Dgrad", EOpTextureGrad); + symbolTable.relateToOperator("tex1Dlod", EOpTextureLod); + symbolTable.relateToOperator("tex1Dproj", EOpTextureProj); + symbolTable.relateToOperator("tex2D", EOpTexture); + // symbolTable.relateToOperator("tex2Dbias", // TODO: + symbolTable.relateToOperator("tex2Dgrad", EOpTextureGrad); + symbolTable.relateToOperator("tex2Dlod", EOpTextureLod); + // symbolTable.relateToOperator("tex2Dproj", EOpTextureProj); + symbolTable.relateToOperator("tex3D", EOpTexture); + // symbolTable.relateToOperator("tex3Dbias"); // TODO + symbolTable.relateToOperator("tex3Dgrad", EOpTextureGrad); + symbolTable.relateToOperator("tex3Dlod", EOpTextureLod); + // symbolTable.relateToOperator("tex3Dproj", EOpTextureProj); + symbolTable.relateToOperator("texCUBE", EOpTexture); + // symbolTable.relateToOperator("texCUBEbias", // TODO + symbolTable.relateToOperator("texCUBEgrad", EOpTextureGrad); + symbolTable.relateToOperator("texCUBElod", EOpTextureLod); + // symbolTable.relateToOperator("texCUBEproj", EOpTextureProj); + symbolTable.relateToOperator("transpose", EOpTranspose); + symbolTable.relateToOperator("trunc", EOpTrunc); } // @@ -107,10 +660,9 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, int // 2) Tag extension-related symbols added to their base version with their extensions, so // that if an early version has the extension turned off, there is an error reported on use. // -void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, int spv, int /*vulkan*/, EShLanguage language, +void TBuiltInParseablesHlsl::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) { - assert(0 && "Unimplemented TBuiltInParseablesHlsl::identifyBuiltIns"); } diff --git a/hlsl/hlslParseables.h b/hlsl/hlslParseables.h index c09c1ecf..f03e64db 100755 --- a/hlsl/hlslParseables.h +++ b/hlsl/hlslParseables.h @@ -48,12 +48,12 @@ class TBuiltInParseablesHlsl : public TBuiltInParseables { public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) TBuiltInParseablesHlsl(); - void initialize(int version, EProfile, int spv, int vulkan); - void initialize(const TBuiltInResource& resources, int version, EProfile, int spv, int vulkan, EShLanguage); + void initialize(int version, EProfile, const SpvVersion& spvVersion); + void initialize(const TBuiltInResource& resources, int version, EProfile, const SpvVersion& spvVersion, EShLanguage); - void identifyBuiltIns(int version, EProfile profile, int spv, int vulkan, EShLanguage language, TSymbolTable& symbolTable); + void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable); - void identifyBuiltIns(int version, EProfile profile, int spv, int /*vulkan*/, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources); + void identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources); }; } // end namespace glslang diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp index ab96bad6..69e582f6 100755 --- a/hlsl/hlslScanContext.cpp +++ b/hlsl/hlslScanContext.cpp @@ -102,6 +102,7 @@ void HlslScanContext::fillInKeywordMap() (*KeywordMap)["extern"] = EHTokExtern; (*KeywordMap)["uniform"] = EHTokUniform; (*KeywordMap)["volatile"] = EHTokVolatile; + (*KeywordMap)["precise"] = EHTokPrecise; (*KeywordMap)["shared"] = EHTokShared; (*KeywordMap)["groupshared"] = EHTokGroupShared; (*KeywordMap)["linear"] = EHTokLinear; @@ -168,6 +169,38 @@ void HlslScanContext::fillInKeywordMap() (*KeywordMap)["int4x2"] = EHTokInt4x2; (*KeywordMap)["int4x3"] = EHTokInt4x3; (*KeywordMap)["int4x4"] = EHTokInt4x4; + (*KeywordMap)["uint1x1"] = EHTokUint1x1; + (*KeywordMap)["uint1x2"] = EHTokUint1x2; + (*KeywordMap)["uint1x3"] = EHTokUint1x3; + (*KeywordMap)["uint1x4"] = EHTokUint1x4; + (*KeywordMap)["uint2x1"] = EHTokUint2x1; + (*KeywordMap)["uint2x2"] = EHTokUint2x2; + (*KeywordMap)["uint2x3"] = EHTokUint2x3; + (*KeywordMap)["uint2x4"] = EHTokUint2x4; + (*KeywordMap)["uint3x1"] = EHTokUint3x1; + (*KeywordMap)["uint3x2"] = EHTokUint3x2; + (*KeywordMap)["uint3x3"] = EHTokUint3x3; + (*KeywordMap)["uint3x4"] = EHTokUint3x4; + (*KeywordMap)["uint4x1"] = EHTokUint4x1; + (*KeywordMap)["uint4x2"] = EHTokUint4x2; + (*KeywordMap)["uint4x3"] = EHTokUint4x3; + (*KeywordMap)["uint4x4"] = EHTokUint4x4; + (*KeywordMap)["bool1x1"] = EHTokBool1x1; + (*KeywordMap)["bool1x2"] = EHTokBool1x2; + (*KeywordMap)["bool1x3"] = EHTokBool1x3; + (*KeywordMap)["bool1x4"] = EHTokBool1x4; + (*KeywordMap)["bool2x1"] = EHTokBool2x1; + (*KeywordMap)["bool2x2"] = EHTokBool2x2; + (*KeywordMap)["bool2x3"] = EHTokBool2x3; + (*KeywordMap)["bool2x4"] = EHTokBool2x4; + (*KeywordMap)["bool3x1"] = EHTokBool3x1; + (*KeywordMap)["bool3x2"] = EHTokBool3x2; + (*KeywordMap)["bool3x3"] = EHTokBool3x3; + (*KeywordMap)["bool3x4"] = EHTokBool3x4; + (*KeywordMap)["bool4x1"] = EHTokBool4x1; + (*KeywordMap)["bool4x2"] = EHTokBool4x2; + (*KeywordMap)["bool4x3"] = EHTokBool4x3; + (*KeywordMap)["bool4x4"] = EHTokBool4x4; (*KeywordMap)["float1x1"] = EHTokFloat1x1; (*KeywordMap)["float1x2"] = EHTokFloat1x2; (*KeywordMap)["float1x3"] = EHTokFloat1x3; @@ -282,11 +315,8 @@ void HlslScanContext::deleteKeywordMap() // Wrapper for tokenizeClass()"] = to get everything inside the token. void HlslScanContext::tokenize(HlslToken& token) { - token.isType = false; EHlslTokenClass tokenClass = tokenizeClass(token); token.tokenClass = tokenClass; - if (token.isType) - afterType = true; } // @@ -306,13 +336,13 @@ EHlslTokenClass HlslScanContext::tokenizeClass(HlslToken& token) loc = ppToken.loc; parserToken->loc = loc; switch (ppToken.token) { - case ';': afterType = false; return EHTokSemicolon; - case ',': afterType = false; return EHTokComma; + case ';': return EHTokSemicolon; + case ',': return EHTokComma; case ':': return EHTokColon; - case '=': afterType = false; return EHTokAssign; - case '(': afterType = false; return EHTokLeftParen; - case ')': afterType = false; return EHTokRightParen; - case '.': field = true; return EHTokDot; + case '=': return EHTokAssign; + case '(': return EHTokLeftParen; + case ')': return EHTokRightParen; + case '.': return EHTokDot; case '!': return EHTokBang; case '-': return EHTokDash; case '~': return EHTokTilde; @@ -368,7 +398,6 @@ EHlslTokenClass HlslScanContext::tokenizeClass(HlslToken& token) case PpAtomIdentifier: { EHlslTokenClass token = tokenizeIdentifier(); - field = false; return token; } @@ -510,7 +539,6 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier() case EHTokDouble4x2: case EHTokDouble4x3: case EHTokDouble4x4: - parserToken->isType = true; return keyword; // texturing types @@ -528,7 +556,6 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier() case EHTokTexture2darray: case EHTokTexture3d: case EHTokTextureCube: - parserToken->isType = true; return keyword; // variable, user type, ... @@ -566,19 +593,6 @@ EHlslTokenClass HlslScanContext::tokenizeIdentifier() EHlslTokenClass HlslScanContext::identifierOrType() { parserToken->string = NewPoolTString(tokenText); - if (field) - return EHTokIdentifier; - - parserToken->symbol = parseContext.symbolTable.find(*parserToken->string); - if (afterType == false && parserToken->symbol) { - if (const TVariable* variable = parserToken->symbol->getAsVariable()) { - if (variable->isUserType()) { - afterType = true; - - return EHTokTypeName; - } - } - } return EHTokIdentifier; } diff --git a/hlsl/hlslScanContext.h b/hlsl/hlslScanContext.h index 04f24383..144a8534 100755 --- a/hlsl/hlslScanContext.h +++ b/hlsl/hlslScanContext.h @@ -54,10 +54,9 @@ class TPpToken; // Everything needed to fully describe a token. // struct HlslToken { - HlslToken() : isType(false), string(nullptr), symbol(nullptr) { loc.init(); } + HlslToken() : string(nullptr), symbol(nullptr) { loc.init(); } TSourceLoc loc; // location of token in the source EHlslTokenClass tokenClass; // what kind of token it is - bool isType; // true if the token represents a user type union { // what data the token holds glslang::TString *string; // for identifiers int i; // for literals @@ -65,7 +64,7 @@ struct HlslToken { bool b; double d; }; - glslang::TSymbol* symbol; // if a symbol table lookup was done already, this is the result + glslang::TSymbol* symbol; // if a symbol-table lookup was done already, this is the result }; // @@ -76,7 +75,7 @@ struct HlslToken { class HlslScanContext { public: HlslScanContext(TParseContextBase& parseContext, TPpContext& ppContext) - : parseContext(parseContext), ppContext(ppContext), afterType(false), field(false) { } + : parseContext(parseContext), ppContext(ppContext) { } virtual ~HlslScanContext() { } static void fillInKeywordMap(); @@ -97,8 +96,6 @@ protected: TParseContextBase& parseContext; TPpContext& ppContext; - bool afterType; // true if we've recognized a type, so can only be looking for an identifier - bool field; // true if we're on a field, right after a '.' TSourceLoc loc; TPpToken* ppToken; HlslToken* parserToken; diff --git a/hlsl/hlslTokenStream.cpp b/hlsl/hlslTokenStream.cpp index cfc1101b..47f779a8 100755 --- a/hlsl/hlslTokenStream.cpp +++ b/hlsl/hlslTokenStream.cpp @@ -37,10 +37,45 @@ namespace glslang { +void HlslTokenStream::pushPreToken(const HlslToken& tok) +{ + assert(preTokenStackSize == 0); + preTokenStack = tok; + ++preTokenStackSize; +} + +HlslToken HlslTokenStream::popPreToken() +{ + assert(preTokenStackSize == 1); + --preTokenStackSize; + + return preTokenStack; +} + +void HlslTokenStream::pushTokenBuffer(const HlslToken& tok) +{ + tokenBuffer = tok; +} + +HlslToken HlslTokenStream::popTokenBuffer() +{ + return tokenBuffer; +} + // Load 'token' with the next token in the stream of tokens. void HlslTokenStream::advanceToken() { - scanner.tokenize(token); + pushTokenBuffer(token); + if (preTokenStackSize > 0) + token = popPreToken(); + else + scanner.tokenize(token); +} + +void HlslTokenStream::recedeToken() +{ + pushPreToken(token); + token = popTokenBuffer(); } // Return the current token class. diff --git a/hlsl/hlslTokenStream.h b/hlsl/hlslTokenStream.h index 9139df07..83365c4c 100755 --- a/hlsl/hlslTokenStream.h +++ b/hlsl/hlslTokenStream.h @@ -43,20 +43,38 @@ namespace glslang { class HlslTokenStream { public: explicit HlslTokenStream(HlslScanContext& scanner) - : scanner(scanner) { } + : scanner(scanner), preTokenStackSize(0) { } virtual ~HlslTokenStream() { } public: void advanceToken(); + void recedeToken(); bool acceptTokenClass(EHlslTokenClass); EHlslTokenClass peek() const; bool peekTokenClass(EHlslTokenClass) const; protected: - HlslToken token; // the current token we are processing - + HlslToken token; // the token we are currently looking at, but have not yet accepted + private: - HlslScanContext& scanner; // lexical scanner, to get next token + HlslScanContext& scanner; // lexical scanner, to get next token + + // Previously scanned tokens, returned for future advances, + // so logically in front of the token stream. + // Is logically a stack; needs last in last out semantics. + // Currently implemented as a stack of size 1. + HlslToken preTokenStack; + int preTokenStackSize; + void pushPreToken(const HlslToken&); + HlslToken popPreToken(); + + // Previously scanned tokens, not yet return for future advances, + // but available for that. + // Is logically a fifo for normal advances, and a stack for recession. + // Currently implemented with an intrinsic size of 1. + HlslToken tokenBuffer; + void pushTokenBuffer(const HlslToken&); + HlslToken popTokenBuffer(); }; } // end namespace glslang diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h index bc472fec..b3c1227d 100755 --- a/hlsl/hlslTokens.h +++ b/hlsl/hlslTokens.h @@ -49,6 +49,7 @@ enum EHlslTokenClass { EHTokExtern, EHTokUniform, EHTokVolatile, + EHTokPrecise, EHTokShared, EHTokGroupShared, EHTokLinear, @@ -119,6 +120,38 @@ enum EHlslTokenClass { EHTokInt4x2, EHTokInt4x3, EHTokInt4x4, + EHTokUint1x1, + EHTokUint1x2, + EHTokUint1x3, + EHTokUint1x4, + EHTokUint2x1, + EHTokUint2x2, + EHTokUint2x3, + EHTokUint2x4, + EHTokUint3x1, + EHTokUint3x2, + EHTokUint3x3, + EHTokUint3x4, + EHTokUint4x1, + EHTokUint4x2, + EHTokUint4x3, + EHTokUint4x4, + EHTokBool1x1, + EHTokBool1x2, + EHTokBool1x3, + EHTokBool1x4, + EHTokBool2x1, + EHTokBool2x2, + EHTokBool2x3, + EHTokBool2x4, + EHTokBool3x1, + EHTokBool3x2, + EHTokBool3x3, + EHTokBool3x4, + EHTokBool4x1, + EHTokBool4x2, + EHTokBool4x3, + EHTokBool4x4, EHTokFloat1x1, EHTokFloat1x2, EHTokFloat1x3,