Merge pull request #133 from AWoloszyn/spirv-memory
authorJohn Kessenich <johnkslang@users.noreply.github.com>
Mon, 18 Jan 2016 17:48:07 +0000 (10:48 -0700)
committerJohn Kessenich <johnkslang@users.noreply.github.com>
Mon, 18 Jan 2016 17:48:07 +0000 (10:48 -0700)
Free memory associated with SPIR-V generation and the pragmaTable.

20 files changed:
SPIRV/GlslangToSpv.cpp
SPIRV/SpvBuilder.cpp
SPIRV/SpvBuilder.h
StandAlone/StandAlone.cpp
Test/400.frag
Test/400.geom
Test/baseResults/400.frag.out
Test/baseResults/400.geom.out
Test/baseResults/spv.400.frag.out
Test/baseResults/spv.sparseTexture.frag.out [new file with mode: 0644]
Test/baseResults/spv.sparseTextureClamp.frag.out [new file with mode: 0644]
Test/spv.400.frag
Test/spv.sparseTexture.frag [new file with mode: 0644]
Test/spv.sparseTextureClamp.frag [new file with mode: 0644]
Test/test-spirv-list
glslang/Include/intermediate.h
glslang/MachineIndependent/Initialize.cpp
glslang/MachineIndependent/Versions.cpp
glslang/MachineIndependent/Versions.h
glslang/OSDependent/Windows/ossource.cpp

index 43cc03a..0e14e1d 100755 (executable)
@@ -1884,6 +1884,14 @@ void TGlslangToSpvTraverser::handleFunctionEntry(const glslang::TIntermAggregate
 void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector<spv::Id>& arguments)
 {
     const glslang::TIntermSequence& glslangArguments = node.getSequence();
+
+    glslang::TSampler sampler = {};
+    bool cubeCompare = false;
+    if (node.isTexture()) {
+        sampler = glslangArguments[0]->getAsTyped()->getType().getSampler();
+        cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
+    }
+
     for (int i = 0; i < (int)glslangArguments.size(); ++i) {
         builder.clearAccessChain();
         glslangArguments[i]->traverse(this);
@@ -1902,6 +1910,51 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
             if (i == 0)
                 lvalue = true;
             break;
+        case glslang::EOpSparseTexture:
+            if ((cubeCompare && i == 3) || (! cubeCompare && i == 2))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureClamp:
+            if ((cubeCompare && i == 4) || (! cubeCompare && i == 3))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureLod:
+        case glslang::EOpSparseTextureOffset:
+            if (i == 3)
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureFetch:
+            if ((sampler.dim != glslang::EsdRect && i == 3) || (sampler.dim == glslang::EsdRect && i == 2))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureFetchOffset:
+            if ((sampler.dim != glslang::EsdRect && i == 4) || (sampler.dim == glslang::EsdRect && i == 3))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureLodOffset:
+        case glslang::EOpSparseTextureGrad:
+        case glslang::EOpSparseTextureOffsetClamp:
+            if (i == 4)
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureGradOffset:
+        case glslang::EOpSparseTextureGradClamp:
+            if (i == 5)
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureGradOffsetClamp:
+            if (i == 6)
+                lvalue = true;
+            break;
+         case glslang::EOpSparseTextureGather:
+            if ((sampler.shadow && i == 3) || (! sampler.shadow && i == 2))
+                lvalue = true;
+            break;
+        case glslang::EOpSparseTextureGatherOffset:
+        case glslang::EOpSparseTextureGatherOffsets:
+            if ((sampler.shadow && i == 4) || (! sampler.shadow && i == 3))
+                lvalue = true;
+            break;
         default:
             break;
         }
@@ -1963,6 +2016,8 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
             return builder.createTextureQueryCall(spv::OpImageQueryLod, params);
         case glslang::EOpTextureQueryLevels:
             return builder.createTextureQueryCall(spv::OpImageQueryLevels, params);
+        case glslang::EOpSparseTexelsResident:
+            return builder.createUnaryOp(spv::OpImageSparseTexelsResident, builder.makeBoolType(), arguments[0]);
         default:
             assert(0);
             break;
@@ -1990,7 +2045,11 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
                 operands.push_back(*opIt);
             builder.createNoResultOp(spv::OpImageWrite, operands);
             return spv::NoResult;
-        } else {
+        } else if (node->isSparseImage()) {
+            spv::MissingFunctionality("sparse image functions");
+            return spv::NoResult;
+        }
+        else {
             // Process image atomic operations
 
             // GLSL "IMAGE_PARAMS" will involve in constructing an image texel pointer and this pointer,
@@ -2010,7 +2069,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
     }
 
     // Check for texture functions other than queries
-
+    bool sparse = node->isSparseTexture();
     bool cubeCompare = sampler.dim == glslang::EsdCube && sampler.arrayed && sampler.shadow;
 
     // check for bias argument
@@ -2021,6 +2080,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
             ++nonBiasArgCount;
         if (cracked.grad)
             nonBiasArgCount += 2;
+        if (cracked.lodClamp)
+            ++nonBiasArgCount;
+        if (sparse)
+            ++nonBiasArgCount;
 
         if ((int)arguments.size() > nonBiasArgCount)
             bias = true;
@@ -2032,9 +2095,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
     int extraArgs = 0;
 
     // sort out where Dref is coming from
-    if (sampler.shadow && sampler.dim == glslang::EsdCube && sampler.arrayed)
+    if (cubeCompare) {
         params.Dref = arguments[2];
-    else if (sampler.shadow && cracked.gather) {
+        ++extraArgs;
+    } else if (sampler.shadow && cracked.gather) {
         params.Dref = arguments[2];
         ++extraArgs;
     } else if (sampler.shadow) {
@@ -2066,6 +2130,14 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
         params.offsets = arguments[2 + extraArgs];
         ++extraArgs;
     }
+    if (cracked.lodClamp) {
+        params.lodClamp = arguments[2 + extraArgs];
+        ++extraArgs;
+    }
+    if (sparse) {
+        params.texelOut = arguments[2 + extraArgs];
+        ++extraArgs;
+    }
     if (bias) {
         params.bias = arguments[2 + extraArgs];
         ++extraArgs;
@@ -2080,7 +2152,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
         }
     }
 
-    return builder.createTextureCall(precision, convertGlslangToSpvType(node->getType()), cracked.fetch, cracked.proj, cracked.gather, params);
+    return builder.createTextureCall(precision, convertGlslangToSpvType(node->getType()), sparse, cracked.fetch, cracked.proj, cracked.gather, params);
 }
 
 spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAggregate* node)
index 7b17e17..4d5ce41 100755 (executable)
@@ -1224,7 +1224,7 @@ Id Builder::createBuiltinCall(Decoration /*precision*/, Id resultType, Id builti
 
 // Accept all parameters needed to create a texture instruction.
 // Create the correct instruction based on the inputs, and make the call.
-Id Builder::createTextureCall(Decoration precision, Id resultType, bool fetch, bool proj, bool gather, const TextureParameters& parameters)
+Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather, const TextureParameters& parameters)
 {
     static const int maxTextureArgs = 10;
     Id texArgs[maxTextureArgs] = {};
@@ -1277,6 +1277,10 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool fetch, b
         mask = (ImageOperandsMask)(mask | ImageOperandsSampleMask);
         texArgs[numArgs++] = parameters.sample;
     }
+    if (parameters.lodClamp) {
+        mask = (ImageOperandsMask)(mask | ImageOperandsMinLodMask);
+        texArgs[numArgs++] = parameters.lodClamp;
+    }
     if (mask == ImageOperandsMaskNone)
         --numArgs;  // undo speculative reservation for the mask argument
     else
@@ -1288,35 +1292,68 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool fetch, b
     Op opCode;
     opCode = OpImageSampleImplicitLod;
     if (fetch) {
-        opCode = OpImageFetch;
+        if (sparse)
+            opCode = OpImageSparseFetch;
+        else
+            opCode = OpImageFetch;
     } else if (gather) {
         if (parameters.Dref)
-            opCode = OpImageDrefGather;
+            if (sparse)
+                opCode = OpImageSparseDrefGather;
+            else
+                opCode = OpImageDrefGather;
         else
-            opCode = OpImageGather;
+            if (sparse)
+                opCode = OpImageSparseGather;
+            else
+                opCode = OpImageGather;
     } else if (xplicit) {
         if (parameters.Dref) {
             if (proj)
-                opCode = OpImageSampleProjDrefExplicitLod;
+                if (sparse)
+                    opCode = OpImageSparseSampleProjDrefExplicitLod;
+                else
+                    opCode = OpImageSampleProjDrefExplicitLod;
             else
-                opCode = OpImageSampleDrefExplicitLod;
+                if (sparse)
+                    opCode = OpImageSparseSampleDrefExplicitLod;
+                else
+                    opCode = OpImageSampleDrefExplicitLod;
         } else {
             if (proj)
-                opCode = OpImageSampleProjExplicitLod;
+                if (sparse)
+                    opCode = OpImageSparseSampleProjExplicitLod;
+                else
+                    opCode = OpImageSampleProjExplicitLod;
             else
-                opCode = OpImageSampleExplicitLod;
+                if (sparse)
+                    opCode = OpImageSparseSampleExplicitLod;
+                else
+                    opCode = OpImageSampleExplicitLod;
         }
     } else {
         if (parameters.Dref) {
             if (proj)
-                opCode = OpImageSampleProjDrefImplicitLod;
+                if (sparse)
+                    opCode = OpImageSparseSampleProjDrefImplicitLod;
+                else
+                    opCode = OpImageSampleProjDrefImplicitLod;
             else
-                opCode = OpImageSampleDrefImplicitLod;
+                if (sparse)
+                    opCode = OpImageSparseSampleDrefImplicitLod;
+                else
+                    opCode = OpImageSampleDrefImplicitLod;
         } else {
             if (proj)
-                opCode = OpImageSampleProjImplicitLod;
+                if (sparse)
+                    opCode = OpImageSparseSampleProjImplicitLod;
+                else
+                    opCode = OpImageSampleProjImplicitLod;
             else
-                opCode = OpImageSampleImplicitLod;
+                if (sparse)
+                    opCode = OpImageSparseSampleImplicitLod;
+                else
+                    opCode = OpImageSampleImplicitLod;
         }
     }
 
@@ -1337,6 +1374,15 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool fetch, b
         }
     }
 
+    Id typeId0 = 0;
+    Id typeId1 = 0;
+
+    if (sparse) {
+        typeId0 = resultType;
+        typeId1 = getDerefTypeId(parameters.texelOut);
+        resultType = makeStructResultType(typeId0, typeId1);
+    }
+
     // Build the SPIR-V instruction
     Instruction* textureInst = new Instruction(getUniqueId(), resultType, opCode);
     for (int op = 0; op < optArgNum; ++op)
@@ -1350,10 +1396,16 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool fetch, b
 
     Id resultId = textureInst->getResultId();
 
-    // When a smear is needed, do it, as per what was computed
-    // above when resultType was changed to a scalar type.
-    if (resultType != smearedType)
-        resultId = smearScalar(precision, resultId, smearedType);
+    if (sparse) {
+        // Decode the return type that was a special structure
+        createStore(createCompositeExtract(resultId, typeId1, 1), parameters.texelOut);
+        resultId = createCompositeExtract(resultId, typeId0, 0);
+    } else {
+        // When a smear is needed, do it, as per what was computed
+        // above when resultType was changed to a scalar type.
+        if (resultType != smearedType)
+            resultId = smearScalar(precision, resultId, smearedType);
+    }
 
     return resultId;
 }
index 026e81d..22337ab 100755 (executable)
@@ -313,10 +313,12 @@ public:
         Id gradY;
         Id sample;
         Id comp;
+        Id texelOut;
+        Id lodClamp;
     };
 
     // Select the correct texture operation based on all inputs, and emit the correct instruction
-    Id createTextureCall(Decoration precision, Id resultType, bool fetch, bool proj, bool gather, const TextureParameters&);
+    Id createTextureCall(Decoration precision, Id resultType, bool sparse, bool fetch, bool proj, bool gather, const TextureParameters&);
 
     // Emit the OpTextureQuery* instruction that was passed in.
     // Figure out the right return value and type, and return it.
index 9201084..45527d8 100644 (file)
@@ -658,17 +658,27 @@ void StderrIfNonEmpty(const char* str)
     }
 }
 
+// Simple bundling of what makes a compilation unit for ease in passing around,
+// and separation of handling file IO versus API (programmatic) compilation.
+struct ShaderCompUnit {
+    EShLanguage stage;
+    std::string fileName;
+    char** text;           // memory owned/managed externally
+};
+
 //
-// For linking mode: Will independently parse each item in the worklist, but then put them
-// in the same program and link them together.
+// For linking mode: Will independently parse each compilation unit, but then put them
+// in the same program and link them together, making at most one linked module per
+// pipeline stage.
 //
 // Uses the new C++ interface instead of the old handle-based interface.
 //
-void CompileAndLinkShaders()
+
+void CompileAndLinkShaderUnits(std::vector<ShaderCompUnit> compUnits)
 {
     // keep track of what to free
     std::list<glslang::TShader*> shaders;
-    
+
     EShMessages messages = EShMsgDefault;
     SetMessageOptions(messages);
 
@@ -677,22 +687,13 @@ void CompileAndLinkShaders()
     //
 
     glslang::TProgram& program = *new glslang::TProgram;
-    glslang::TWorkItem* workItem;
-    while (Worklist.remove(workItem)) {
-        EShLanguage stage = FindLanguage(workItem->name);
-        glslang::TShader* shader = new glslang::TShader(stage);
+    for (auto compUnit : compUnits) {
+        glslang::TShader* shader = new glslang::TShader(compUnit.stage);
+        shader->setStrings(compUnit.text, 1);
         shaders.push_back(shader);
-    
-        char** shaderStrings = ReadFileData(workItem->name.c_str());
-        if (! shaderStrings) {
-            usage();
-            delete &program;
 
-            return;
-        }
         const int defaultVersion = Options & EOptionDefaultDesktop? 110: 100;
 
-        shader->setStrings(shaderStrings, 1);
         if (Options & EOptionOutputPreprocessed) {
             std::string str;
             if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false,
@@ -703,7 +704,6 @@ void CompileAndLinkShaders()
             }
             StderrIfNonEmpty(shader->getInfoLog());
             StderrIfNonEmpty(shader->getInfoDebugLog());
-            FreeFileData(shaderStrings);
             continue;
         }
         if (! shader->parse(&Resources, defaultVersion, false, messages))
@@ -711,13 +711,12 @@ void CompileAndLinkShaders()
 
         program.addShader(shader);
 
-        if (! (Options & EOptionSuppressInfolog)) {
-            PutsIfNonEmpty(workItem->name.c_str());
+        if (! (Options & EOptionSuppressInfolog) &&
+            ! (Options & EOptionMemoryLeakMode)) {
+            PutsIfNonEmpty(compUnit.fileName.c_str());
             PutsIfNonEmpty(shader->getInfoLog());
             PutsIfNonEmpty(shader->getInfoDebugLog());
         }
-
-        FreeFileData(shaderStrings);
     }
 
     //
@@ -727,7 +726,8 @@ void CompileAndLinkShaders()
     if (! (Options & EOptionOutputPreprocessed) && ! program.link(messages))
         LinkFailed = true;
 
-    if (! (Options & EOptionSuppressInfolog)) {
+    if (! (Options & EOptionSuppressInfolog) &&
+        ! (Options & EOptionMemoryLeakMode)) {
         PutsIfNonEmpty(program.getInfoLog());
         PutsIfNonEmpty(program.getInfoDebugLog());
     }
@@ -745,10 +745,15 @@ void CompileAndLinkShaders()
                 if (program.getIntermediate((EShLanguage)stage)) {
                     std::vector<unsigned int> spirv;
                     glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), spirv);
-                    glslang::OutputSpv(spirv, GetBinaryName((EShLanguage)stage));
-                    if (Options & EOptionHumanReadableSpv) {
-                        spv::Parameterize();
-                        spv::Disassemble(std::cout, spirv);
+
+                    // Dump the spv to a file or stdout, etc., but only if not doing
+                    // memory/perf testing, as it's not internal to programmatic use.
+                    if (! (Options & EOptionMemoryLeakMode)) {
+                        glslang::OutputSpv(spirv, GetBinaryName((EShLanguage)stage));
+                        if (Options & EOptionHumanReadableSpv) {
+                            spv::Parameterize();
+                            spv::Disassemble(std::cout, spirv);
+                        }
                     }
                 }
             }
@@ -766,6 +771,59 @@ void CompileAndLinkShaders()
     }
 }
 
+//
+// Do file IO part of compile and link, handing off the pure
+// API/programmatic mode to CompileAndLinkShaderUnits(), which can
+// be put in a loop for testing memory footprint and performance.
+//
+// This is just for linking mode: meaning all the shaders will be put into the
+// the same program linked together.
+//
+// This means there are a limited number of work items (not multi-threading mode)
+// and that the point is testing at the linking level. Hence, to enable
+// performance and memory testing, the actual compile/link can be put in
+// a loop, independent of processing the work items and file IO.
+//
+void CompileAndLinkShaderFiles()
+{
+    std::vector<ShaderCompUnit> compUnits;
+
+    // Transfer all the work items from to a simple list of
+    // of compilation units.  (We don't care about the thread
+    // work-item distribution properties in this path, which
+    // is okay due to the limited number of shaders, know since
+    // they are all getting linked together.)
+    glslang::TWorkItem* workItem;
+    while (Worklist.remove(workItem)) {
+        ShaderCompUnit compUnit = {
+            FindLanguage(workItem->name),
+            workItem->name,
+            ReadFileData(workItem->name.c_str())
+        };
+
+        if (! compUnit.text) {
+            usage();
+            return;
+        }
+
+        compUnits.push_back(compUnit);
+    }
+
+    // Actual call to programmatic processing of compile and link,
+    // in a loop for testing memory and performance.  This part contains
+    // all the perf/memory that a programmatic consumer will care about.
+    for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) {
+        for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j)
+           CompileAndLinkShaderUnits(compUnits);
+
+        if (Options & EOptionMemoryLeakMode)
+            glslang::OS_DumpMemoryCounters();
+    }
+
+    for (auto c : compUnits)
+        FreeFileData(c.text);
+}
+
 int C_DECL main(int argc, char* argv[])
 {
     ProcessArguments(argc, argv);
@@ -803,7 +861,7 @@ int C_DECL main(int argc, char* argv[])
     if (Options & EOptionLinkProgram ||
         Options & EOptionOutputPreprocessed) {
         glslang::InitializeProcess();
-        CompileAndLinkShaders();
+        CompileAndLinkShaderFiles();
         glslang::FinalizeProcess();
     } else {
         ShInitialize();
index bb4d2b5..059743e 100644 (file)
@@ -60,7 +60,7 @@ patch out vec4 patchOut;            // ERROR
 void foo24()
 {
     dvec3 df, di;
-    df = modf(outp.xyz, di);
+    df = modf(dvec3(outp.xyz), di);
 }
 
 in float in1;
index e2ca9b9..0b77e12 100644 (file)
@@ -115,3 +115,216 @@ void qlod()
     lod = textureQueryLod(samp1D, pf);      // ERROR, only in fragment\r
     lod = textureQueryLod(samp2Ds, pf2);    // ERROR, only in fragment\r
 }\r
+\r
+void doubles()\r
+{\r
+    double doublev;\r
+    dvec2 dvec2v;\r
+    dvec3 dvec3v;\r
+    dvec4 dvec4v;\r
+\r
+    bool boolv;\r
+    bvec2 bvec2v;\r
+    bvec3 bvec3v;\r
+    bvec4 bvec4v;\r
+\r
+    doublev = sqrt(2.9);\r
+    dvec2v  = sqrt(dvec2(2.7));\r
+    dvec3v  = sqrt(dvec3(2.0));\r
+    dvec4v  = sqrt(dvec4(2.1));\r
+\r
+    doublev += inversesqrt(doublev);\r
+    dvec2v  += inversesqrt(dvec2v);\r
+    dvec3v  += inversesqrt(dvec3v);\r
+    dvec4v  += inversesqrt(dvec4v);\r
+\r
+    doublev += abs(doublev);\r
+    dvec2v  += abs(dvec2v);\r
+    dvec3v  += abs(dvec3v);\r
+    dvec4v  += abs(dvec4v);\r
+\r
+    doublev += sign(doublev);\r
+    dvec2v  += sign(dvec2v);\r
+    dvec3v  += sign(dvec3v);\r
+    dvec4v  += sign(dvec4v);\r
+\r
+    doublev += floor(doublev);\r
+    dvec2v  += floor(dvec2v);\r
+    dvec3v  += floor(dvec3v);\r
+    dvec4v  += floor(dvec4v);\r
+\r
+    doublev += trunc(doublev);\r
+    dvec2v  += trunc(dvec2v);\r
+    dvec3v  += trunc(dvec3v);\r
+    dvec4v  += trunc(dvec4v);\r
+\r
+    doublev += round(doublev);\r
+    dvec2v  += round(dvec2v);\r
+    dvec3v  += round(dvec3v);\r
+    dvec4v  += round(dvec4v);\r
+\r
+    doublev += roundEven(doublev);\r
+    dvec2v  += roundEven(dvec2v);\r
+    dvec3v  += roundEven(dvec3v);\r
+    dvec4v  += roundEven(dvec4v);\r
+\r
+    doublev += ceil(doublev);\r
+    dvec2v  += ceil(dvec2v);\r
+    dvec3v  += ceil(dvec3v);\r
+    dvec4v  += ceil(dvec4v);\r
+\r
+    doublev += fract(doublev);\r
+    dvec2v  += fract(dvec2v);\r
+    dvec3v  += fract(dvec3v);\r
+    dvec4v  += fract(dvec4v);\r
+\r
+    doublev += mod(doublev, doublev);\r
+    dvec2v  += mod(dvec2v, doublev);\r
+    dvec3v  += mod(dvec3v, doublev);\r
+    dvec4v  += mod(dvec4v, doublev);\r
+    dvec2v  += mod(dvec2v, dvec2v);\r
+    dvec3v  += mod(dvec3v, dvec3v);\r
+    dvec4v  += mod(dvec4v, dvec4v);\r
+\r
+    doublev += modf(doublev, doublev);\r
+    dvec2v  += modf(dvec2v,  dvec2v);\r
+    dvec3v  += modf(dvec3v,  dvec3v);\r
+    dvec4v  += modf(dvec4v,  dvec4v);\r
+\r
+    doublev += min(doublev, doublev);\r
+    dvec2v  += min(dvec2v, doublev);\r
+    dvec3v  += min(dvec3v, doublev);\r
+    dvec4v  += min(dvec4v, doublev);\r
+    dvec2v  += min(dvec2v, dvec2v);\r
+    dvec3v  += min(dvec3v, dvec3v);\r
+    dvec4v  += min(dvec4v, dvec4v);\r
+\r
+    doublev += max(doublev, doublev);\r
+    dvec2v  += max(dvec2v, doublev);\r
+    dvec3v  += max(dvec3v, doublev);\r
+    dvec4v  += max(dvec4v, doublev);\r
+    dvec2v  += max(dvec2v, dvec2v);\r
+    dvec3v  += max(dvec3v, dvec3v);\r
+    dvec4v  += max(dvec4v, dvec4v);\r
+\r
+    doublev += clamp(doublev, doublev, doublev);\r
+    dvec2v  += clamp(dvec2v, doublev, doublev);\r
+    dvec3v  += clamp(dvec3v, doublev, doublev);\r
+    dvec4v  += clamp(dvec4v, doublev, doublev);\r
+    dvec2v  += clamp(dvec2v, dvec2v, dvec2v);\r
+    dvec3v  += clamp(dvec3v, dvec3v, dvec3v);\r
+    dvec4v  += clamp(dvec4v, dvec4v, dvec4v);\r
+\r
+    doublev += mix(doublev, doublev, doublev);\r
+    dvec2v  += mix(dvec2v, dvec2v, doublev);\r
+    dvec3v  += mix(dvec3v, dvec3v, doublev);\r
+    dvec4v  += mix(dvec4v, dvec4v, doublev);\r
+    dvec2v  += mix(dvec2v, dvec2v, dvec2v);\r
+    dvec3v  += mix(dvec3v, dvec3v, dvec3v);\r
+    dvec4v  += mix(dvec4v, dvec4v, dvec4v);\r
+    doublev += mix(doublev, doublev, boolv);\r
+    dvec2v  += mix(dvec2v, dvec2v, bvec2v);\r
+    dvec3v  += mix(dvec3v, dvec3v, bvec3v);\r
+    dvec4v  += mix(dvec4v, dvec4v, bvec4v);\r
+\r
+    doublev += step(doublev, doublev);\r
+    dvec2v  += step(dvec2v, dvec2v);\r
+    dvec3v  += step(dvec3v, dvec3v);\r
+    dvec4v  += step(dvec4v, dvec4v);\r
+    dvec2v  += step(doublev, dvec2v);\r
+    dvec3v  += step(doublev, dvec3v);\r
+    dvec4v  += step(doublev, dvec4v);\r
+\r
+    doublev += smoothstep(doublev, doublev, doublev);\r
+    dvec2v  += smoothstep(dvec2v, dvec2v, dvec2v);\r
+    dvec3v  += smoothstep(dvec3v, dvec3v, dvec3v);\r
+    dvec4v  += smoothstep(dvec4v, dvec4v, dvec4v);\r
+    dvec2v  += smoothstep(doublev, doublev, dvec2v);\r
+    dvec3v  += smoothstep(doublev, doublev, dvec3v);\r
+    dvec4v  += smoothstep(doublev, doublev, dvec4v);\r
+\r
+    boolv  = isnan(doublev);\r
+    bvec2v = isnan(dvec2v);\r
+    bvec3v = isnan(dvec3v);\r
+    bvec4v = isnan(dvec4v);\r
+\r
+    boolv  = boolv ? isinf(doublev) : false;\r
+    bvec2v = boolv ? isinf(dvec2v)  : bvec2(false);\r
+    bvec3v = boolv ? isinf(dvec3v)  : bvec3(false);\r
+    bvec4v = boolv ? isinf(dvec4v)  : bvec4(false);\r
+\r
+    doublev += length(doublev);\r
+    doublev += length(dvec2v);\r
+    doublev += length(dvec3v);\r
+    doublev += length(dvec4v);\r
+\r
+    doublev += distance(doublev, doublev);\r
+    doublev += distance(dvec2v, dvec2v);\r
+    doublev += distance(dvec3v, dvec3v);\r
+    doublev += distance(dvec4v, dvec4v);\r
+\r
+    doublev += dot(doublev, doublev);\r
+    doublev += dot(dvec2v, dvec2v);\r
+    doublev += dot(dvec3v, dvec3v);\r
+    doublev += dot(dvec4v, dvec4v);\r
+\r
+    dvec3v += cross(dvec3v, dvec3v);\r
+\r
+    doublev += normalize(doublev);\r
+    dvec2v  += normalize(dvec2v);\r
+    dvec3v  += normalize(dvec3v);\r
+    dvec4v  += normalize(dvec4v);\r
+\r
+    doublev += faceforward(doublev, doublev, doublev);\r
+    dvec2v  += faceforward(dvec2v, dvec2v, dvec2v);\r
+    dvec3v  += faceforward(dvec3v, dvec3v, dvec3v);\r
+    dvec4v  += faceforward(dvec4v, dvec4v, dvec4v);\r
+\r
+    doublev += reflect(doublev, doublev);\r
+    dvec2v  += reflect(dvec2v, dvec2v);\r
+    dvec3v  += reflect(dvec3v, dvec3v);\r
+    dvec4v  += reflect(dvec4v, dvec4v);\r
+\r
+    doublev += refract(doublev, doublev, doublev);\r
+    dvec2v  += refract(dvec2v, dvec2v, doublev);\r
+    dvec3v  += refract(dvec3v, dvec3v, doublev);\r
+    dvec4v  += refract(dvec4v, dvec4v, doublev);\r
+\r
+    dmat2   dmat2v   = outerProduct(dvec2v, dvec2v);\r
+    dmat3   dmat3v   = outerProduct(dvec3v, dvec3v);\r
+    dmat4   dmat4v   = outerProduct(dvec4v, dvec4v);\r
+    dmat2x3 dmat2x3v = outerProduct(dvec3v, dvec2v);\r
+    dmat3x2 dmat3x2v = outerProduct(dvec2v, dvec3v);\r
+    dmat2x4 dmat2x4v = outerProduct(dvec4v, dvec2v);\r
+    dmat4x2 dmat4x2v = outerProduct(dvec2v, dvec4v);\r
+    dmat3x4 dmat3x4v = outerProduct(dvec4v, dvec3v);\r
+    dmat4x3 dmat4x3v = outerProduct(dvec3v, dvec4v);\r
+\r
+    dmat2v *= matrixCompMult(dmat2v, dmat2v);
+    dmat3v *= matrixCompMult(dmat3v, dmat3v);
+    dmat4v *= matrixCompMult(dmat4v, dmat4v);
+    dmat2x3v = matrixCompMult(dmat2x3v, dmat2x3v);\r
+    dmat2x4v = matrixCompMult(dmat2x4v, dmat2x4v);\r
+    dmat3x2v = matrixCompMult(dmat3x2v, dmat3x2v);\r
+    dmat3x4v = matrixCompMult(dmat3x4v, dmat3x4v);\r
+    dmat4x2v = matrixCompMult(dmat4x2v, dmat4x2v);\r
+    dmat4x3v = matrixCompMult(dmat4x3v, dmat4x3v);\r
+\r
+    dmat2v   *= transpose(dmat2v);\r
+    dmat3v   *= transpose(dmat3v);\r
+    dmat4v   *= transpose(dmat4v);\r
+    dmat2x3v  = transpose(dmat3x2v);\r
+    dmat3x2v  = transpose(dmat2x3v);\r
+    dmat2x4v  = transpose(dmat4x2v);\r
+    dmat4x2v  = transpose(dmat2x4v);\r
+    dmat3x4v  = transpose(dmat4x3v);\r
+    dmat4x3v  = transpose(dmat3x4v);\r
+\r
+    doublev += determinant(dmat2v);\r
+    doublev += determinant(dmat3v);\r
+    doublev += determinant(dmat4v);\r
+\r
+    dmat2v *= inverse(dmat2v);\r
+    dmat3v *= inverse(dmat3v);\r
+    dmat4v *= inverse(dmat4v);\r
+}\r
index 0069585..33a8c9a 100644 (file)
@@ -218,26 +218,18 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:63      move second child to first child (temp 3-component vector of double)
 0:63        'df' (temp 3-component vector of double)
-0:63        Convert float to double (temp 3-component vector of double)
-0:63          Comma (global 3-component vector of float)
-0:63            move second child to first child (temp 3-component vector of float)
-0:63              'tempReturn' (global 3-component vector of float)
-0:63              modf (global 3-component vector of float)
-0:63                vector swizzle (temp 3-component vector of float)
-0:63                  'outp' (out 4-component vector of float)
-0:63                  Sequence
-0:63                    Constant:
-0:63                      0 (const int)
-0:63                    Constant:
-0:63                      1 (const int)
-0:63                    Constant:
-0:63                      2 (const int)
-0:63                'tempArg' (temp 3-component vector of float)
-0:63            move second child to first child (temp 3-component vector of double)
-0:63              'di' (temp 3-component vector of double)
-0:63              Convert float to double (temp 3-component vector of double)
-0:63                'tempArg' (temp 3-component vector of float)
-0:63            'tempReturn' (global 3-component vector of float)
+0:63        modf (global 3-component vector of double)
+0:63          Convert float to double (temp 3-component vector of double)
+0:63            vector swizzle (temp 3-component vector of float)
+0:63              'outp' (out 4-component vector of float)
+0:63              Sequence
+0:63                Constant:
+0:63                  0 (const int)
+0:63                Constant:
+0:63                  1 (const int)
+0:63                Constant:
+0:63                  2 (const int)
+0:63          'di' (temp 3-component vector of double)
 0:71  Function Definition: foodc1( (global void)
 0:71    Function Parameters: 
 0:73    Sequence
@@ -707,26 +699,18 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:63      move second child to first child (temp 3-component vector of double)
 0:63        'df' (temp 3-component vector of double)
-0:63        Convert float to double (temp 3-component vector of double)
-0:63          Comma (global 3-component vector of float)
-0:63            move second child to first child (temp 3-component vector of float)
-0:63              'tempReturn' (global 3-component vector of float)
-0:63              modf (global 3-component vector of float)
-0:63                vector swizzle (temp 3-component vector of float)
-0:63                  'outp' (out 4-component vector of float)
-0:63                  Sequence
-0:63                    Constant:
-0:63                      0 (const int)
-0:63                    Constant:
-0:63                      1 (const int)
-0:63                    Constant:
-0:63                      2 (const int)
-0:63                'tempArg' (temp 3-component vector of float)
-0:63            move second child to first child (temp 3-component vector of double)
-0:63              'di' (temp 3-component vector of double)
-0:63              Convert float to double (temp 3-component vector of double)
-0:63                'tempArg' (temp 3-component vector of float)
-0:63            'tempReturn' (global 3-component vector of float)
+0:63        modf (global 3-component vector of double)
+0:63          Convert float to double (temp 3-component vector of double)
+0:63            vector swizzle (temp 3-component vector of float)
+0:63              'outp' (out 4-component vector of float)
+0:63              Sequence
+0:63                Constant:
+0:63                  0 (const int)
+0:63                Constant:
+0:63                  1 (const int)
+0:63                Constant:
+0:63                  2 (const int)
+0:63          'di' (temp 3-component vector of double)
 0:71  Function Definition: foodc1( (global void)
 0:71    Function Parameters: 
 0:73    Sequence
index f120327..16117e6 100644 (file)
@@ -174,6 +174,855 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:115      'lod' (temp 2-component vector of float)
 0:116      'lod' (temp 2-component vector of float)
+0:119  Function Definition: doubles( (global void)
+0:119    Function Parameters: 
+0:?     Sequence
+0:131      move second child to first child (temp double)
+0:131        'doublev' (temp double)
+0:131        Constant:
+0:131          1.702939
+0:132      move second child to first child (temp 2-component vector of double)
+0:132        'dvec2v' (temp 2-component vector of double)
+0:132        Constant:
+0:132          1.643168
+0:132          1.643168
+0:133      move second child to first child (temp 3-component vector of double)
+0:133        'dvec3v' (temp 3-component vector of double)
+0:133        Constant:
+0:133          1.414214
+0:133          1.414214
+0:133          1.414214
+0:134      move second child to first child (temp 4-component vector of double)
+0:134        'dvec4v' (temp 4-component vector of double)
+0:134        Constant:
+0:134          1.449138
+0:134          1.449138
+0:134          1.449138
+0:134          1.449138
+0:136      add second child into first child (temp double)
+0:136        'doublev' (temp double)
+0:136        inverse sqrt (global double)
+0:136          'doublev' (temp double)
+0:137      add second child into first child (temp 2-component vector of double)
+0:137        'dvec2v' (temp 2-component vector of double)
+0:137        inverse sqrt (global 2-component vector of double)
+0:137          'dvec2v' (temp 2-component vector of double)
+0:138      add second child into first child (temp 3-component vector of double)
+0:138        'dvec3v' (temp 3-component vector of double)
+0:138        inverse sqrt (global 3-component vector of double)
+0:138          'dvec3v' (temp 3-component vector of double)
+0:139      add second child into first child (temp 4-component vector of double)
+0:139        'dvec4v' (temp 4-component vector of double)
+0:139        inverse sqrt (global 4-component vector of double)
+0:139          'dvec4v' (temp 4-component vector of double)
+0:141      add second child into first child (temp double)
+0:141        'doublev' (temp double)
+0:141        Absolute value (global double)
+0:141          'doublev' (temp double)
+0:142      add second child into first child (temp 2-component vector of double)
+0:142        'dvec2v' (temp 2-component vector of double)
+0:142        Absolute value (global 2-component vector of double)
+0:142          'dvec2v' (temp 2-component vector of double)
+0:143      add second child into first child (temp 3-component vector of double)
+0:143        'dvec3v' (temp 3-component vector of double)
+0:143        Absolute value (global 3-component vector of double)
+0:143          'dvec3v' (temp 3-component vector of double)
+0:144      add second child into first child (temp 4-component vector of double)
+0:144        'dvec4v' (temp 4-component vector of double)
+0:144        Absolute value (global 4-component vector of double)
+0:144          'dvec4v' (temp 4-component vector of double)
+0:146      add second child into first child (temp double)
+0:146        'doublev' (temp double)
+0:146        Sign (global double)
+0:146          'doublev' (temp double)
+0:147      add second child into first child (temp 2-component vector of double)
+0:147        'dvec2v' (temp 2-component vector of double)
+0:147        Sign (global 2-component vector of double)
+0:147          'dvec2v' (temp 2-component vector of double)
+0:148      add second child into first child (temp 3-component vector of double)
+0:148        'dvec3v' (temp 3-component vector of double)
+0:148        Sign (global 3-component vector of double)
+0:148          'dvec3v' (temp 3-component vector of double)
+0:149      add second child into first child (temp 4-component vector of double)
+0:149        'dvec4v' (temp 4-component vector of double)
+0:149        Sign (global 4-component vector of double)
+0:149          'dvec4v' (temp 4-component vector of double)
+0:151      add second child into first child (temp double)
+0:151        'doublev' (temp double)
+0:151        Floor (global double)
+0:151          'doublev' (temp double)
+0:152      add second child into first child (temp 2-component vector of double)
+0:152        'dvec2v' (temp 2-component vector of double)
+0:152        Floor (global 2-component vector of double)
+0:152          'dvec2v' (temp 2-component vector of double)
+0:153      add second child into first child (temp 3-component vector of double)
+0:153        'dvec3v' (temp 3-component vector of double)
+0:153        Floor (global 3-component vector of double)
+0:153          'dvec3v' (temp 3-component vector of double)
+0:154      add second child into first child (temp 4-component vector of double)
+0:154        'dvec4v' (temp 4-component vector of double)
+0:154        Floor (global 4-component vector of double)
+0:154          'dvec4v' (temp 4-component vector of double)
+0:156      add second child into first child (temp double)
+0:156        'doublev' (temp double)
+0:156        trunc (global double)
+0:156          'doublev' (temp double)
+0:157      add second child into first child (temp 2-component vector of double)
+0:157        'dvec2v' (temp 2-component vector of double)
+0:157        trunc (global 2-component vector of double)
+0:157          'dvec2v' (temp 2-component vector of double)
+0:158      add second child into first child (temp 3-component vector of double)
+0:158        'dvec3v' (temp 3-component vector of double)
+0:158        trunc (global 3-component vector of double)
+0:158          'dvec3v' (temp 3-component vector of double)
+0:159      add second child into first child (temp 4-component vector of double)
+0:159        'dvec4v' (temp 4-component vector of double)
+0:159        trunc (global 4-component vector of double)
+0:159          'dvec4v' (temp 4-component vector of double)
+0:161      add second child into first child (temp double)
+0:161        'doublev' (temp double)
+0:161        round (global double)
+0:161          'doublev' (temp double)
+0:162      add second child into first child (temp 2-component vector of double)
+0:162        'dvec2v' (temp 2-component vector of double)
+0:162        round (global 2-component vector of double)
+0:162          'dvec2v' (temp 2-component vector of double)
+0:163      add second child into first child (temp 3-component vector of double)
+0:163        'dvec3v' (temp 3-component vector of double)
+0:163        round (global 3-component vector of double)
+0:163          'dvec3v' (temp 3-component vector of double)
+0:164      add second child into first child (temp 4-component vector of double)
+0:164        'dvec4v' (temp 4-component vector of double)
+0:164        round (global 4-component vector of double)
+0:164          'dvec4v' (temp 4-component vector of double)
+0:166      add second child into first child (temp double)
+0:166        'doublev' (temp double)
+0:166        roundEven (global double)
+0:166          'doublev' (temp double)
+0:167      add second child into first child (temp 2-component vector of double)
+0:167        'dvec2v' (temp 2-component vector of double)
+0:167        roundEven (global 2-component vector of double)
+0:167          'dvec2v' (temp 2-component vector of double)
+0:168      add second child into first child (temp 3-component vector of double)
+0:168        'dvec3v' (temp 3-component vector of double)
+0:168        roundEven (global 3-component vector of double)
+0:168          'dvec3v' (temp 3-component vector of double)
+0:169      add second child into first child (temp 4-component vector of double)
+0:169        'dvec4v' (temp 4-component vector of double)
+0:169        roundEven (global 4-component vector of double)
+0:169          'dvec4v' (temp 4-component vector of double)
+0:171      add second child into first child (temp double)
+0:171        'doublev' (temp double)
+0:171        Ceiling (global double)
+0:171          'doublev' (temp double)
+0:172      add second child into first child (temp 2-component vector of double)
+0:172        'dvec2v' (temp 2-component vector of double)
+0:172        Ceiling (global 2-component vector of double)
+0:172          'dvec2v' (temp 2-component vector of double)
+0:173      add second child into first child (temp 3-component vector of double)
+0:173        'dvec3v' (temp 3-component vector of double)
+0:173        Ceiling (global 3-component vector of double)
+0:173          'dvec3v' (temp 3-component vector of double)
+0:174      add second child into first child (temp 4-component vector of double)
+0:174        'dvec4v' (temp 4-component vector of double)
+0:174        Ceiling (global 4-component vector of double)
+0:174          'dvec4v' (temp 4-component vector of double)
+0:176      add second child into first child (temp double)
+0:176        'doublev' (temp double)
+0:176        Fraction (global double)
+0:176          'doublev' (temp double)
+0:177      add second child into first child (temp 2-component vector of double)
+0:177        'dvec2v' (temp 2-component vector of double)
+0:177        Fraction (global 2-component vector of double)
+0:177          'dvec2v' (temp 2-component vector of double)
+0:178      add second child into first child (temp 3-component vector of double)
+0:178        'dvec3v' (temp 3-component vector of double)
+0:178        Fraction (global 3-component vector of double)
+0:178          'dvec3v' (temp 3-component vector of double)
+0:179      add second child into first child (temp 4-component vector of double)
+0:179        'dvec4v' (temp 4-component vector of double)
+0:179        Fraction (global 4-component vector of double)
+0:179          'dvec4v' (temp 4-component vector of double)
+0:181      add second child into first child (temp double)
+0:181        'doublev' (temp double)
+0:181        mod (global double)
+0:181          'doublev' (temp double)
+0:181          'doublev' (temp double)
+0:182      add second child into first child (temp 2-component vector of double)
+0:182        'dvec2v' (temp 2-component vector of double)
+0:182        mod (global 2-component vector of double)
+0:182          'dvec2v' (temp 2-component vector of double)
+0:182          'doublev' (temp double)
+0:183      add second child into first child (temp 3-component vector of double)
+0:183        'dvec3v' (temp 3-component vector of double)
+0:183        mod (global 3-component vector of double)
+0:183          'dvec3v' (temp 3-component vector of double)
+0:183          'doublev' (temp double)
+0:184      add second child into first child (temp 4-component vector of double)
+0:184        'dvec4v' (temp 4-component vector of double)
+0:184        mod (global 4-component vector of double)
+0:184          'dvec4v' (temp 4-component vector of double)
+0:184          'doublev' (temp double)
+0:185      add second child into first child (temp 2-component vector of double)
+0:185        'dvec2v' (temp 2-component vector of double)
+0:185        mod (global 2-component vector of double)
+0:185          'dvec2v' (temp 2-component vector of double)
+0:185          'dvec2v' (temp 2-component vector of double)
+0:186      add second child into first child (temp 3-component vector of double)
+0:186        'dvec3v' (temp 3-component vector of double)
+0:186        mod (global 3-component vector of double)
+0:186          'dvec3v' (temp 3-component vector of double)
+0:186          'dvec3v' (temp 3-component vector of double)
+0:187      add second child into first child (temp 4-component vector of double)
+0:187        'dvec4v' (temp 4-component vector of double)
+0:187        mod (global 4-component vector of double)
+0:187          'dvec4v' (temp 4-component vector of double)
+0:187          'dvec4v' (temp 4-component vector of double)
+0:189      add second child into first child (temp double)
+0:189        'doublev' (temp double)
+0:189        modf (global double)
+0:189          'doublev' (temp double)
+0:189          'doublev' (temp double)
+0:190      add second child into first child (temp 2-component vector of double)
+0:190        'dvec2v' (temp 2-component vector of double)
+0:190        modf (global 2-component vector of double)
+0:190          'dvec2v' (temp 2-component vector of double)
+0:190          'dvec2v' (temp 2-component vector of double)
+0:191      add second child into first child (temp 3-component vector of double)
+0:191        'dvec3v' (temp 3-component vector of double)
+0:191        modf (global 3-component vector of double)
+0:191          'dvec3v' (temp 3-component vector of double)
+0:191          'dvec3v' (temp 3-component vector of double)
+0:192      add second child into first child (temp 4-component vector of double)
+0:192        'dvec4v' (temp 4-component vector of double)
+0:192        modf (global 4-component vector of double)
+0:192          'dvec4v' (temp 4-component vector of double)
+0:192          'dvec4v' (temp 4-component vector of double)
+0:194      add second child into first child (temp double)
+0:194        'doublev' (temp double)
+0:194        min (global double)
+0:194          'doublev' (temp double)
+0:194          'doublev' (temp double)
+0:195      add second child into first child (temp 2-component vector of double)
+0:195        'dvec2v' (temp 2-component vector of double)
+0:195        min (global 2-component vector of double)
+0:195          'dvec2v' (temp 2-component vector of double)
+0:195          'doublev' (temp double)
+0:196      add second child into first child (temp 3-component vector of double)
+0:196        'dvec3v' (temp 3-component vector of double)
+0:196        min (global 3-component vector of double)
+0:196          'dvec3v' (temp 3-component vector of double)
+0:196          'doublev' (temp double)
+0:197      add second child into first child (temp 4-component vector of double)
+0:197        'dvec4v' (temp 4-component vector of double)
+0:197        min (global 4-component vector of double)
+0:197          'dvec4v' (temp 4-component vector of double)
+0:197          'doublev' (temp double)
+0:198      add second child into first child (temp 2-component vector of double)
+0:198        'dvec2v' (temp 2-component vector of double)
+0:198        min (global 2-component vector of double)
+0:198          'dvec2v' (temp 2-component vector of double)
+0:198          'dvec2v' (temp 2-component vector of double)
+0:199      add second child into first child (temp 3-component vector of double)
+0:199        'dvec3v' (temp 3-component vector of double)
+0:199        min (global 3-component vector of double)
+0:199          'dvec3v' (temp 3-component vector of double)
+0:199          'dvec3v' (temp 3-component vector of double)
+0:200      add second child into first child (temp 4-component vector of double)
+0:200        'dvec4v' (temp 4-component vector of double)
+0:200        min (global 4-component vector of double)
+0:200          'dvec4v' (temp 4-component vector of double)
+0:200          'dvec4v' (temp 4-component vector of double)
+0:202      add second child into first child (temp double)
+0:202        'doublev' (temp double)
+0:202        max (global double)
+0:202          'doublev' (temp double)
+0:202          'doublev' (temp double)
+0:203      add second child into first child (temp 2-component vector of double)
+0:203        'dvec2v' (temp 2-component vector of double)
+0:203        max (global 2-component vector of double)
+0:203          'dvec2v' (temp 2-component vector of double)
+0:203          'doublev' (temp double)
+0:204      add second child into first child (temp 3-component vector of double)
+0:204        'dvec3v' (temp 3-component vector of double)
+0:204        max (global 3-component vector of double)
+0:204          'dvec3v' (temp 3-component vector of double)
+0:204          'doublev' (temp double)
+0:205      add second child into first child (temp 4-component vector of double)
+0:205        'dvec4v' (temp 4-component vector of double)
+0:205        max (global 4-component vector of double)
+0:205          'dvec4v' (temp 4-component vector of double)
+0:205          'doublev' (temp double)
+0:206      add second child into first child (temp 2-component vector of double)
+0:206        'dvec2v' (temp 2-component vector of double)
+0:206        max (global 2-component vector of double)
+0:206          'dvec2v' (temp 2-component vector of double)
+0:206          'dvec2v' (temp 2-component vector of double)
+0:207      add second child into first child (temp 3-component vector of double)
+0:207        'dvec3v' (temp 3-component vector of double)
+0:207        max (global 3-component vector of double)
+0:207          'dvec3v' (temp 3-component vector of double)
+0:207          'dvec3v' (temp 3-component vector of double)
+0:208      add second child into first child (temp 4-component vector of double)
+0:208        'dvec4v' (temp 4-component vector of double)
+0:208        max (global 4-component vector of double)
+0:208          'dvec4v' (temp 4-component vector of double)
+0:208          'dvec4v' (temp 4-component vector of double)
+0:210      add second child into first child (temp double)
+0:210        'doublev' (temp double)
+0:210        clamp (global double)
+0:210          'doublev' (temp double)
+0:210          'doublev' (temp double)
+0:210          'doublev' (temp double)
+0:211      add second child into first child (temp 2-component vector of double)
+0:211        'dvec2v' (temp 2-component vector of double)
+0:211        clamp (global 2-component vector of double)
+0:211          'dvec2v' (temp 2-component vector of double)
+0:211          'doublev' (temp double)
+0:211          'doublev' (temp double)
+0:212      add second child into first child (temp 3-component vector of double)
+0:212        'dvec3v' (temp 3-component vector of double)
+0:212        clamp (global 3-component vector of double)
+0:212          'dvec3v' (temp 3-component vector of double)
+0:212          'doublev' (temp double)
+0:212          'doublev' (temp double)
+0:213      add second child into first child (temp 4-component vector of double)
+0:213        'dvec4v' (temp 4-component vector of double)
+0:213        clamp (global 4-component vector of double)
+0:213          'dvec4v' (temp 4-component vector of double)
+0:213          'doublev' (temp double)
+0:213          'doublev' (temp double)
+0:214      add second child into first child (temp 2-component vector of double)
+0:214        'dvec2v' (temp 2-component vector of double)
+0:214        clamp (global 2-component vector of double)
+0:214          'dvec2v' (temp 2-component vector of double)
+0:214          'dvec2v' (temp 2-component vector of double)
+0:214          'dvec2v' (temp 2-component vector of double)
+0:215      add second child into first child (temp 3-component vector of double)
+0:215        'dvec3v' (temp 3-component vector of double)
+0:215        clamp (global 3-component vector of double)
+0:215          'dvec3v' (temp 3-component vector of double)
+0:215          'dvec3v' (temp 3-component vector of double)
+0:215          'dvec3v' (temp 3-component vector of double)
+0:216      add second child into first child (temp 4-component vector of double)
+0:216        'dvec4v' (temp 4-component vector of double)
+0:216        clamp (global 4-component vector of double)
+0:216          'dvec4v' (temp 4-component vector of double)
+0:216          'dvec4v' (temp 4-component vector of double)
+0:216          'dvec4v' (temp 4-component vector of double)
+0:218      add second child into first child (temp double)
+0:218        'doublev' (temp double)
+0:218        mix (global double)
+0:218          'doublev' (temp double)
+0:218          'doublev' (temp double)
+0:218          'doublev' (temp double)
+0:219      add second child into first child (temp 2-component vector of double)
+0:219        'dvec2v' (temp 2-component vector of double)
+0:219        mix (global 2-component vector of double)
+0:219          'dvec2v' (temp 2-component vector of double)
+0:219          'dvec2v' (temp 2-component vector of double)
+0:219          'doublev' (temp double)
+0:220      add second child into first child (temp 3-component vector of double)
+0:220        'dvec3v' (temp 3-component vector of double)
+0:220        mix (global 3-component vector of double)
+0:220          'dvec3v' (temp 3-component vector of double)
+0:220          'dvec3v' (temp 3-component vector of double)
+0:220          'doublev' (temp double)
+0:221      add second child into first child (temp 4-component vector of double)
+0:221        'dvec4v' (temp 4-component vector of double)
+0:221        mix (global 4-component vector of double)
+0:221          'dvec4v' (temp 4-component vector of double)
+0:221          'dvec4v' (temp 4-component vector of double)
+0:221          'doublev' (temp double)
+0:222      add second child into first child (temp 2-component vector of double)
+0:222        'dvec2v' (temp 2-component vector of double)
+0:222        mix (global 2-component vector of double)
+0:222          'dvec2v' (temp 2-component vector of double)
+0:222          'dvec2v' (temp 2-component vector of double)
+0:222          'dvec2v' (temp 2-component vector of double)
+0:223      add second child into first child (temp 3-component vector of double)
+0:223        'dvec3v' (temp 3-component vector of double)
+0:223        mix (global 3-component vector of double)
+0:223          'dvec3v' (temp 3-component vector of double)
+0:223          'dvec3v' (temp 3-component vector of double)
+0:223          'dvec3v' (temp 3-component vector of double)
+0:224      add second child into first child (temp 4-component vector of double)
+0:224        'dvec4v' (temp 4-component vector of double)
+0:224        mix (global 4-component vector of double)
+0:224          'dvec4v' (temp 4-component vector of double)
+0:224          'dvec4v' (temp 4-component vector of double)
+0:224          'dvec4v' (temp 4-component vector of double)
+0:225      add second child into first child (temp double)
+0:225        'doublev' (temp double)
+0:225        mix (global double)
+0:225          'doublev' (temp double)
+0:225          'doublev' (temp double)
+0:225          'boolv' (temp bool)
+0:226      add second child into first child (temp 2-component vector of double)
+0:226        'dvec2v' (temp 2-component vector of double)
+0:226        mix (global 2-component vector of double)
+0:226          'dvec2v' (temp 2-component vector of double)
+0:226          'dvec2v' (temp 2-component vector of double)
+0:226          'bvec2v' (temp 2-component vector of bool)
+0:227      add second child into first child (temp 3-component vector of double)
+0:227        'dvec3v' (temp 3-component vector of double)
+0:227        mix (global 3-component vector of double)
+0:227          'dvec3v' (temp 3-component vector of double)
+0:227          'dvec3v' (temp 3-component vector of double)
+0:227          'bvec3v' (temp 3-component vector of bool)
+0:228      add second child into first child (temp 4-component vector of double)
+0:228        'dvec4v' (temp 4-component vector of double)
+0:228        mix (global 4-component vector of double)
+0:228          'dvec4v' (temp 4-component vector of double)
+0:228          'dvec4v' (temp 4-component vector of double)
+0:228          'bvec4v' (temp 4-component vector of bool)
+0:230      add second child into first child (temp double)
+0:230        'doublev' (temp double)
+0:230        step (global double)
+0:230          'doublev' (temp double)
+0:230          'doublev' (temp double)
+0:231      add second child into first child (temp 2-component vector of double)
+0:231        'dvec2v' (temp 2-component vector of double)
+0:231        step (global 2-component vector of double)
+0:231          'dvec2v' (temp 2-component vector of double)
+0:231          'dvec2v' (temp 2-component vector of double)
+0:232      add second child into first child (temp 3-component vector of double)
+0:232        'dvec3v' (temp 3-component vector of double)
+0:232        step (global 3-component vector of double)
+0:232          'dvec3v' (temp 3-component vector of double)
+0:232          'dvec3v' (temp 3-component vector of double)
+0:233      add second child into first child (temp 4-component vector of double)
+0:233        'dvec4v' (temp 4-component vector of double)
+0:233        step (global 4-component vector of double)
+0:233          'dvec4v' (temp 4-component vector of double)
+0:233          'dvec4v' (temp 4-component vector of double)
+0:234      add second child into first child (temp 2-component vector of double)
+0:234        'dvec2v' (temp 2-component vector of double)
+0:234        step (global 2-component vector of double)
+0:234          'doublev' (temp double)
+0:234          'dvec2v' (temp 2-component vector of double)
+0:235      add second child into first child (temp 3-component vector of double)
+0:235        'dvec3v' (temp 3-component vector of double)
+0:235        step (global 3-component vector of double)
+0:235          'doublev' (temp double)
+0:235          'dvec3v' (temp 3-component vector of double)
+0:236      add second child into first child (temp 4-component vector of double)
+0:236        'dvec4v' (temp 4-component vector of double)
+0:236        step (global 4-component vector of double)
+0:236          'doublev' (temp double)
+0:236          'dvec4v' (temp 4-component vector of double)
+0:238      add second child into first child (temp double)
+0:238        'doublev' (temp double)
+0:238        smoothstep (global double)
+0:238          'doublev' (temp double)
+0:238          'doublev' (temp double)
+0:238          'doublev' (temp double)
+0:239      add second child into first child (temp 2-component vector of double)
+0:239        'dvec2v' (temp 2-component vector of double)
+0:239        smoothstep (global 2-component vector of double)
+0:239          'dvec2v' (temp 2-component vector of double)
+0:239          'dvec2v' (temp 2-component vector of double)
+0:239          'dvec2v' (temp 2-component vector of double)
+0:240      add second child into first child (temp 3-component vector of double)
+0:240        'dvec3v' (temp 3-component vector of double)
+0:240        smoothstep (global 3-component vector of double)
+0:240          'dvec3v' (temp 3-component vector of double)
+0:240          'dvec3v' (temp 3-component vector of double)
+0:240          'dvec3v' (temp 3-component vector of double)
+0:241      add second child into first child (temp 4-component vector of double)
+0:241        'dvec4v' (temp 4-component vector of double)
+0:241        smoothstep (global 4-component vector of double)
+0:241          'dvec4v' (temp 4-component vector of double)
+0:241          'dvec4v' (temp 4-component vector of double)
+0:241          'dvec4v' (temp 4-component vector of double)
+0:242      add second child into first child (temp 2-component vector of double)
+0:242        'dvec2v' (temp 2-component vector of double)
+0:242        smoothstep (global 2-component vector of double)
+0:242          'doublev' (temp double)
+0:242          'doublev' (temp double)
+0:242          'dvec2v' (temp 2-component vector of double)
+0:243      add second child into first child (temp 3-component vector of double)
+0:243        'dvec3v' (temp 3-component vector of double)
+0:243        smoothstep (global 3-component vector of double)
+0:243          'doublev' (temp double)
+0:243          'doublev' (temp double)
+0:243          'dvec3v' (temp 3-component vector of double)
+0:244      add second child into first child (temp 4-component vector of double)
+0:244        'dvec4v' (temp 4-component vector of double)
+0:244        smoothstep (global 4-component vector of double)
+0:244          'doublev' (temp double)
+0:244          'doublev' (temp double)
+0:244          'dvec4v' (temp 4-component vector of double)
+0:246      move second child to first child (temp bool)
+0:246        'boolv' (temp bool)
+0:246        isnan (global bool)
+0:246          'doublev' (temp double)
+0:247      move second child to first child (temp 2-component vector of bool)
+0:247        'bvec2v' (temp 2-component vector of bool)
+0:247        isnan (global 2-component vector of bool)
+0:247          'dvec2v' (temp 2-component vector of double)
+0:248      move second child to first child (temp 3-component vector of bool)
+0:248        'bvec3v' (temp 3-component vector of bool)
+0:248        isnan (global 3-component vector of bool)
+0:248          'dvec3v' (temp 3-component vector of double)
+0:249      move second child to first child (temp 4-component vector of bool)
+0:249        'bvec4v' (temp 4-component vector of bool)
+0:249        isnan (global 4-component vector of bool)
+0:249          'dvec4v' (temp 4-component vector of double)
+0:251      move second child to first child (temp bool)
+0:251        'boolv' (temp bool)
+0:251        Test condition and select (temp bool)
+0:251          Condition
+0:251          'boolv' (temp bool)
+0:251          true case
+0:251          isinf (global bool)
+0:251            'doublev' (temp double)
+0:251          false case
+0:251          Constant:
+0:251            false (const bool)
+0:252      move second child to first child (temp 2-component vector of bool)
+0:252        'bvec2v' (temp 2-component vector of bool)
+0:252        Test condition and select (temp 2-component vector of bool)
+0:252          Condition
+0:252          'boolv' (temp bool)
+0:252          true case
+0:252          isinf (global 2-component vector of bool)
+0:252            'dvec2v' (temp 2-component vector of double)
+0:252          false case
+0:252          Constant:
+0:252            false (const bool)
+0:252            false (const bool)
+0:253      move second child to first child (temp 3-component vector of bool)
+0:253        'bvec3v' (temp 3-component vector of bool)
+0:253        Test condition and select (temp 3-component vector of bool)
+0:253          Condition
+0:253          'boolv' (temp bool)
+0:253          true case
+0:253          isinf (global 3-component vector of bool)
+0:253            'dvec3v' (temp 3-component vector of double)
+0:253          false case
+0:253          Constant:
+0:253            false (const bool)
+0:253            false (const bool)
+0:253            false (const bool)
+0:254      move second child to first child (temp 4-component vector of bool)
+0:254        'bvec4v' (temp 4-component vector of bool)
+0:254        Test condition and select (temp 4-component vector of bool)
+0:254          Condition
+0:254          'boolv' (temp bool)
+0:254          true case
+0:254          isinf (global 4-component vector of bool)
+0:254            'dvec4v' (temp 4-component vector of double)
+0:254          false case
+0:254          Constant:
+0:254            false (const bool)
+0:254            false (const bool)
+0:254            false (const bool)
+0:254            false (const bool)
+0:256      add second child into first child (temp double)
+0:256        'doublev' (temp double)
+0:256        length (global double)
+0:256          'doublev' (temp double)
+0:257      add second child into first child (temp double)
+0:257        'doublev' (temp double)
+0:257        length (global double)
+0:257          'dvec2v' (temp 2-component vector of double)
+0:258      add second child into first child (temp double)
+0:258        'doublev' (temp double)
+0:258        length (global double)
+0:258          'dvec3v' (temp 3-component vector of double)
+0:259      add second child into first child (temp double)
+0:259        'doublev' (temp double)
+0:259        length (global double)
+0:259          'dvec4v' (temp 4-component vector of double)
+0:261      add second child into first child (temp double)
+0:261        'doublev' (temp double)
+0:261        distance (global double)
+0:261          'doublev' (temp double)
+0:261          'doublev' (temp double)
+0:262      add second child into first child (temp double)
+0:262        'doublev' (temp double)
+0:262        distance (global double)
+0:262          'dvec2v' (temp 2-component vector of double)
+0:262          'dvec2v' (temp 2-component vector of double)
+0:263      add second child into first child (temp double)
+0:263        'doublev' (temp double)
+0:263        distance (global double)
+0:263          'dvec3v' (temp 3-component vector of double)
+0:263          'dvec3v' (temp 3-component vector of double)
+0:264      add second child into first child (temp double)
+0:264        'doublev' (temp double)
+0:264        distance (global double)
+0:264          'dvec4v' (temp 4-component vector of double)
+0:264          'dvec4v' (temp 4-component vector of double)
+0:266      add second child into first child (temp double)
+0:266        'doublev' (temp double)
+0:266        dot-product (global double)
+0:266          'doublev' (temp double)
+0:266          'doublev' (temp double)
+0:267      add second child into first child (temp double)
+0:267        'doublev' (temp double)
+0:267        dot-product (global double)
+0:267          'dvec2v' (temp 2-component vector of double)
+0:267          'dvec2v' (temp 2-component vector of double)
+0:268      add second child into first child (temp double)
+0:268        'doublev' (temp double)
+0:268        dot-product (global double)
+0:268          'dvec3v' (temp 3-component vector of double)
+0:268          'dvec3v' (temp 3-component vector of double)
+0:269      add second child into first child (temp double)
+0:269        'doublev' (temp double)
+0:269        dot-product (global double)
+0:269          'dvec4v' (temp 4-component vector of double)
+0:269          'dvec4v' (temp 4-component vector of double)
+0:271      add second child into first child (temp 3-component vector of double)
+0:271        'dvec3v' (temp 3-component vector of double)
+0:271        cross-product (global 3-component vector of double)
+0:271          'dvec3v' (temp 3-component vector of double)
+0:271          'dvec3v' (temp 3-component vector of double)
+0:273      add second child into first child (temp double)
+0:273        'doublev' (temp double)
+0:273        normalize (global double)
+0:273          'doublev' (temp double)
+0:274      add second child into first child (temp 2-component vector of double)
+0:274        'dvec2v' (temp 2-component vector of double)
+0:274        normalize (global 2-component vector of double)
+0:274          'dvec2v' (temp 2-component vector of double)
+0:275      add second child into first child (temp 3-component vector of double)
+0:275        'dvec3v' (temp 3-component vector of double)
+0:275        normalize (global 3-component vector of double)
+0:275          'dvec3v' (temp 3-component vector of double)
+0:276      add second child into first child (temp 4-component vector of double)
+0:276        'dvec4v' (temp 4-component vector of double)
+0:276        normalize (global 4-component vector of double)
+0:276          'dvec4v' (temp 4-component vector of double)
+0:278      add second child into first child (temp double)
+0:278        'doublev' (temp double)
+0:278        face-forward (global double)
+0:278          'doublev' (temp double)
+0:278          'doublev' (temp double)
+0:278          'doublev' (temp double)
+0:279      add second child into first child (temp 2-component vector of double)
+0:279        'dvec2v' (temp 2-component vector of double)
+0:279        face-forward (global 2-component vector of double)
+0:279          'dvec2v' (temp 2-component vector of double)
+0:279          'dvec2v' (temp 2-component vector of double)
+0:279          'dvec2v' (temp 2-component vector of double)
+0:280      add second child into first child (temp 3-component vector of double)
+0:280        'dvec3v' (temp 3-component vector of double)
+0:280        face-forward (global 3-component vector of double)
+0:280          'dvec3v' (temp 3-component vector of double)
+0:280          'dvec3v' (temp 3-component vector of double)
+0:280          'dvec3v' (temp 3-component vector of double)
+0:281      add second child into first child (temp 4-component vector of double)
+0:281        'dvec4v' (temp 4-component vector of double)
+0:281        face-forward (global 4-component vector of double)
+0:281          'dvec4v' (temp 4-component vector of double)
+0:281          'dvec4v' (temp 4-component vector of double)
+0:281          'dvec4v' (temp 4-component vector of double)
+0:283      add second child into first child (temp double)
+0:283        'doublev' (temp double)
+0:283        reflect (global double)
+0:283          'doublev' (temp double)
+0:283          'doublev' (temp double)
+0:284      add second child into first child (temp 2-component vector of double)
+0:284        'dvec2v' (temp 2-component vector of double)
+0:284        reflect (global 2-component vector of double)
+0:284          'dvec2v' (temp 2-component vector of double)
+0:284          'dvec2v' (temp 2-component vector of double)
+0:285      add second child into first child (temp 3-component vector of double)
+0:285        'dvec3v' (temp 3-component vector of double)
+0:285        reflect (global 3-component vector of double)
+0:285          'dvec3v' (temp 3-component vector of double)
+0:285          'dvec3v' (temp 3-component vector of double)
+0:286      add second child into first child (temp 4-component vector of double)
+0:286        'dvec4v' (temp 4-component vector of double)
+0:286        reflect (global 4-component vector of double)
+0:286          'dvec4v' (temp 4-component vector of double)
+0:286          'dvec4v' (temp 4-component vector of double)
+0:288      add second child into first child (temp double)
+0:288        'doublev' (temp double)
+0:288        refract (global double)
+0:288          'doublev' (temp double)
+0:288          'doublev' (temp double)
+0:288          'doublev' (temp double)
+0:289      add second child into first child (temp 2-component vector of double)
+0:289        'dvec2v' (temp 2-component vector of double)
+0:289        refract (global 2-component vector of double)
+0:289          'dvec2v' (temp 2-component vector of double)
+0:289          'dvec2v' (temp 2-component vector of double)
+0:289          'doublev' (temp double)
+0:290      add second child into first child (temp 3-component vector of double)
+0:290        'dvec3v' (temp 3-component vector of double)
+0:290        refract (global 3-component vector of double)
+0:290          'dvec3v' (temp 3-component vector of double)
+0:290          'dvec3v' (temp 3-component vector of double)
+0:290          'doublev' (temp double)
+0:291      add second child into first child (temp 4-component vector of double)
+0:291        'dvec4v' (temp 4-component vector of double)
+0:291        refract (global 4-component vector of double)
+0:291          'dvec4v' (temp 4-component vector of double)
+0:291          'dvec4v' (temp 4-component vector of double)
+0:291          'doublev' (temp double)
+0:293      Sequence
+0:293        move second child to first child (temp 2X2 matrix of double)
+0:293          'dmat2v' (temp 2X2 matrix of double)
+0:293          outer product (global 2X2 matrix of double)
+0:293            'dvec2v' (temp 2-component vector of double)
+0:293            'dvec2v' (temp 2-component vector of double)
+0:294      Sequence
+0:294        move second child to first child (temp 3X3 matrix of double)
+0:294          'dmat3v' (temp 3X3 matrix of double)
+0:294          outer product (global 3X3 matrix of double)
+0:294            'dvec3v' (temp 3-component vector of double)
+0:294            'dvec3v' (temp 3-component vector of double)
+0:295      Sequence
+0:295        move second child to first child (temp 4X4 matrix of double)
+0:295          'dmat4v' (temp 4X4 matrix of double)
+0:295          outer product (global 4X4 matrix of double)
+0:295            'dvec4v' (temp 4-component vector of double)
+0:295            'dvec4v' (temp 4-component vector of double)
+0:296      Sequence
+0:296        move second child to first child (temp 2X3 matrix of double)
+0:296          'dmat2x3v' (temp 2X3 matrix of double)
+0:296          outer product (global 2X3 matrix of double)
+0:296            'dvec3v' (temp 3-component vector of double)
+0:296            'dvec2v' (temp 2-component vector of double)
+0:297      Sequence
+0:297        move second child to first child (temp 3X2 matrix of double)
+0:297          'dmat3x2v' (temp 3X2 matrix of double)
+0:297          outer product (global 3X2 matrix of double)
+0:297            'dvec2v' (temp 2-component vector of double)
+0:297            'dvec3v' (temp 3-component vector of double)
+0:298      Sequence
+0:298        move second child to first child (temp 2X4 matrix of double)
+0:298          'dmat2x4v' (temp 2X4 matrix of double)
+0:298          outer product (global 2X4 matrix of double)
+0:298            'dvec4v' (temp 4-component vector of double)
+0:298            'dvec2v' (temp 2-component vector of double)
+0:299      Sequence
+0:299        move second child to first child (temp 4X2 matrix of double)
+0:299          'dmat4x2v' (temp 4X2 matrix of double)
+0:299          outer product (global 4X2 matrix of double)
+0:299            'dvec2v' (temp 2-component vector of double)
+0:299            'dvec4v' (temp 4-component vector of double)
+0:300      Sequence
+0:300        move second child to first child (temp 3X4 matrix of double)
+0:300          'dmat3x4v' (temp 3X4 matrix of double)
+0:300          outer product (global 3X4 matrix of double)
+0:300            'dvec4v' (temp 4-component vector of double)
+0:300            'dvec3v' (temp 3-component vector of double)
+0:301      Sequence
+0:301        move second child to first child (temp 4X3 matrix of double)
+0:301          'dmat4x3v' (temp 4X3 matrix of double)
+0:301          outer product (global 4X3 matrix of double)
+0:301            'dvec3v' (temp 3-component vector of double)
+0:301            'dvec4v' (temp 4-component vector of double)
+0:303      matrix mult second child into first child (temp 2X2 matrix of double)
+0:303        'dmat2v' (temp 2X2 matrix of double)
+0:303        component-wise multiply (global 2X2 matrix of double)
+0:303          'dmat2v' (temp 2X2 matrix of double)
+0:303          'dmat2v' (temp 2X2 matrix of double)
+0:304      matrix mult second child into first child (temp 3X3 matrix of double)
+0:304        'dmat3v' (temp 3X3 matrix of double)
+0:304        component-wise multiply (global 3X3 matrix of double)
+0:304          'dmat3v' (temp 3X3 matrix of double)
+0:304          'dmat3v' (temp 3X3 matrix of double)
+0:305      matrix mult second child into first child (temp 4X4 matrix of double)
+0:305        'dmat4v' (temp 4X4 matrix of double)
+0:305        component-wise multiply (global 4X4 matrix of double)
+0:305          'dmat4v' (temp 4X4 matrix of double)
+0:305          'dmat4v' (temp 4X4 matrix of double)
+0:306      move second child to first child (temp 2X3 matrix of double)
+0:306        'dmat2x3v' (temp 2X3 matrix of double)
+0:306        component-wise multiply (global 2X3 matrix of double)
+0:306          'dmat2x3v' (temp 2X3 matrix of double)
+0:306          'dmat2x3v' (temp 2X3 matrix of double)
+0:307      move second child to first child (temp 2X4 matrix of double)
+0:307        'dmat2x4v' (temp 2X4 matrix of double)
+0:307        component-wise multiply (global 2X4 matrix of double)
+0:307          'dmat2x4v' (temp 2X4 matrix of double)
+0:307          'dmat2x4v' (temp 2X4 matrix of double)
+0:308      move second child to first child (temp 3X2 matrix of double)
+0:308        'dmat3x2v' (temp 3X2 matrix of double)
+0:308        component-wise multiply (global 3X2 matrix of double)
+0:308          'dmat3x2v' (temp 3X2 matrix of double)
+0:308          'dmat3x2v' (temp 3X2 matrix of double)
+0:309      move second child to first child (temp 3X4 matrix of double)
+0:309        'dmat3x4v' (temp 3X4 matrix of double)
+0:309        component-wise multiply (global 3X4 matrix of double)
+0:309          'dmat3x4v' (temp 3X4 matrix of double)
+0:309          'dmat3x4v' (temp 3X4 matrix of double)
+0:310      move second child to first child (temp 4X2 matrix of double)
+0:310        'dmat4x2v' (temp 4X2 matrix of double)
+0:310        component-wise multiply (global 4X2 matrix of double)
+0:310          'dmat4x2v' (temp 4X2 matrix of double)
+0:310          'dmat4x2v' (temp 4X2 matrix of double)
+0:311      move second child to first child (temp 4X3 matrix of double)
+0:311        'dmat4x3v' (temp 4X3 matrix of double)
+0:311        component-wise multiply (global 4X3 matrix of double)
+0:311          'dmat4x3v' (temp 4X3 matrix of double)
+0:311          'dmat4x3v' (temp 4X3 matrix of double)
+0:313      matrix mult second child into first child (temp 2X2 matrix of double)
+0:313        'dmat2v' (temp 2X2 matrix of double)
+0:313        transpose (global 2X2 matrix of double)
+0:313          'dmat2v' (temp 2X2 matrix of double)
+0:314      matrix mult second child into first child (temp 3X3 matrix of double)
+0:314        'dmat3v' (temp 3X3 matrix of double)
+0:314        transpose (global 3X3 matrix of double)
+0:314          'dmat3v' (temp 3X3 matrix of double)
+0:315      matrix mult second child into first child (temp 4X4 matrix of double)
+0:315        'dmat4v' (temp 4X4 matrix of double)
+0:315        transpose (global 4X4 matrix of double)
+0:315          'dmat4v' (temp 4X4 matrix of double)
+0:316      move second child to first child (temp 2X3 matrix of double)
+0:316        'dmat2x3v' (temp 2X3 matrix of double)
+0:316        transpose (global 2X3 matrix of double)
+0:316          'dmat3x2v' (temp 3X2 matrix of double)
+0:317      move second child to first child (temp 3X2 matrix of double)
+0:317        'dmat3x2v' (temp 3X2 matrix of double)
+0:317        transpose (global 3X2 matrix of double)
+0:317          'dmat2x3v' (temp 2X3 matrix of double)
+0:318      move second child to first child (temp 2X4 matrix of double)
+0:318        'dmat2x4v' (temp 2X4 matrix of double)
+0:318        transpose (global 2X4 matrix of double)
+0:318          'dmat4x2v' (temp 4X2 matrix of double)
+0:319      move second child to first child (temp 4X2 matrix of double)
+0:319        'dmat4x2v' (temp 4X2 matrix of double)
+0:319        transpose (global 4X2 matrix of double)
+0:319          'dmat2x4v' (temp 2X4 matrix of double)
+0:320      move second child to first child (temp 3X4 matrix of double)
+0:320        'dmat3x4v' (temp 3X4 matrix of double)
+0:320        transpose (global 3X4 matrix of double)
+0:320          'dmat4x3v' (temp 4X3 matrix of double)
+0:321      move second child to first child (temp 4X3 matrix of double)
+0:321        'dmat4x3v' (temp 4X3 matrix of double)
+0:321        transpose (global 4X3 matrix of double)
+0:321          'dmat3x4v' (temp 3X4 matrix of double)
+0:323      add second child into first child (temp double)
+0:323        'doublev' (temp double)
+0:323        determinant (global double)
+0:323          'dmat2v' (temp 2X2 matrix of double)
+0:324      add second child into first child (temp double)
+0:324        'doublev' (temp double)
+0:324        determinant (global double)
+0:324          'dmat3v' (temp 3X3 matrix of double)
+0:325      add second child into first child (temp double)
+0:325        'doublev' (temp double)
+0:325        determinant (global double)
+0:325          'dmat4v' (temp 4X4 matrix of double)
+0:327      matrix mult second child into first child (temp 2X2 matrix of double)
+0:327        'dmat2v' (temp 2X2 matrix of double)
+0:327        inverse (global 2X2 matrix of double)
+0:327          'dmat2v' (temp 2X2 matrix of double)
+0:328      matrix mult second child into first child (temp 3X3 matrix of double)
+0:328        'dmat3v' (temp 3X3 matrix of double)
+0:328        inverse (global 3X3 matrix of double)
+0:328          'dmat3v' (temp 3X3 matrix of double)
+0:329      matrix mult second child into first child (temp 4X4 matrix of double)
+0:329        'dmat4v' (temp 4X4 matrix of double)
+0:329        inverse (global 4X4 matrix of double)
+0:329          'dmat4v' (temp 4X4 matrix of double)
 0:?   Linker Objects
 0:?     'bn' (in 3-element array of block{in int a})
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
@@ -347,6 +1196,855 @@ ERROR: node is still EOpNull!
 0:?     Sequence
 0:115      'lod' (temp 2-component vector of float)
 0:116      'lod' (temp 2-component vector of float)
+0:119  Function Definition: doubles( (global void)
+0:119    Function Parameters: 
+0:?     Sequence
+0:131      move second child to first child (temp double)
+0:131        'doublev' (temp double)
+0:131        Constant:
+0:131          1.702939
+0:132      move second child to first child (temp 2-component vector of double)
+0:132        'dvec2v' (temp 2-component vector of double)
+0:132        Constant:
+0:132          1.643168
+0:132          1.643168
+0:133      move second child to first child (temp 3-component vector of double)
+0:133        'dvec3v' (temp 3-component vector of double)
+0:133        Constant:
+0:133          1.414214
+0:133          1.414214
+0:133          1.414214
+0:134      move second child to first child (temp 4-component vector of double)
+0:134        'dvec4v' (temp 4-component vector of double)
+0:134        Constant:
+0:134          1.449138
+0:134          1.449138
+0:134          1.449138
+0:134          1.449138
+0:136      add second child into first child (temp double)
+0:136        'doublev' (temp double)
+0:136        inverse sqrt (global double)
+0:136          'doublev' (temp double)
+0:137      add second child into first child (temp 2-component vector of double)
+0:137        'dvec2v' (temp 2-component vector of double)
+0:137        inverse sqrt (global 2-component vector of double)
+0:137          'dvec2v' (temp 2-component vector of double)
+0:138      add second child into first child (temp 3-component vector of double)
+0:138        'dvec3v' (temp 3-component vector of double)
+0:138        inverse sqrt (global 3-component vector of double)
+0:138          'dvec3v' (temp 3-component vector of double)
+0:139      add second child into first child (temp 4-component vector of double)
+0:139        'dvec4v' (temp 4-component vector of double)
+0:139        inverse sqrt (global 4-component vector of double)
+0:139          'dvec4v' (temp 4-component vector of double)
+0:141      add second child into first child (temp double)
+0:141        'doublev' (temp double)
+0:141        Absolute value (global double)
+0:141          'doublev' (temp double)
+0:142      add second child into first child (temp 2-component vector of double)
+0:142        'dvec2v' (temp 2-component vector of double)
+0:142        Absolute value (global 2-component vector of double)
+0:142          'dvec2v' (temp 2-component vector of double)
+0:143      add second child into first child (temp 3-component vector of double)
+0:143        'dvec3v' (temp 3-component vector of double)
+0:143        Absolute value (global 3-component vector of double)
+0:143          'dvec3v' (temp 3-component vector of double)
+0:144      add second child into first child (temp 4-component vector of double)
+0:144        'dvec4v' (temp 4-component vector of double)
+0:144        Absolute value (global 4-component vector of double)
+0:144          'dvec4v' (temp 4-component vector of double)
+0:146      add second child into first child (temp double)
+0:146        'doublev' (temp double)
+0:146        Sign (global double)
+0:146          'doublev' (temp double)
+0:147      add second child into first child (temp 2-component vector of double)
+0:147        'dvec2v' (temp 2-component vector of double)
+0:147        Sign (global 2-component vector of double)
+0:147          'dvec2v' (temp 2-component vector of double)
+0:148      add second child into first child (temp 3-component vector of double)
+0:148        'dvec3v' (temp 3-component vector of double)
+0:148        Sign (global 3-component vector of double)
+0:148          'dvec3v' (temp 3-component vector of double)
+0:149      add second child into first child (temp 4-component vector of double)
+0:149        'dvec4v' (temp 4-component vector of double)
+0:149        Sign (global 4-component vector of double)
+0:149          'dvec4v' (temp 4-component vector of double)
+0:151      add second child into first child (temp double)
+0:151        'doublev' (temp double)
+0:151        Floor (global double)
+0:151          'doublev' (temp double)
+0:152      add second child into first child (temp 2-component vector of double)
+0:152        'dvec2v' (temp 2-component vector of double)
+0:152        Floor (global 2-component vector of double)
+0:152          'dvec2v' (temp 2-component vector of double)
+0:153      add second child into first child (temp 3-component vector of double)
+0:153        'dvec3v' (temp 3-component vector of double)
+0:153        Floor (global 3-component vector of double)
+0:153          'dvec3v' (temp 3-component vector of double)
+0:154      add second child into first child (temp 4-component vector of double)
+0:154        'dvec4v' (temp 4-component vector of double)
+0:154        Floor (global 4-component vector of double)
+0:154          'dvec4v' (temp 4-component vector of double)
+0:156      add second child into first child (temp double)
+0:156        'doublev' (temp double)
+0:156        trunc (global double)
+0:156          'doublev' (temp double)
+0:157      add second child into first child (temp 2-component vector of double)
+0:157        'dvec2v' (temp 2-component vector of double)
+0:157        trunc (global 2-component vector of double)
+0:157          'dvec2v' (temp 2-component vector of double)
+0:158      add second child into first child (temp 3-component vector of double)
+0:158        'dvec3v' (temp 3-component vector of double)
+0:158        trunc (global 3-component vector of double)
+0:158          'dvec3v' (temp 3-component vector of double)
+0:159      add second child into first child (temp 4-component vector of double)
+0:159        'dvec4v' (temp 4-component vector of double)
+0:159        trunc (global 4-component vector of double)
+0:159          'dvec4v' (temp 4-component vector of double)
+0:161      add second child into first child (temp double)
+0:161        'doublev' (temp double)
+0:161        round (global double)
+0:161          'doublev' (temp double)
+0:162      add second child into first child (temp 2-component vector of double)
+0:162        'dvec2v' (temp 2-component vector of double)
+0:162        round (global 2-component vector of double)
+0:162          'dvec2v' (temp 2-component vector of double)
+0:163      add second child into first child (temp 3-component vector of double)
+0:163        'dvec3v' (temp 3-component vector of double)
+0:163        round (global 3-component vector of double)
+0:163          'dvec3v' (temp 3-component vector of double)
+0:164      add second child into first child (temp 4-component vector of double)
+0:164        'dvec4v' (temp 4-component vector of double)
+0:164        round (global 4-component vector of double)
+0:164          'dvec4v' (temp 4-component vector of double)
+0:166      add second child into first child (temp double)
+0:166        'doublev' (temp double)
+0:166        roundEven (global double)
+0:166          'doublev' (temp double)
+0:167      add second child into first child (temp 2-component vector of double)
+0:167        'dvec2v' (temp 2-component vector of double)
+0:167        roundEven (global 2-component vector of double)
+0:167          'dvec2v' (temp 2-component vector of double)
+0:168      add second child into first child (temp 3-component vector of double)
+0:168        'dvec3v' (temp 3-component vector of double)
+0:168        roundEven (global 3-component vector of double)
+0:168          'dvec3v' (temp 3-component vector of double)
+0:169      add second child into first child (temp 4-component vector of double)
+0:169        'dvec4v' (temp 4-component vector of double)
+0:169        roundEven (global 4-component vector of double)
+0:169          'dvec4v' (temp 4-component vector of double)
+0:171      add second child into first child (temp double)
+0:171        'doublev' (temp double)
+0:171        Ceiling (global double)
+0:171          'doublev' (temp double)
+0:172      add second child into first child (temp 2-component vector of double)
+0:172        'dvec2v' (temp 2-component vector of double)
+0:172        Ceiling (global 2-component vector of double)
+0:172          'dvec2v' (temp 2-component vector of double)
+0:173      add second child into first child (temp 3-component vector of double)
+0:173        'dvec3v' (temp 3-component vector of double)
+0:173        Ceiling (global 3-component vector of double)
+0:173          'dvec3v' (temp 3-component vector of double)
+0:174      add second child into first child (temp 4-component vector of double)
+0:174        'dvec4v' (temp 4-component vector of double)
+0:174        Ceiling (global 4-component vector of double)
+0:174          'dvec4v' (temp 4-component vector of double)
+0:176      add second child into first child (temp double)
+0:176        'doublev' (temp double)
+0:176        Fraction (global double)
+0:176          'doublev' (temp double)
+0:177      add second child into first child (temp 2-component vector of double)
+0:177        'dvec2v' (temp 2-component vector of double)
+0:177        Fraction (global 2-component vector of double)
+0:177          'dvec2v' (temp 2-component vector of double)
+0:178      add second child into first child (temp 3-component vector of double)
+0:178        'dvec3v' (temp 3-component vector of double)
+0:178        Fraction (global 3-component vector of double)
+0:178          'dvec3v' (temp 3-component vector of double)
+0:179      add second child into first child (temp 4-component vector of double)
+0:179        'dvec4v' (temp 4-component vector of double)
+0:179        Fraction (global 4-component vector of double)
+0:179          'dvec4v' (temp 4-component vector of double)
+0:181      add second child into first child (temp double)
+0:181        'doublev' (temp double)
+0:181        mod (global double)
+0:181          'doublev' (temp double)
+0:181          'doublev' (temp double)
+0:182      add second child into first child (temp 2-component vector of double)
+0:182        'dvec2v' (temp 2-component vector of double)
+0:182        mod (global 2-component vector of double)
+0:182          'dvec2v' (temp 2-component vector of double)
+0:182          'doublev' (temp double)
+0:183      add second child into first child (temp 3-component vector of double)
+0:183        'dvec3v' (temp 3-component vector of double)
+0:183        mod (global 3-component vector of double)
+0:183          'dvec3v' (temp 3-component vector of double)
+0:183          'doublev' (temp double)
+0:184      add second child into first child (temp 4-component vector of double)
+0:184        'dvec4v' (temp 4-component vector of double)
+0:184        mod (global 4-component vector of double)
+0:184          'dvec4v' (temp 4-component vector of double)
+0:184          'doublev' (temp double)
+0:185      add second child into first child (temp 2-component vector of double)
+0:185        'dvec2v' (temp 2-component vector of double)
+0:185        mod (global 2-component vector of double)
+0:185          'dvec2v' (temp 2-component vector of double)
+0:185          'dvec2v' (temp 2-component vector of double)
+0:186      add second child into first child (temp 3-component vector of double)
+0:186        'dvec3v' (temp 3-component vector of double)
+0:186        mod (global 3-component vector of double)
+0:186          'dvec3v' (temp 3-component vector of double)
+0:186          'dvec3v' (temp 3-component vector of double)
+0:187      add second child into first child (temp 4-component vector of double)
+0:187        'dvec4v' (temp 4-component vector of double)
+0:187        mod (global 4-component vector of double)
+0:187          'dvec4v' (temp 4-component vector of double)
+0:187          'dvec4v' (temp 4-component vector of double)
+0:189      add second child into first child (temp double)
+0:189        'doublev' (temp double)
+0:189        modf (global double)
+0:189          'doublev' (temp double)
+0:189          'doublev' (temp double)
+0:190      add second child into first child (temp 2-component vector of double)
+0:190        'dvec2v' (temp 2-component vector of double)
+0:190        modf (global 2-component vector of double)
+0:190          'dvec2v' (temp 2-component vector of double)
+0:190          'dvec2v' (temp 2-component vector of double)
+0:191      add second child into first child (temp 3-component vector of double)
+0:191        'dvec3v' (temp 3-component vector of double)
+0:191        modf (global 3-component vector of double)
+0:191          'dvec3v' (temp 3-component vector of double)
+0:191          'dvec3v' (temp 3-component vector of double)
+0:192      add second child into first child (temp 4-component vector of double)
+0:192        'dvec4v' (temp 4-component vector of double)
+0:192        modf (global 4-component vector of double)
+0:192          'dvec4v' (temp 4-component vector of double)
+0:192          'dvec4v' (temp 4-component vector of double)
+0:194      add second child into first child (temp double)
+0:194        'doublev' (temp double)
+0:194        min (global double)
+0:194          'doublev' (temp double)
+0:194          'doublev' (temp double)
+0:195      add second child into first child (temp 2-component vector of double)
+0:195        'dvec2v' (temp 2-component vector of double)
+0:195        min (global 2-component vector of double)
+0:195          'dvec2v' (temp 2-component vector of double)
+0:195          'doublev' (temp double)
+0:196      add second child into first child (temp 3-component vector of double)
+0:196        'dvec3v' (temp 3-component vector of double)
+0:196        min (global 3-component vector of double)
+0:196          'dvec3v' (temp 3-component vector of double)
+0:196          'doublev' (temp double)
+0:197      add second child into first child (temp 4-component vector of double)
+0:197        'dvec4v' (temp 4-component vector of double)
+0:197        min (global 4-component vector of double)
+0:197          'dvec4v' (temp 4-component vector of double)
+0:197          'doublev' (temp double)
+0:198      add second child into first child (temp 2-component vector of double)
+0:198        'dvec2v' (temp 2-component vector of double)
+0:198        min (global 2-component vector of double)
+0:198          'dvec2v' (temp 2-component vector of double)
+0:198          'dvec2v' (temp 2-component vector of double)
+0:199      add second child into first child (temp 3-component vector of double)
+0:199        'dvec3v' (temp 3-component vector of double)
+0:199        min (global 3-component vector of double)
+0:199          'dvec3v' (temp 3-component vector of double)
+0:199          'dvec3v' (temp 3-component vector of double)
+0:200      add second child into first child (temp 4-component vector of double)
+0:200        'dvec4v' (temp 4-component vector of double)
+0:200        min (global 4-component vector of double)
+0:200          'dvec4v' (temp 4-component vector of double)
+0:200          'dvec4v' (temp 4-component vector of double)
+0:202      add second child into first child (temp double)
+0:202        'doublev' (temp double)
+0:202        max (global double)
+0:202          'doublev' (temp double)
+0:202          'doublev' (temp double)
+0:203      add second child into first child (temp 2-component vector of double)
+0:203        'dvec2v' (temp 2-component vector of double)
+0:203        max (global 2-component vector of double)
+0:203          'dvec2v' (temp 2-component vector of double)
+0:203          'doublev' (temp double)
+0:204      add second child into first child (temp 3-component vector of double)
+0:204        'dvec3v' (temp 3-component vector of double)
+0:204        max (global 3-component vector of double)
+0:204          'dvec3v' (temp 3-component vector of double)
+0:204          'doublev' (temp double)
+0:205      add second child into first child (temp 4-component vector of double)
+0:205        'dvec4v' (temp 4-component vector of double)
+0:205        max (global 4-component vector of double)
+0:205          'dvec4v' (temp 4-component vector of double)
+0:205          'doublev' (temp double)
+0:206      add second child into first child (temp 2-component vector of double)
+0:206        'dvec2v' (temp 2-component vector of double)
+0:206        max (global 2-component vector of double)
+0:206          'dvec2v' (temp 2-component vector of double)
+0:206          'dvec2v' (temp 2-component vector of double)
+0:207      add second child into first child (temp 3-component vector of double)
+0:207        'dvec3v' (temp 3-component vector of double)
+0:207        max (global 3-component vector of double)
+0:207          'dvec3v' (temp 3-component vector of double)
+0:207          'dvec3v' (temp 3-component vector of double)
+0:208      add second child into first child (temp 4-component vector of double)
+0:208        'dvec4v' (temp 4-component vector of double)
+0:208        max (global 4-component vector of double)
+0:208          'dvec4v' (temp 4-component vector of double)
+0:208          'dvec4v' (temp 4-component vector of double)
+0:210      add second child into first child (temp double)
+0:210        'doublev' (temp double)
+0:210        clamp (global double)
+0:210          'doublev' (temp double)
+0:210          'doublev' (temp double)
+0:210          'doublev' (temp double)
+0:211      add second child into first child (temp 2-component vector of double)
+0:211        'dvec2v' (temp 2-component vector of double)
+0:211        clamp (global 2-component vector of double)
+0:211          'dvec2v' (temp 2-component vector of double)
+0:211          'doublev' (temp double)
+0:211          'doublev' (temp double)
+0:212      add second child into first child (temp 3-component vector of double)
+0:212        'dvec3v' (temp 3-component vector of double)
+0:212        clamp (global 3-component vector of double)
+0:212          'dvec3v' (temp 3-component vector of double)
+0:212          'doublev' (temp double)
+0:212          'doublev' (temp double)
+0:213      add second child into first child (temp 4-component vector of double)
+0:213        'dvec4v' (temp 4-component vector of double)
+0:213        clamp (global 4-component vector of double)
+0:213          'dvec4v' (temp 4-component vector of double)
+0:213          'doublev' (temp double)
+0:213          'doublev' (temp double)
+0:214      add second child into first child (temp 2-component vector of double)
+0:214        'dvec2v' (temp 2-component vector of double)
+0:214        clamp (global 2-component vector of double)
+0:214          'dvec2v' (temp 2-component vector of double)
+0:214          'dvec2v' (temp 2-component vector of double)
+0:214          'dvec2v' (temp 2-component vector of double)
+0:215      add second child into first child (temp 3-component vector of double)
+0:215        'dvec3v' (temp 3-component vector of double)
+0:215        clamp (global 3-component vector of double)
+0:215          'dvec3v' (temp 3-component vector of double)
+0:215          'dvec3v' (temp 3-component vector of double)
+0:215          'dvec3v' (temp 3-component vector of double)
+0:216      add second child into first child (temp 4-component vector of double)
+0:216        'dvec4v' (temp 4-component vector of double)
+0:216        clamp (global 4-component vector of double)
+0:216          'dvec4v' (temp 4-component vector of double)
+0:216          'dvec4v' (temp 4-component vector of double)
+0:216          'dvec4v' (temp 4-component vector of double)
+0:218      add second child into first child (temp double)
+0:218        'doublev' (temp double)
+0:218        mix (global double)
+0:218          'doublev' (temp double)
+0:218          'doublev' (temp double)
+0:218          'doublev' (temp double)
+0:219      add second child into first child (temp 2-component vector of double)
+0:219        'dvec2v' (temp 2-component vector of double)
+0:219        mix (global 2-component vector of double)
+0:219          'dvec2v' (temp 2-component vector of double)
+0:219          'dvec2v' (temp 2-component vector of double)
+0:219          'doublev' (temp double)
+0:220      add second child into first child (temp 3-component vector of double)
+0:220        'dvec3v' (temp 3-component vector of double)
+0:220        mix (global 3-component vector of double)
+0:220          'dvec3v' (temp 3-component vector of double)
+0:220          'dvec3v' (temp 3-component vector of double)
+0:220          'doublev' (temp double)
+0:221      add second child into first child (temp 4-component vector of double)
+0:221        'dvec4v' (temp 4-component vector of double)
+0:221        mix (global 4-component vector of double)
+0:221          'dvec4v' (temp 4-component vector of double)
+0:221          'dvec4v' (temp 4-component vector of double)
+0:221          'doublev' (temp double)
+0:222      add second child into first child (temp 2-component vector of double)
+0:222        'dvec2v' (temp 2-component vector of double)
+0:222        mix (global 2-component vector of double)
+0:222          'dvec2v' (temp 2-component vector of double)
+0:222          'dvec2v' (temp 2-component vector of double)
+0:222          'dvec2v' (temp 2-component vector of double)
+0:223      add second child into first child (temp 3-component vector of double)
+0:223        'dvec3v' (temp 3-component vector of double)
+0:223        mix (global 3-component vector of double)
+0:223          'dvec3v' (temp 3-component vector of double)
+0:223          'dvec3v' (temp 3-component vector of double)
+0:223          'dvec3v' (temp 3-component vector of double)
+0:224      add second child into first child (temp 4-component vector of double)
+0:224        'dvec4v' (temp 4-component vector of double)
+0:224        mix (global 4-component vector of double)
+0:224          'dvec4v' (temp 4-component vector of double)
+0:224          'dvec4v' (temp 4-component vector of double)
+0:224          'dvec4v' (temp 4-component vector of double)
+0:225      add second child into first child (temp double)
+0:225        'doublev' (temp double)
+0:225        mix (global double)
+0:225          'doublev' (temp double)
+0:225          'doublev' (temp double)
+0:225          'boolv' (temp bool)
+0:226      add second child into first child (temp 2-component vector of double)
+0:226        'dvec2v' (temp 2-component vector of double)
+0:226        mix (global 2-component vector of double)
+0:226          'dvec2v' (temp 2-component vector of double)
+0:226          'dvec2v' (temp 2-component vector of double)
+0:226          'bvec2v' (temp 2-component vector of bool)
+0:227      add second child into first child (temp 3-component vector of double)
+0:227        'dvec3v' (temp 3-component vector of double)
+0:227        mix (global 3-component vector of double)
+0:227          'dvec3v' (temp 3-component vector of double)
+0:227          'dvec3v' (temp 3-component vector of double)
+0:227          'bvec3v' (temp 3-component vector of bool)
+0:228      add second child into first child (temp 4-component vector of double)
+0:228        'dvec4v' (temp 4-component vector of double)
+0:228        mix (global 4-component vector of double)
+0:228          'dvec4v' (temp 4-component vector of double)
+0:228          'dvec4v' (temp 4-component vector of double)
+0:228          'bvec4v' (temp 4-component vector of bool)
+0:230      add second child into first child (temp double)
+0:230        'doublev' (temp double)
+0:230        step (global double)
+0:230          'doublev' (temp double)
+0:230          'doublev' (temp double)
+0:231      add second child into first child (temp 2-component vector of double)
+0:231        'dvec2v' (temp 2-component vector of double)
+0:231        step (global 2-component vector of double)
+0:231          'dvec2v' (temp 2-component vector of double)
+0:231          'dvec2v' (temp 2-component vector of double)
+0:232      add second child into first child (temp 3-component vector of double)
+0:232        'dvec3v' (temp 3-component vector of double)
+0:232        step (global 3-component vector of double)
+0:232          'dvec3v' (temp 3-component vector of double)
+0:232          'dvec3v' (temp 3-component vector of double)
+0:233      add second child into first child (temp 4-component vector of double)
+0:233        'dvec4v' (temp 4-component vector of double)
+0:233        step (global 4-component vector of double)
+0:233          'dvec4v' (temp 4-component vector of double)
+0:233          'dvec4v' (temp 4-component vector of double)
+0:234      add second child into first child (temp 2-component vector of double)
+0:234        'dvec2v' (temp 2-component vector of double)
+0:234        step (global 2-component vector of double)
+0:234          'doublev' (temp double)
+0:234          'dvec2v' (temp 2-component vector of double)
+0:235      add second child into first child (temp 3-component vector of double)
+0:235        'dvec3v' (temp 3-component vector of double)
+0:235        step (global 3-component vector of double)
+0:235          'doublev' (temp double)
+0:235          'dvec3v' (temp 3-component vector of double)
+0:236      add second child into first child (temp 4-component vector of double)
+0:236        'dvec4v' (temp 4-component vector of double)
+0:236        step (global 4-component vector of double)
+0:236          'doublev' (temp double)
+0:236          'dvec4v' (temp 4-component vector of double)
+0:238      add second child into first child (temp double)
+0:238        'doublev' (temp double)
+0:238        smoothstep (global double)
+0:238          'doublev' (temp double)
+0:238          'doublev' (temp double)
+0:238          'doublev' (temp double)
+0:239      add second child into first child (temp 2-component vector of double)
+0:239        'dvec2v' (temp 2-component vector of double)
+0:239        smoothstep (global 2-component vector of double)
+0:239          'dvec2v' (temp 2-component vector of double)
+0:239          'dvec2v' (temp 2-component vector of double)
+0:239          'dvec2v' (temp 2-component vector of double)
+0:240      add second child into first child (temp 3-component vector of double)
+0:240        'dvec3v' (temp 3-component vector of double)
+0:240        smoothstep (global 3-component vector of double)
+0:240          'dvec3v' (temp 3-component vector of double)
+0:240          'dvec3v' (temp 3-component vector of double)
+0:240          'dvec3v' (temp 3-component vector of double)
+0:241      add second child into first child (temp 4-component vector of double)
+0:241        'dvec4v' (temp 4-component vector of double)
+0:241        smoothstep (global 4-component vector of double)
+0:241          'dvec4v' (temp 4-component vector of double)
+0:241          'dvec4v' (temp 4-component vector of double)
+0:241          'dvec4v' (temp 4-component vector of double)
+0:242      add second child into first child (temp 2-component vector of double)
+0:242        'dvec2v' (temp 2-component vector of double)
+0:242        smoothstep (global 2-component vector of double)
+0:242          'doublev' (temp double)
+0:242          'doublev' (temp double)
+0:242          'dvec2v' (temp 2-component vector of double)
+0:243      add second child into first child (temp 3-component vector of double)
+0:243        'dvec3v' (temp 3-component vector of double)
+0:243        smoothstep (global 3-component vector of double)
+0:243          'doublev' (temp double)
+0:243          'doublev' (temp double)
+0:243          'dvec3v' (temp 3-component vector of double)
+0:244      add second child into first child (temp 4-component vector of double)
+0:244        'dvec4v' (temp 4-component vector of double)
+0:244        smoothstep (global 4-component vector of double)
+0:244          'doublev' (temp double)
+0:244          'doublev' (temp double)
+0:244          'dvec4v' (temp 4-component vector of double)
+0:246      move second child to first child (temp bool)
+0:246        'boolv' (temp bool)
+0:246        isnan (global bool)
+0:246          'doublev' (temp double)
+0:247      move second child to first child (temp 2-component vector of bool)
+0:247        'bvec2v' (temp 2-component vector of bool)
+0:247        isnan (global 2-component vector of bool)
+0:247          'dvec2v' (temp 2-component vector of double)
+0:248      move second child to first child (temp 3-component vector of bool)
+0:248        'bvec3v' (temp 3-component vector of bool)
+0:248        isnan (global 3-component vector of bool)
+0:248          'dvec3v' (temp 3-component vector of double)
+0:249      move second child to first child (temp 4-component vector of bool)
+0:249        'bvec4v' (temp 4-component vector of bool)
+0:249        isnan (global 4-component vector of bool)
+0:249          'dvec4v' (temp 4-component vector of double)
+0:251      move second child to first child (temp bool)
+0:251        'boolv' (temp bool)
+0:251        Test condition and select (temp bool)
+0:251          Condition
+0:251          'boolv' (temp bool)
+0:251          true case
+0:251          isinf (global bool)
+0:251            'doublev' (temp double)
+0:251          false case
+0:251          Constant:
+0:251            false (const bool)
+0:252      move second child to first child (temp 2-component vector of bool)
+0:252        'bvec2v' (temp 2-component vector of bool)
+0:252        Test condition and select (temp 2-component vector of bool)
+0:252          Condition
+0:252          'boolv' (temp bool)
+0:252          true case
+0:252          isinf (global 2-component vector of bool)
+0:252            'dvec2v' (temp 2-component vector of double)
+0:252          false case
+0:252          Constant:
+0:252            false (const bool)
+0:252            false (const bool)
+0:253      move second child to first child (temp 3-component vector of bool)
+0:253        'bvec3v' (temp 3-component vector of bool)
+0:253        Test condition and select (temp 3-component vector of bool)
+0:253          Condition
+0:253          'boolv' (temp bool)
+0:253          true case
+0:253          isinf (global 3-component vector of bool)
+0:253            'dvec3v' (temp 3-component vector of double)
+0:253          false case
+0:253          Constant:
+0:253            false (const bool)
+0:253            false (const bool)
+0:253            false (const bool)
+0:254      move second child to first child (temp 4-component vector of bool)
+0:254        'bvec4v' (temp 4-component vector of bool)
+0:254        Test condition and select (temp 4-component vector of bool)
+0:254          Condition
+0:254          'boolv' (temp bool)
+0:254          true case
+0:254          isinf (global 4-component vector of bool)
+0:254            'dvec4v' (temp 4-component vector of double)
+0:254          false case
+0:254          Constant:
+0:254            false (const bool)
+0:254            false (const bool)
+0:254            false (const bool)
+0:254            false (const bool)
+0:256      add second child into first child (temp double)
+0:256        'doublev' (temp double)
+0:256        length (global double)
+0:256          'doublev' (temp double)
+0:257      add second child into first child (temp double)
+0:257        'doublev' (temp double)
+0:257        length (global double)
+0:257          'dvec2v' (temp 2-component vector of double)
+0:258      add second child into first child (temp double)
+0:258        'doublev' (temp double)
+0:258        length (global double)
+0:258          'dvec3v' (temp 3-component vector of double)
+0:259      add second child into first child (temp double)
+0:259        'doublev' (temp double)
+0:259        length (global double)
+0:259          'dvec4v' (temp 4-component vector of double)
+0:261      add second child into first child (temp double)
+0:261        'doublev' (temp double)
+0:261        distance (global double)
+0:261          'doublev' (temp double)
+0:261          'doublev' (temp double)
+0:262      add second child into first child (temp double)
+0:262        'doublev' (temp double)
+0:262        distance (global double)
+0:262          'dvec2v' (temp 2-component vector of double)
+0:262          'dvec2v' (temp 2-component vector of double)
+0:263      add second child into first child (temp double)
+0:263        'doublev' (temp double)
+0:263        distance (global double)
+0:263          'dvec3v' (temp 3-component vector of double)
+0:263          'dvec3v' (temp 3-component vector of double)
+0:264      add second child into first child (temp double)
+0:264        'doublev' (temp double)
+0:264        distance (global double)
+0:264          'dvec4v' (temp 4-component vector of double)
+0:264          'dvec4v' (temp 4-component vector of double)
+0:266      add second child into first child (temp double)
+0:266        'doublev' (temp double)
+0:266        dot-product (global double)
+0:266          'doublev' (temp double)
+0:266          'doublev' (temp double)
+0:267      add second child into first child (temp double)
+0:267        'doublev' (temp double)
+0:267        dot-product (global double)
+0:267          'dvec2v' (temp 2-component vector of double)
+0:267          'dvec2v' (temp 2-component vector of double)
+0:268      add second child into first child (temp double)
+0:268        'doublev' (temp double)
+0:268        dot-product (global double)
+0:268          'dvec3v' (temp 3-component vector of double)
+0:268          'dvec3v' (temp 3-component vector of double)
+0:269      add second child into first child (temp double)
+0:269        'doublev' (temp double)
+0:269        dot-product (global double)
+0:269          'dvec4v' (temp 4-component vector of double)
+0:269          'dvec4v' (temp 4-component vector of double)
+0:271      add second child into first child (temp 3-component vector of double)
+0:271        'dvec3v' (temp 3-component vector of double)
+0:271        cross-product (global 3-component vector of double)
+0:271          'dvec3v' (temp 3-component vector of double)
+0:271          'dvec3v' (temp 3-component vector of double)
+0:273      add second child into first child (temp double)
+0:273        'doublev' (temp double)
+0:273        normalize (global double)
+0:273          'doublev' (temp double)
+0:274      add second child into first child (temp 2-component vector of double)
+0:274        'dvec2v' (temp 2-component vector of double)
+0:274        normalize (global 2-component vector of double)
+0:274          'dvec2v' (temp 2-component vector of double)
+0:275      add second child into first child (temp 3-component vector of double)
+0:275        'dvec3v' (temp 3-component vector of double)
+0:275        normalize (global 3-component vector of double)
+0:275          'dvec3v' (temp 3-component vector of double)
+0:276      add second child into first child (temp 4-component vector of double)
+0:276        'dvec4v' (temp 4-component vector of double)
+0:276        normalize (global 4-component vector of double)
+0:276          'dvec4v' (temp 4-component vector of double)
+0:278      add second child into first child (temp double)
+0:278        'doublev' (temp double)
+0:278        face-forward (global double)
+0:278          'doublev' (temp double)
+0:278          'doublev' (temp double)
+0:278          'doublev' (temp double)
+0:279      add second child into first child (temp 2-component vector of double)
+0:279        'dvec2v' (temp 2-component vector of double)
+0:279        face-forward (global 2-component vector of double)
+0:279          'dvec2v' (temp 2-component vector of double)
+0:279          'dvec2v' (temp 2-component vector of double)
+0:279          'dvec2v' (temp 2-component vector of double)
+0:280      add second child into first child (temp 3-component vector of double)
+0:280        'dvec3v' (temp 3-component vector of double)
+0:280        face-forward (global 3-component vector of double)
+0:280          'dvec3v' (temp 3-component vector of double)
+0:280          'dvec3v' (temp 3-component vector of double)
+0:280          'dvec3v' (temp 3-component vector of double)
+0:281      add second child into first child (temp 4-component vector of double)
+0:281        'dvec4v' (temp 4-component vector of double)
+0:281        face-forward (global 4-component vector of double)
+0:281          'dvec4v' (temp 4-component vector of double)
+0:281          'dvec4v' (temp 4-component vector of double)
+0:281          'dvec4v' (temp 4-component vector of double)
+0:283      add second child into first child (temp double)
+0:283        'doublev' (temp double)
+0:283        reflect (global double)
+0:283          'doublev' (temp double)
+0:283          'doublev' (temp double)
+0:284      add second child into first child (temp 2-component vector of double)
+0:284        'dvec2v' (temp 2-component vector of double)
+0:284        reflect (global 2-component vector of double)
+0:284          'dvec2v' (temp 2-component vector of double)
+0:284          'dvec2v' (temp 2-component vector of double)
+0:285      add second child into first child (temp 3-component vector of double)
+0:285        'dvec3v' (temp 3-component vector of double)
+0:285        reflect (global 3-component vector of double)
+0:285          'dvec3v' (temp 3-component vector of double)
+0:285          'dvec3v' (temp 3-component vector of double)
+0:286      add second child into first child (temp 4-component vector of double)
+0:286        'dvec4v' (temp 4-component vector of double)
+0:286        reflect (global 4-component vector of double)
+0:286          'dvec4v' (temp 4-component vector of double)
+0:286          'dvec4v' (temp 4-component vector of double)
+0:288      add second child into first child (temp double)
+0:288        'doublev' (temp double)
+0:288        refract (global double)
+0:288          'doublev' (temp double)
+0:288          'doublev' (temp double)
+0:288          'doublev' (temp double)
+0:289      add second child into first child (temp 2-component vector of double)
+0:289        'dvec2v' (temp 2-component vector of double)
+0:289        refract (global 2-component vector of double)
+0:289          'dvec2v' (temp 2-component vector of double)
+0:289          'dvec2v' (temp 2-component vector of double)
+0:289          'doublev' (temp double)
+0:290      add second child into first child (temp 3-component vector of double)
+0:290        'dvec3v' (temp 3-component vector of double)
+0:290        refract (global 3-component vector of double)
+0:290          'dvec3v' (temp 3-component vector of double)
+0:290          'dvec3v' (temp 3-component vector of double)
+0:290          'doublev' (temp double)
+0:291      add second child into first child (temp 4-component vector of double)
+0:291        'dvec4v' (temp 4-component vector of double)
+0:291        refract (global 4-component vector of double)
+0:291          'dvec4v' (temp 4-component vector of double)
+0:291          'dvec4v' (temp 4-component vector of double)
+0:291          'doublev' (temp double)
+0:293      Sequence
+0:293        move second child to first child (temp 2X2 matrix of double)
+0:293          'dmat2v' (temp 2X2 matrix of double)
+0:293          outer product (global 2X2 matrix of double)
+0:293            'dvec2v' (temp 2-component vector of double)
+0:293            'dvec2v' (temp 2-component vector of double)
+0:294      Sequence
+0:294        move second child to first child (temp 3X3 matrix of double)
+0:294          'dmat3v' (temp 3X3 matrix of double)
+0:294          outer product (global 3X3 matrix of double)
+0:294            'dvec3v' (temp 3-component vector of double)
+0:294            'dvec3v' (temp 3-component vector of double)
+0:295      Sequence
+0:295        move second child to first child (temp 4X4 matrix of double)
+0:295          'dmat4v' (temp 4X4 matrix of double)
+0:295          outer product (global 4X4 matrix of double)
+0:295            'dvec4v' (temp 4-component vector of double)
+0:295            'dvec4v' (temp 4-component vector of double)
+0:296      Sequence
+0:296        move second child to first child (temp 2X3 matrix of double)
+0:296          'dmat2x3v' (temp 2X3 matrix of double)
+0:296          outer product (global 2X3 matrix of double)
+0:296            'dvec3v' (temp 3-component vector of double)
+0:296            'dvec2v' (temp 2-component vector of double)
+0:297      Sequence
+0:297        move second child to first child (temp 3X2 matrix of double)
+0:297          'dmat3x2v' (temp 3X2 matrix of double)
+0:297          outer product (global 3X2 matrix of double)
+0:297            'dvec2v' (temp 2-component vector of double)
+0:297            'dvec3v' (temp 3-component vector of double)
+0:298      Sequence
+0:298        move second child to first child (temp 2X4 matrix of double)
+0:298          'dmat2x4v' (temp 2X4 matrix of double)
+0:298          outer product (global 2X4 matrix of double)
+0:298            'dvec4v' (temp 4-component vector of double)
+0:298            'dvec2v' (temp 2-component vector of double)
+0:299      Sequence
+0:299        move second child to first child (temp 4X2 matrix of double)
+0:299          'dmat4x2v' (temp 4X2 matrix of double)
+0:299          outer product (global 4X2 matrix of double)
+0:299            'dvec2v' (temp 2-component vector of double)
+0:299            'dvec4v' (temp 4-component vector of double)
+0:300      Sequence
+0:300        move second child to first child (temp 3X4 matrix of double)
+0:300          'dmat3x4v' (temp 3X4 matrix of double)
+0:300          outer product (global 3X4 matrix of double)
+0:300            'dvec4v' (temp 4-component vector of double)
+0:300            'dvec3v' (temp 3-component vector of double)
+0:301      Sequence
+0:301        move second child to first child (temp 4X3 matrix of double)
+0:301          'dmat4x3v' (temp 4X3 matrix of double)
+0:301          outer product (global 4X3 matrix of double)
+0:301            'dvec3v' (temp 3-component vector of double)
+0:301            'dvec4v' (temp 4-component vector of double)
+0:303      matrix mult second child into first child (temp 2X2 matrix of double)
+0:303        'dmat2v' (temp 2X2 matrix of double)
+0:303        component-wise multiply (global 2X2 matrix of double)
+0:303          'dmat2v' (temp 2X2 matrix of double)
+0:303          'dmat2v' (temp 2X2 matrix of double)
+0:304      matrix mult second child into first child (temp 3X3 matrix of double)
+0:304        'dmat3v' (temp 3X3 matrix of double)
+0:304        component-wise multiply (global 3X3 matrix of double)
+0:304          'dmat3v' (temp 3X3 matrix of double)
+0:304          'dmat3v' (temp 3X3 matrix of double)
+0:305      matrix mult second child into first child (temp 4X4 matrix of double)
+0:305        'dmat4v' (temp 4X4 matrix of double)
+0:305        component-wise multiply (global 4X4 matrix of double)
+0:305          'dmat4v' (temp 4X4 matrix of double)
+0:305          'dmat4v' (temp 4X4 matrix of double)
+0:306      move second child to first child (temp 2X3 matrix of double)
+0:306        'dmat2x3v' (temp 2X3 matrix of double)
+0:306        component-wise multiply (global 2X3 matrix of double)
+0:306          'dmat2x3v' (temp 2X3 matrix of double)
+0:306          'dmat2x3v' (temp 2X3 matrix of double)
+0:307      move second child to first child (temp 2X4 matrix of double)
+0:307        'dmat2x4v' (temp 2X4 matrix of double)
+0:307        component-wise multiply (global 2X4 matrix of double)
+0:307          'dmat2x4v' (temp 2X4 matrix of double)
+0:307          'dmat2x4v' (temp 2X4 matrix of double)
+0:308      move second child to first child (temp 3X2 matrix of double)
+0:308        'dmat3x2v' (temp 3X2 matrix of double)
+0:308        component-wise multiply (global 3X2 matrix of double)
+0:308          'dmat3x2v' (temp 3X2 matrix of double)
+0:308          'dmat3x2v' (temp 3X2 matrix of double)
+0:309      move second child to first child (temp 3X4 matrix of double)
+0:309        'dmat3x4v' (temp 3X4 matrix of double)
+0:309        component-wise multiply (global 3X4 matrix of double)
+0:309          'dmat3x4v' (temp 3X4 matrix of double)
+0:309          'dmat3x4v' (temp 3X4 matrix of double)
+0:310      move second child to first child (temp 4X2 matrix of double)
+0:310        'dmat4x2v' (temp 4X2 matrix of double)
+0:310        component-wise multiply (global 4X2 matrix of double)
+0:310          'dmat4x2v' (temp 4X2 matrix of double)
+0:310          'dmat4x2v' (temp 4X2 matrix of double)
+0:311      move second child to first child (temp 4X3 matrix of double)
+0:311        'dmat4x3v' (temp 4X3 matrix of double)
+0:311        component-wise multiply (global 4X3 matrix of double)
+0:311          'dmat4x3v' (temp 4X3 matrix of double)
+0:311          'dmat4x3v' (temp 4X3 matrix of double)
+0:313      matrix mult second child into first child (temp 2X2 matrix of double)
+0:313        'dmat2v' (temp 2X2 matrix of double)
+0:313        transpose (global 2X2 matrix of double)
+0:313          'dmat2v' (temp 2X2 matrix of double)
+0:314      matrix mult second child into first child (temp 3X3 matrix of double)
+0:314        'dmat3v' (temp 3X3 matrix of double)
+0:314        transpose (global 3X3 matrix of double)
+0:314          'dmat3v' (temp 3X3 matrix of double)
+0:315      matrix mult second child into first child (temp 4X4 matrix of double)
+0:315        'dmat4v' (temp 4X4 matrix of double)
+0:315        transpose (global 4X4 matrix of double)
+0:315          'dmat4v' (temp 4X4 matrix of double)
+0:316      move second child to first child (temp 2X3 matrix of double)
+0:316        'dmat2x3v' (temp 2X3 matrix of double)
+0:316        transpose (global 2X3 matrix of double)
+0:316          'dmat3x2v' (temp 3X2 matrix of double)
+0:317      move second child to first child (temp 3X2 matrix of double)
+0:317        'dmat3x2v' (temp 3X2 matrix of double)
+0:317        transpose (global 3X2 matrix of double)
+0:317          'dmat2x3v' (temp 2X3 matrix of double)
+0:318      move second child to first child (temp 2X4 matrix of double)
+0:318        'dmat2x4v' (temp 2X4 matrix of double)
+0:318        transpose (global 2X4 matrix of double)
+0:318          'dmat4x2v' (temp 4X2 matrix of double)
+0:319      move second child to first child (temp 4X2 matrix of double)
+0:319        'dmat4x2v' (temp 4X2 matrix of double)
+0:319        transpose (global 4X2 matrix of double)
+0:319          'dmat2x4v' (temp 2X4 matrix of double)
+0:320      move second child to first child (temp 3X4 matrix of double)
+0:320        'dmat3x4v' (temp 3X4 matrix of double)
+0:320        transpose (global 3X4 matrix of double)
+0:320          'dmat4x3v' (temp 4X3 matrix of double)
+0:321      move second child to first child (temp 4X3 matrix of double)
+0:321        'dmat4x3v' (temp 4X3 matrix of double)
+0:321        transpose (global 4X3 matrix of double)
+0:321          'dmat3x4v' (temp 3X4 matrix of double)
+0:323      add second child into first child (temp double)
+0:323        'doublev' (temp double)
+0:323        determinant (global double)
+0:323          'dmat2v' (temp 2X2 matrix of double)
+0:324      add second child into first child (temp double)
+0:324        'doublev' (temp double)
+0:324        determinant (global double)
+0:324          'dmat3v' (temp 3X3 matrix of double)
+0:325      add second child into first child (temp double)
+0:325        'doublev' (temp double)
+0:325        determinant (global double)
+0:325          'dmat4v' (temp 4X4 matrix of double)
+0:327      matrix mult second child into first child (temp 2X2 matrix of double)
+0:327        'dmat2v' (temp 2X2 matrix of double)
+0:327        inverse (global 2X2 matrix of double)
+0:327          'dmat2v' (temp 2X2 matrix of double)
+0:328      matrix mult second child into first child (temp 3X3 matrix of double)
+0:328        'dmat3v' (temp 3X3 matrix of double)
+0:328        inverse (global 3X3 matrix of double)
+0:328          'dmat3v' (temp 3X3 matrix of double)
+0:329      matrix mult second child into first child (temp 4X4 matrix of double)
+0:329        'dmat4v' (temp 4X4 matrix of double)
+0:329        inverse (global 4X4 matrix of double)
+0:329          'dmat4v' (temp 4X4 matrix of double)
 0:?   Linker Objects
 0:?     'bn' (in 3-element array of block{in int a})
 0:?     'gl_in' (in 3-element array of block{in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize})
index 39fefd2..f070974 100644 (file)
@@ -7,168 +7,1359 @@ Linked fragment stage:
 
 // Module Version 10000
 // Generated by (magic number): 80001
-// Id's are bound by 125
+// Id's are bound by 1104
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 11 44 50 56 69 96 117 119
+                              EntryPoint Fragment 4  "main" 13 1025 1031 1036 1048 1074 1095 1097
                               ExecutionMode 4 OriginLowerLeft
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
                               Name 4  "main"
                               Name 6  "foo23("
-                              Name 11  "outp"
-                              Name 15  "u2drs"
-                              Name 36  "v"
-                              Name 42  "arrayedSampler"
-                              Name 44  "i"
-                              Name 50  "c2D"
-                              Name 56  "gl_ClipDistance"
-                              Name 69  "uoutp"
-                              Name 73  "samp2dr"
-                              Name 96  "ioutp"
-                              Name 100  "isamp2DA"
-                              Name 117  "gl_FragCoord"
-                              Name 119  "vl2"
-                              Decorate 44(i) Flat
-                              Decorate 56(gl_ClipDistance) BuiltIn ClipDistance
-                              Decorate 117(gl_FragCoord) BuiltIn FragCoord
-                              Decorate 119(vl2) Location 6
+                              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"
+                              Decorate 1025(i) Flat
+                              Decorate 1036(gl_ClipDistance) BuiltIn ClipDistance
+                              Decorate 1095(gl_FragCoord) BuiltIn FragCoord
+                              Decorate 1097(vl2) Location 6
                2:             TypeVoid
                3:             TypeFunction 2
-               8:             TypeFloat 32
-               9:             TypeVector 8(float) 4
-              10:             TypePointer Output 9(fvec4)
-        11(outp):     10(ptr) Variable Output
-              12:             TypeImage 8(float) Rect depth sampled format:Unknown
-              13:             TypeSampledImage 12
-              14:             TypePointer UniformConstant 13
-       15(u2drs):     14(ptr) Variable UniformConstant
-              18:             TypeVector 8(float) 2
-              19:    8(float) Constant 0
-              20:   18(fvec2) ConstantComposite 19 19
-              21:             TypeInt 32 1
-              22:             TypeVector 21(int) 2
-              23:     21(int) Constant 3
-              24:     21(int) Constant 4
-              25:   22(ivec2) ConstantComposite 23 24
-              28:             TypeInt 32 0
-              29:     28(int) Constant 0
-              30:             TypePointer Output 8(float)
-              35:             TypePointer Function 9(fvec4)
-              37:             TypeImage 8(float) 2D sampled format:Unknown
-              38:             TypeSampledImage 37
-              39:     28(int) Constant 5
-              40:             TypeArray 38 39
-              41:             TypePointer UniformConstant 40
-42(arrayedSampler):     41(ptr) Variable UniformConstant
-              43:             TypePointer Input 21(int)
-           44(i):     43(ptr) Variable Input
-              46:             TypePointer UniformConstant 38
-              49:             TypePointer Input 18(fvec2)
-         50(c2D):     49(ptr) Variable Input
-              53:     28(int) Constant 2
-              54:             TypeArray 8(float) 53
-              55:             TypePointer Input 54
-56(gl_ClipDistance):     55(ptr) Variable Input
-              57:     21(int) Constant 1
-              58:             TypePointer Input 8(float)
-              62:             TypeVector 8(float) 3
-              67:             TypeVector 28(int) 4
-              68:             TypePointer Output 67(ivec4)
-       69(uoutp):     68(ptr) Variable Output
-              70:             TypeImage 28(int) Rect sampled format:Unknown
-              71:             TypeSampledImage 70
-              72:             TypePointer UniformConstant 71
-     73(samp2dr):     72(ptr) Variable UniformConstant
-              76:     28(int) Constant 4
-              77:             TypeArray 22(ivec2) 76
-              78:     21(int) Constant 2
-              79:   22(ivec2) ConstantComposite 57 78
-              80:     21(int) Constant 15
-              81:     21(int) Constant 16
-              82:   22(ivec2) ConstantComposite 80 81
-              83:     21(int) Constant 4294967294
-              84:     21(int) Constant 0
-              85:   22(ivec2) ConstantComposite 83 84
-              86:          77 ConstantComposite 79 25 82 85
-              94:             TypeVector 21(int) 4
-              95:             TypePointer Output 94(ivec4)
-       96(ioutp):     95(ptr) Variable Output
-              97:             TypeImage 21(int) 2D array sampled format:Unknown
-              98:             TypeSampledImage 97
-              99:             TypePointer UniformConstant 98
-   100(isamp2DA):     99(ptr) Variable UniformConstant
-             102:    8(float) Constant 1036831949
-             103:   62(fvec3) ConstantComposite 102 102 102
-             104:   22(ivec2) ConstantComposite 57 57
-             116:             TypePointer Input 9(fvec4)
-117(gl_FragCoord):    116(ptr) Variable Input
-        119(vl2):    116(ptr) Variable Input
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Output 11(fvec4)
+        13(outp):     12(ptr) Variable Output
+              14:             TypeImage 10(float) Rect depth sampled format:Unknown
+              15:             TypeSampledImage 14
+              16:             TypePointer UniformConstant 15
+       17(u2drs):     16(ptr) Variable UniformConstant
+              20:             TypeVector 10(float) 2
+              21:   10(float) Constant 0
+              22:   20(fvec2) ConstantComposite 21 21
+              23:             TypeInt 32 1
+              24:             TypeVector 23(int) 2
+              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
          4(main):           2 Function None 3
                5:             Label
-           36(v):     35(ptr) Variable Function
-              45:     21(int) Load 44(i)
-              47:     46(ptr) AccessChain 42(arrayedSampler) 45
-              48:          38 Load 47
-              51:   18(fvec2) Load 50(c2D)
-              52:    9(fvec4) ImageSampleImplicitLod 48 51
-                              Store 36(v) 52
-              59:     58(ptr) AccessChain 56(gl_ClipDistance) 57
-              60:    8(float) Load 59
-              61:     30(ptr) AccessChain 11(outp) 29
-                              Store 61 60
-              63:    9(fvec4) Load 36(v)
-              64:   62(fvec3) VectorShuffle 63 63 1 2 3
-              65:    9(fvec4) Load 11(outp)
-              66:    9(fvec4) VectorShuffle 65 64 0 4 5 6
-                              Store 11(outp) 66
-              74:          71 Load 73(samp2dr)
-              75:   18(fvec2) Load 50(c2D)
-              87:   67(ivec4) ImageGather 74 75 78 ConstOffsets 86
-                              Store 69(uoutp) 87
-              88:     46(ptr) AccessChain 42(arrayedSampler) 84
-              89:          38 Load 88
-              90:   18(fvec2) Load 50(c2D)
-              91:    9(fvec4) ImageGather 89 90 84
-              92:    9(fvec4) Load 11(outp)
-              93:    9(fvec4) FAdd 92 91
-                              Store 11(outp) 93
-             101:          98 Load 100(isamp2DA)
-             105:   94(ivec4) ImageGather 101 103 23 ConstOffset 104
-                              Store 96(ioutp) 105
-             106:          98 Load 100(isamp2DA)
-             107:   94(ivec4) ImageGather 106 103 23 ConstOffset 104
-             108:   94(ivec4) Load 96(ioutp)
-             109:   94(ivec4) IAdd 108 107
-                              Store 96(ioutp) 109
-             110:          98 Load 100(isamp2DA)
-             111:     21(int) Load 44(i)
-             112:   22(ivec2) CompositeConstruct 111 111
-             113:   94(ivec4) ImageGather 110 103 84 Offset 112
-             114:   94(ivec4) Load 96(ioutp)
-             115:   94(ivec4) IAdd 114 113
-                              Store 96(ioutp) 115
-             118:    9(fvec4) Load 117(gl_FragCoord)
-             120:    9(fvec4) Load 119(vl2)
-             121:    9(fvec4) FAdd 118 120
-             122:    9(fvec4) Load 11(outp)
-             123:    9(fvec4) FAdd 122 121
-                              Store 11(outp) 123
-             124:           2 FunctionCall 6(foo23()
+         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
+            1102:           2 FunctionCall 6(foo23()
+            1103:           2 FunctionCall 8(doubles()
                               Return
                               FunctionEnd
        6(foo23():           2 Function None 3
                7:             Label
-              16:          13 Load 15(u2drs)
-              17:    9(fvec4) Load 11(outp)
-              26:    8(float) CompositeExtract 17 2
-              27:    8(float) ImageSampleProjDrefExplicitLod 16 17 26 Grad ConstOffset 20 20 25
-              31:     30(ptr) AccessChain 11(outp) 29
-              32:    8(float) Load 31
-              33:    8(float) FAdd 32 27
-              34:     30(ptr) AccessChain 11(outp) 29
-                              Store 34 33
+              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
+                              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) ExtInst 1(GLSL.std.450) 46(FMix) 424 425 429
+             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) ExtInst 1(GLSL.std.450) 46(FMix) 433 434 438
+             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) ExtInst 1(GLSL.std.450) 46(FMix) 442 443 447
+             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) ExtInst 1(GLSL.std.450) 46(FMix) 451 452 456
+             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
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
new file mode 100644 (file)
index 0000000..24209e0
--- /dev/null
@@ -0,0 +1,522 @@
+spv.sparseTexture.frag
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked fragment stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 399
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 384
+                              ExecutionMode 4 OriginLowerLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_sparse_texture2"
+                              Name 4  "main"
+                              Name 8  "resident"
+                              Name 13  "texel"
+                              Name 18  "itexel"
+                              Name 23  "utexel"
+                              Name 29  "s2D"
+                              Name 33  "c2"
+                              Name 35  "ResType"
+                              Name 44  "s3D"
+                              Name 48  "c3"
+                              Name 59  "isCube"
+                              Name 62  "ResType"
+                              Name 71  "s2DShadow"
+                              Name 77  "ResType"
+                              Name 86  "sCubeArrayShadow"
+                              Name 89  "c4"
+                              Name 108  "usCubeArray"
+                              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 384  "outColor"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Function 11(fvec4)
+              14:   10(float) Constant 0
+              15:   11(fvec4) ConstantComposite 14 14 14 14
+              16:             TypeVector 6(int) 4
+              17:             TypePointer Function 16(ivec4)
+              19:   16(ivec4) ConstantComposite 9 9 9 9
+              20:             TypeInt 32 0
+              21:             TypeVector 20(int) 4
+              22:             TypePointer Function 21(ivec4)
+              24:     20(int) Constant 0
+              25:   21(ivec4) ConstantComposite 24 24 24 24
+              26:             TypeImage 10(float) 2D sampled format:Unknown
+              27:             TypeSampledImage 26
+              28:             TypePointer UniformConstant 27
+         29(s2D):     28(ptr) Variable UniformConstant
+              31:             TypeVector 10(float) 2
+              32:             TypePointer UniformConstant 31(fvec2)
+          33(c2):     32(ptr) Variable UniformConstant
+     35(ResType):             TypeStruct 6(int) 11(fvec4)
+              41:             TypeImage 10(float) 3D sampled format:Unknown
+              42:             TypeSampledImage 41
+              43:             TypePointer UniformConstant 42
+         44(s3D):     43(ptr) Variable UniformConstant
+              46:             TypeVector 10(float) 3
+              47:             TypePointer UniformConstant 46(fvec3)
+          48(c3):     47(ptr) Variable UniformConstant
+              50:   10(float) Constant 1073741824
+              56:             TypeImage 6(int) Cube sampled format:Unknown
+              57:             TypeSampledImage 56
+              58:             TypePointer UniformConstant 57
+      59(isCube):     58(ptr) Variable UniformConstant
+     62(ResType):             TypeStruct 6(int) 16(ivec4)
+              68:             TypeImage 10(float) 2D depth sampled format:Unknown
+              69:             TypeSampledImage 68
+              70:             TypePointer UniformConstant 69
+   71(s2DShadow):     70(ptr) Variable UniformConstant
+              74:             TypePointer Function 10(float)
+     77(ResType):             TypeStruct 6(int) 10(float)
+              83:             TypeImage 10(float) Cube depth array sampled format:Unknown
+              84:             TypeSampledImage 83
+              85:             TypePointer UniformConstant 84
+86(sCubeArrayShadow):     85(ptr) Variable UniformConstant
+              88:             TypePointer UniformConstant 11(fvec4)
+          89(c4):     88(ptr) Variable UniformConstant
+              91:   10(float) Constant 1065353216
+             105:             TypeImage 20(int) Cube array sampled format:Unknown
+             106:             TypeSampledImage 105
+             107:             TypePointer UniformConstant 106
+108(usCubeArray):    107(ptr) Variable UniformConstant
+    111(ResType):             TypeStruct 6(int) 21(ivec4)
+             119:     20(int) Constant 1
+             129:             TypeVector 6(int) 3
+             130:      6(int) Constant 2
+             131:  129(ivec3) ConstantComposite 130 130 130
+             137:             TypeImage 20(int) Rect sampled format:Unknown
+             138:             TypeSampledImage 137
+             139:             TypePointer UniformConstant 138
+   140(us2DRect):    139(ptr) Variable UniformConstant
+             143:             TypeVector 6(int) 2
+             144:      6(int) Constant 3
+             145:  143(ivec2) ConstantComposite 144 144
+             151:             TypeImage 10(float) 2D depth array sampled format:Unknown
+             152:             TypeSampledImage 151
+             153:             TypePointer UniformConstant 152
+154(s2DArrayShadow):    153(ptr) Variable UniformConstant
+             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 UniformConstant 358
+    360(offsets):    359(ptr) Variable UniformConstant
+             383:             TypePointer Output 11(fvec4)
+   384(outColor):    383(ptr) Variable Output
+             387:             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
+             385:     12(ptr) Variable Function
+                              Store 8(resident) 9
+                              Store 13(texel) 15
+                              Store 18(itexel) 19
+                              Store 23(utexel) 25
+              30:          27 Load 29(s2D)
+              34:   31(fvec2) Load 33(c2)
+              36: 35(ResType) ImageSparseSampleImplicitLod 30 34
+              37:   11(fvec4) CompositeExtract 36 1
+                              Store 13(texel) 37
+              38:      6(int) CompositeExtract 36 0
+              39:      6(int) Load 8(resident)
+              40:      6(int) BitwiseOr 39 38
+                              Store 8(resident) 40
+              45:          42 Load 44(s3D)
+              49:   46(fvec3) Load 48(c3)
+              51: 35(ResType) ImageSparseSampleImplicitLod 45 49 Bias 50
+              52:   11(fvec4) CompositeExtract 51 1
+                              Store 13(texel) 52
+              53:      6(int) CompositeExtract 51 0
+              54:      6(int) Load 8(resident)
+              55:      6(int) BitwiseOr 54 53
+                              Store 8(resident) 55
+              60:          57 Load 59(isCube)
+              61:   46(fvec3) Load 48(c3)
+              63: 62(ResType) ImageSparseSampleImplicitLod 60 61
+              64:   16(ivec4) CompositeExtract 63 1
+                              Store 18(itexel) 64
+              65:      6(int) CompositeExtract 63 0
+              66:      6(int) Load 8(resident)
+              67:      6(int) BitwiseOr 66 65
+                              Store 8(resident) 67
+              72:          69 Load 71(s2DShadow)
+              73:   46(fvec3) Load 48(c3)
+              75:     74(ptr) AccessChain 13(texel) 24
+              76:   10(float) CompositeExtract 73 2
+              78: 77(ResType) ImageSparseSampleDrefImplicitLod 72 73 76
+              79:   10(float) CompositeExtract 78 1
+                              Store 75 79
+              80:      6(int) CompositeExtract 78 0
+              81:      6(int) Load 8(resident)
+              82:      6(int) BitwiseOr 81 80
+                              Store 8(resident) 82
+              87:          84 Load 86(sCubeArrayShadow)
+              90:   11(fvec4) Load 89(c4)
+              92:     74(ptr) AccessChain 13(texel) 24
+              93: 77(ResType) ImageSparseSampleDrefImplicitLod 87 90 91
+              94:   10(float) CompositeExtract 93 1
+                              Store 92 94
+              95:      6(int) CompositeExtract 93 0
+              96:      6(int) Load 8(resident)
+              97:      6(int) BitwiseOr 96 95
+                              Store 8(resident) 97
+              98:          27 Load 29(s2D)
+              99:   31(fvec2) Load 33(c2)
+             100: 35(ResType) ImageSparseSampleExplicitLod 98 99 Lod 50
+             101:   11(fvec4) CompositeExtract 100 1
+                              Store 13(texel) 101
+             102:      6(int) CompositeExtract 100 0
+             103:      6(int) Load 8(resident)
+             104:      6(int) BitwiseOr 103 102
+                              Store 8(resident) 104
+             109:         106 Load 108(usCubeArray)
+             110:   11(fvec4) Load 89(c4)
+             112:111(ResType) ImageSparseSampleExplicitLod 109 110 Lod 91
+             113:   21(ivec4) CompositeExtract 112 1
+                              Store 23(utexel) 113
+             114:      6(int) CompositeExtract 112 0
+             115:      6(int) Load 8(resident)
+             116:      6(int) BitwiseOr 115 114
+                              Store 8(resident) 116
+             117:          69 Load 71(s2DShadow)
+             118:   46(fvec3) Load 48(c3)
+             120:     74(ptr) AccessChain 13(texel) 119
+             121:   10(float) CompositeExtract 118 2
+             122: 77(ResType) ImageSparseSampleDrefExplicitLod 117 118 121 Lod 50
+             123:   10(float) CompositeExtract 122 1
+                              Store 120 123
+             124:      6(int) CompositeExtract 122 0
+             125:      6(int) Load 8(resident)
+             126:      6(int) BitwiseOr 125 124
+                              Store 8(resident) 126
+             127:          42 Load 44(s3D)
+             128:   46(fvec3) Load 48(c3)
+             132: 35(ResType) ImageSparseSampleImplicitLod 127 128 Bias ConstOffset 50 131
+             133:   11(fvec4) CompositeExtract 132 1
+                              Store 13(texel) 133
+             134:      6(int) CompositeExtract 132 0
+             135:      6(int) Load 8(resident)
+             136:      6(int) BitwiseOr 135 134
+                              Store 8(resident) 136
+             141:         138 Load 140(us2DRect)
+             142:   31(fvec2) Load 33(c2)
+             146:111(ResType) ImageSparseSampleImplicitLod 141 142 ConstOffset 145
+             147:   21(ivec4) CompositeExtract 146 1
+                              Store 23(utexel) 147
+             148:      6(int) CompositeExtract 146 0
+             149:      6(int) Load 8(resident)
+             150:      6(int) BitwiseOr 149 148
+                              Store 8(resident) 150
+             155:         152 Load 154(s2DArrayShadow)
+             156:   11(fvec4) Load 89(c4)
+             160:     74(ptr) AccessChain 13(texel) 159
+             161:   10(float) CompositeExtract 156 3
+             162: 77(ResType) ImageSparseSampleDrefImplicitLod 155 156 161 ConstOffset 158
+             163:   10(float) CompositeExtract 162 1
+                              Store 160 163
+             164:      6(int) CompositeExtract 162 0
+             165:      6(int) Load 8(resident)
+             166:      6(int) BitwiseOr 165 164
+                              Store 8(resident) 166
+             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:      6(int) Load 8(resident)
+             388:   387(bool) ImageSparseTexelsResident 386
+                              SelectionMerge 390 None
+                              BranchConditional 388 389 392
+             389:               Label
+             391:   11(fvec4)   Load 13(texel)
+                                Store 385 391
+                                Branch 390
+             392:               Label
+             393:   16(ivec4)   Load 18(itexel)
+             394:   11(fvec4)   ConvertSToF 393
+             395:   21(ivec4)   Load 23(utexel)
+             396:   11(fvec4)   ConvertUToF 395
+             397:   11(fvec4)   FAdd 394 396
+                                Store 385 397
+                                Branch 390
+             390:             Label
+             398:   11(fvec4) Load 385
+                              Store 384(outColor) 398
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
new file mode 100644 (file)
index 0000000..42fc27a
--- /dev/null
@@ -0,0 +1,456 @@
+spv.sparseTextureClamp.frag
+Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
+
+
+Linked fragment stage:
+
+
+// Module Version 10000
+// Generated by (magic number): 80001
+// Id's are bound by 360
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 345
+                              ExecutionMode 4 OriginLowerLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_ARB_sparse_texture_clamp"
+                              Name 4  "main"
+                              Name 8  "resident"
+                              Name 13  "texel"
+                              Name 18  "itexel"
+                              Name 23  "utexel"
+                              Name 29  "s2D"
+                              Name 33  "c2"
+                              Name 36  "lodClamp"
+                              Name 38  "ResType"
+                              Name 47  "s3D"
+                              Name 51  "c3"
+                              Name 63  "isCube"
+                              Name 67  "ResType"
+                              Name 76  "s2DShadow"
+                              Name 83  "ResType"
+                              Name 92  "sCubeArrayShadow"
+                              Name 95  "c4"
+                              Name 154  "us2DRect"
+                              Name 161  "ResType"
+                              Name 170  "s2DArrayShadow"
+                              Name 218  "sCubeShadow"
+                              Name 235  "usCubeArray"
+                              Name 286  "s2DRectShadow"
+                              Name 305  "is2DArray"
+                              Name 345  "outColor"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Function 11(fvec4)
+              14:   10(float) Constant 0
+              15:   11(fvec4) ConstantComposite 14 14 14 14
+              16:             TypeVector 6(int) 4
+              17:             TypePointer Function 16(ivec4)
+              19:   16(ivec4) ConstantComposite 9 9 9 9
+              20:             TypeInt 32 0
+              21:             TypeVector 20(int) 4
+              22:             TypePointer Function 21(ivec4)
+              24:     20(int) Constant 0
+              25:   21(ivec4) ConstantComposite 24 24 24 24
+              26:             TypeImage 10(float) 2D sampled format:Unknown
+              27:             TypeSampledImage 26
+              28:             TypePointer UniformConstant 27
+         29(s2D):     28(ptr) Variable UniformConstant
+              31:             TypeVector 10(float) 2
+              32:             TypePointer UniformConstant 31(fvec2)
+          33(c2):     32(ptr) Variable UniformConstant
+              35:             TypePointer UniformConstant 10(float)
+    36(lodClamp):     35(ptr) Variable UniformConstant
+     38(ResType):             TypeStruct 6(int) 11(fvec4)
+              44:             TypeImage 10(float) 3D sampled format:Unknown
+              45:             TypeSampledImage 44
+              46:             TypePointer UniformConstant 45
+         47(s3D):     46(ptr) Variable UniformConstant
+              49:             TypeVector 10(float) 3
+              50:             TypePointer UniformConstant 49(fvec3)
+          51(c3):     50(ptr) Variable UniformConstant
+              54:   10(float) Constant 1073741824
+              60:             TypeImage 6(int) Cube sampled format:Unknown
+              61:             TypeSampledImage 60
+              62:             TypePointer UniformConstant 61
+      63(isCube):     62(ptr) Variable UniformConstant
+     67(ResType):             TypeStruct 6(int) 16(ivec4)
+              73:             TypeImage 10(float) 2D depth sampled format:Unknown
+              74:             TypeSampledImage 73
+              75:             TypePointer UniformConstant 74
+   76(s2DShadow):     75(ptr) Variable UniformConstant
+              80:             TypePointer Function 10(float)
+     83(ResType):             TypeStruct 6(int) 10(float)
+              89:             TypeImage 10(float) Cube depth array sampled format:Unknown
+              90:             TypeSampledImage 89
+              91:             TypePointer UniformConstant 90
+92(sCubeArrayShadow):     91(ptr) Variable UniformConstant
+              94:             TypePointer UniformConstant 11(fvec4)
+          95(c4):     94(ptr) Variable UniformConstant
+              97:   10(float) Constant 1065353216
+             142:             TypeVector 6(int) 3
+             143:      6(int) Constant 2
+             144:  142(ivec3) ConstantComposite 143 143 143
+             151:             TypeImage 20(int) Rect sampled format:Unknown
+             152:             TypeSampledImage 151
+             153:             TypePointer UniformConstant 152
+   154(us2DRect):    153(ptr) Variable UniformConstant
+             157:             TypeVector 6(int) 2
+             158:      6(int) Constant 3
+             159:  157(ivec2) ConstantComposite 158 158
+    161(ResType):             TypeStruct 6(int) 21(ivec4)
+             167:             TypeImage 10(float) 2D depth array sampled format:Unknown
+             168:             TypeSampledImage 167
+             169:             TypePointer UniformConstant 168
+170(s2DArrayShadow):    169(ptr) Variable UniformConstant
+             173:      6(int) Constant 5
+             174:  157(ivec2) ConstantComposite 173 173
+             176:     20(int) Constant 2
+             215:             TypeImage 10(float) Cube depth sampled format:Unknown
+             216:             TypeSampledImage 215
+             217:             TypePointer UniformConstant 216
+218(sCubeShadow):    217(ptr) Variable UniformConstant
+             224:     20(int) Constant 1
+             232:             TypeImage 20(int) Cube array sampled format:Unknown
+             233:             TypeSampledImage 232
+             234:             TypePointer UniformConstant 233
+235(usCubeArray):    234(ptr) Variable UniformConstant
+             283:             TypeImage 10(float) Rect depth sampled format:Unknown
+             284:             TypeSampledImage 283
+             285:             TypePointer UniformConstant 284
+286(s2DRectShadow):    285(ptr) Variable UniformConstant
+             291:      6(int) Constant 6
+             292:  157(ivec2) ConstantComposite 291 291
+             294:     20(int) Constant 3
+             302:             TypeImage 6(int) 2D array sampled format:Unknown
+             303:             TypeSampledImage 302
+             304:             TypePointer UniformConstant 303
+  305(is2DArray):    304(ptr) Variable UniformConstant
+             310:  157(ivec2) ConstantComposite 143 143
+             344:             TypePointer Output 11(fvec4)
+   345(outColor):    344(ptr) Variable Output
+             348:             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
+             346:     12(ptr) Variable Function
+                              Store 8(resident) 9
+                              Store 13(texel) 15
+                              Store 18(itexel) 19
+                              Store 23(utexel) 25
+              30:          27 Load 29(s2D)
+              34:   31(fvec2) Load 33(c2)
+              37:   10(float) Load 36(lodClamp)
+              39: 38(ResType) ImageSparseSampleImplicitLod 30 34 MinLod 37
+              40:   11(fvec4) CompositeExtract 39 1
+                              Store 13(texel) 40
+              41:      6(int) CompositeExtract 39 0
+              42:      6(int) Load 8(resident)
+              43:      6(int) BitwiseOr 42 41
+                              Store 8(resident) 43
+              48:          45 Load 47(s3D)
+              52:   49(fvec3) Load 51(c3)
+              53:   10(float) Load 36(lodClamp)
+              55: 38(ResType) ImageSparseSampleImplicitLod 48 52 Bias MinLod 54 53
+              56:   11(fvec4) CompositeExtract 55 1
+                              Store 13(texel) 56
+              57:      6(int) CompositeExtract 55 0
+              58:      6(int) Load 8(resident)
+              59:      6(int) BitwiseOr 58 57
+                              Store 8(resident) 59
+              64:          61 Load 63(isCube)
+              65:   49(fvec3) Load 51(c3)
+              66:   10(float) Load 36(lodClamp)
+              68: 67(ResType) ImageSparseSampleImplicitLod 64 65 MinLod 66
+              69:   16(ivec4) CompositeExtract 68 1
+                              Store 18(itexel) 69
+              70:      6(int) CompositeExtract 68 0
+              71:      6(int) Load 8(resident)
+              72:      6(int) BitwiseOr 71 70
+                              Store 8(resident) 72
+              77:          74 Load 76(s2DShadow)
+              78:   49(fvec3) Load 51(c3)
+              79:   10(float) Load 36(lodClamp)
+              81:     80(ptr) AccessChain 13(texel) 24
+              82:   10(float) CompositeExtract 78 2
+              84: 83(ResType) ImageSparseSampleDrefImplicitLod 77 78 82 MinLod 79
+              85:   10(float) CompositeExtract 84 1
+                              Store 81 85
+              86:      6(int) CompositeExtract 84 0
+              87:      6(int) Load 8(resident)
+              88:      6(int) BitwiseOr 87 86
+                              Store 8(resident) 88
+              93:          90 Load 92(sCubeArrayShadow)
+              96:   11(fvec4) Load 95(c4)
+              98:   10(float) Load 36(lodClamp)
+              99:     80(ptr) AccessChain 13(texel) 24
+             100: 83(ResType) ImageSparseSampleDrefImplicitLod 93 96 97 MinLod 98
+             101:   10(float) CompositeExtract 100 1
+                              Store 99 101
+             102:      6(int) CompositeExtract 100 0
+             103:      6(int) Load 8(resident)
+             104:      6(int) BitwiseOr 103 102
+                              Store 8(resident) 104
+             105:          27 Load 29(s2D)
+             106:   31(fvec2) Load 33(c2)
+             107:   10(float) Load 36(lodClamp)
+             108:   11(fvec4) ImageSampleImplicitLod 105 106 MinLod 107
+             109:   11(fvec4) Load 13(texel)
+             110:   11(fvec4) FAdd 109 108
+                              Store 13(texel) 110
+             111:          45 Load 47(s3D)
+             112:   49(fvec3) Load 51(c3)
+             113:   10(float) Load 36(lodClamp)
+             114:   11(fvec4) ImageSampleImplicitLod 111 112 Bias MinLod 54 113
+             115:   11(fvec4) Load 13(texel)
+             116:   11(fvec4) FAdd 115 114
+                              Store 13(texel) 116
+             117:          61 Load 63(isCube)
+             118:   49(fvec3) Load 51(c3)
+             119:   10(float) Load 36(lodClamp)
+             120:   16(ivec4) ImageSampleImplicitLod 117 118 MinLod 119
+             121:   16(ivec4) Load 18(itexel)
+             122:   16(ivec4) IAdd 121 120
+                              Store 18(itexel) 122
+             123:          74 Load 76(s2DShadow)
+             124:   49(fvec3) Load 51(c3)
+             125:   10(float) Load 36(lodClamp)
+             126:   10(float) CompositeExtract 124 2
+             127:   10(float) ImageSampleDrefImplicitLod 123 124 126 MinLod 125
+             128:     80(ptr) AccessChain 13(texel) 24
+             129:   10(float) Load 128
+             130:   10(float) FAdd 129 127
+             131:     80(ptr) AccessChain 13(texel) 24
+                              Store 131 130
+             132:          90 Load 92(sCubeArrayShadow)
+             133:   11(fvec4) Load 95(c4)
+             134:   10(float) Load 36(lodClamp)
+             135:   10(float) ImageSampleDrefImplicitLod 132 133 97 MinLod 134
+             136:     80(ptr) AccessChain 13(texel) 24
+             137:   10(float) Load 136
+             138:   10(float) FAdd 137 135
+             139:     80(ptr) AccessChain 13(texel) 24
+                              Store 139 138
+             140:          45 Load 47(s3D)
+             141:   49(fvec3) Load 51(c3)
+             145:   10(float) Load 36(lodClamp)
+             146: 38(ResType) ImageSparseSampleImplicitLod 140 141 Bias ConstOffset MinLod 54 144 145
+             147:   11(fvec4) CompositeExtract 146 1
+                              Store 13(texel) 147
+             148:      6(int) CompositeExtract 146 0
+             149:      6(int) Load 8(resident)
+             150:      6(int) BitwiseOr 149 148
+                              Store 8(resident) 150
+             155:         152 Load 154(us2DRect)
+             156:   31(fvec2) Load 33(c2)
+             160:   10(float) Load 36(lodClamp)
+             162:161(ResType) ImageSparseSampleImplicitLod 155 156 ConstOffset MinLod 159 160
+             163:   21(ivec4) CompositeExtract 162 1
+                              Store 23(utexel) 163
+             164:      6(int) CompositeExtract 162 0
+             165:      6(int) Load 8(resident)
+             166:      6(int) BitwiseOr 165 164
+                              Store 8(resident) 166
+             171:         168 Load 170(s2DArrayShadow)
+             172:   11(fvec4) Load 95(c4)
+             175:   10(float) Load 36(lodClamp)
+             177:     80(ptr) AccessChain 13(texel) 176
+             178:   10(float) CompositeExtract 172 3
+             179: 83(ResType) ImageSparseSampleDrefImplicitLod 171 172 178 ConstOffset MinLod 174 175
+             180:   10(float) CompositeExtract 179 1
+                              Store 177 180
+             181:      6(int) CompositeExtract 179 0
+             182:      6(int) Load 8(resident)
+             183:      6(int) BitwiseOr 182 181
+                              Store 8(resident) 183
+             184:          45 Load 47(s3D)
+             185:   49(fvec3) Load 51(c3)
+             186:   10(float) Load 36(lodClamp)
+             187:   11(fvec4) ImageSampleImplicitLod 184 185 Bias ConstOffset MinLod 54 144 186
+             188:   11(fvec4) Load 13(texel)
+             189:   11(fvec4) FAdd 188 187
+                              Store 13(texel) 189
+             190:         152 Load 154(us2DRect)
+             191:   31(fvec2) Load 33(c2)
+             192:   10(float) Load 36(lodClamp)
+             193:   21(ivec4) ImageSampleImplicitLod 190 191 ConstOffset MinLod 159 192
+             194:   21(ivec4) Load 23(utexel)
+             195:   21(ivec4) IAdd 194 193
+                              Store 23(utexel) 195
+             196:         168 Load 170(s2DArrayShadow)
+             197:   11(fvec4) Load 95(c4)
+             198:   10(float) Load 36(lodClamp)
+             199:   10(float) CompositeExtract 197 3
+             200:   10(float) ImageSampleDrefImplicitLod 196 197 199 ConstOffset MinLod 174 198
+             201:     80(ptr) AccessChain 13(texel) 176
+             202:   10(float) Load 201
+             203:   10(float) FAdd 202 200
+             204:     80(ptr) AccessChain 13(texel) 176
+                              Store 204 203
+             205:          45 Load 47(s3D)
+             206:   49(fvec3) Load 51(c3)
+             207:   49(fvec3) Load 51(c3)
+             208:   49(fvec3) Load 51(c3)
+             209:   10(float) Load 36(lodClamp)
+             210: 38(ResType) ImageSparseSampleExplicitLod 205 206 Grad MinLod 207 208 209
+             211:   11(fvec4) CompositeExtract 210 1
+                              Store 13(texel) 211
+             212:      6(int) CompositeExtract 210 0
+             213:      6(int) Load 8(resident)
+             214:      6(int) BitwiseOr 213 212
+                              Store 8(resident) 214
+             219:         216 Load 218(sCubeShadow)
+             220:   11(fvec4) Load 95(c4)
+             221:   49(fvec3) Load 51(c3)
+             222:   49(fvec3) Load 51(c3)
+             223:   10(float) Load 36(lodClamp)
+             225:     80(ptr) AccessChain 13(texel) 224
+             226:   10(float) CompositeExtract 220 3
+             227: 83(ResType) ImageSparseSampleDrefExplicitLod 219 220 226 Grad MinLod 221 222 223
+             228:   10(float) CompositeExtract 227 1
+                              Store 225 228
+             229:      6(int) CompositeExtract 227 0
+             230:      6(int) Load 8(resident)
+             231:      6(int) BitwiseOr 230 229
+                              Store 8(resident) 231
+             236:         233 Load 235(usCubeArray)
+             237:   11(fvec4) Load 95(c4)
+             238:   49(fvec3) Load 51(c3)
+             239:   49(fvec3) Load 51(c3)
+             240:   10(float) Load 36(lodClamp)
+             241:161(ResType) ImageSparseSampleExplicitLod 236 237 Grad MinLod 238 239 240
+             242:   21(ivec4) CompositeExtract 241 1
+                              Store 23(utexel) 242
+             243:      6(int) CompositeExtract 241 0
+             244:      6(int) Load 8(resident)
+             245:      6(int) BitwiseOr 244 243
+                              Store 8(resident) 245
+             246:          45 Load 47(s3D)
+             247:   49(fvec3) Load 51(c3)
+             248:   49(fvec3) Load 51(c3)
+             249:   49(fvec3) Load 51(c3)
+             250:   10(float) Load 36(lodClamp)
+             251:   11(fvec4) ImageSampleExplicitLod 246 247 Grad MinLod 248 249 250
+             252:   11(fvec4) Load 13(texel)
+             253:   11(fvec4) FAdd 252 251
+                              Store 13(texel) 253
+             254:         216 Load 218(sCubeShadow)
+             255:   11(fvec4) Load 95(c4)
+             256:   49(fvec3) Load 51(c3)
+             257:   49(fvec3) Load 51(c3)
+             258:   10(float) Load 36(lodClamp)
+             259:   10(float) CompositeExtract 255 3
+             260:   10(float) ImageSampleDrefExplicitLod 254 255 259 Grad MinLod 256 257 258
+             261:     80(ptr) AccessChain 13(texel) 224
+             262:   10(float) Load 261
+             263:   10(float) FAdd 262 260
+             264:     80(ptr) AccessChain 13(texel) 224
+                              Store 264 263
+             265:         233 Load 235(usCubeArray)
+             266:   11(fvec4) Load 95(c4)
+             267:   49(fvec3) Load 51(c3)
+             268:   49(fvec3) Load 51(c3)
+             269:   10(float) Load 36(lodClamp)
+             270:   21(ivec4) ImageSampleExplicitLod 265 266 Grad MinLod 267 268 269
+             271:   21(ivec4) Load 23(utexel)
+             272:   21(ivec4) IAdd 271 270
+                              Store 23(utexel) 272
+             273:          27 Load 29(s2D)
+             274:   31(fvec2) Load 33(c2)
+             275:   31(fvec2) Load 33(c2)
+             276:   31(fvec2) Load 33(c2)
+             277:   10(float) Load 36(lodClamp)
+             278: 38(ResType) ImageSparseSampleExplicitLod 273 274 Grad ConstOffset MinLod 275 276 174 277
+             279:   11(fvec4) CompositeExtract 278 1
+                              Store 13(texel) 279
+             280:      6(int) CompositeExtract 278 0
+             281:      6(int) Load 8(resident)
+             282:      6(int) BitwiseOr 281 280
+                              Store 8(resident) 282
+             287:         284 Load 286(s2DRectShadow)
+             288:   49(fvec3) Load 51(c3)
+             289:   31(fvec2) Load 33(c2)
+             290:   31(fvec2) Load 33(c2)
+             293:   10(float) Load 36(lodClamp)
+             295:     80(ptr) AccessChain 13(texel) 294
+             296:   10(float) CompositeExtract 288 2
+             297: 83(ResType) ImageSparseSampleDrefExplicitLod 287 288 296 Grad ConstOffset MinLod 289 290 292 293
+             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
+             306:         303 Load 305(is2DArray)
+             307:   49(fvec3) Load 51(c3)
+             308:   31(fvec2) Load 33(c2)
+             309:   31(fvec2) Load 33(c2)
+             311:   10(float) Load 36(lodClamp)
+             312: 67(ResType) ImageSparseSampleExplicitLod 306 307 Grad ConstOffset MinLod 308 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:   31(fvec2) Load 33(c2)
+             320:   31(fvec2) Load 33(c2)
+             321:   10(float) Load 36(lodClamp)
+             322:   11(fvec4) ImageSampleExplicitLod 317 318 Grad ConstOffset MinLod 319 320 174 321
+             323:   11(fvec4) Load 13(texel)
+             324:   11(fvec4) FAdd 323 322
+                              Store 13(texel) 324
+             325:         284 Load 286(s2DRectShadow)
+             326:   49(fvec3) Load 51(c3)
+             327:   31(fvec2) Load 33(c2)
+             328:   31(fvec2) Load 33(c2)
+             329:   10(float) Load 36(lodClamp)
+             330:   10(float) CompositeExtract 326 2
+             331:   10(float) ImageSampleDrefExplicitLod 325 326 330 Grad ConstOffset MinLod 327 328 292 329
+             332:     80(ptr) AccessChain 13(texel) 294
+             333:   10(float) Load 332
+             334:   10(float) FAdd 333 331
+             335:     80(ptr) AccessChain 13(texel) 294
+                              Store 335 334
+             336:         303 Load 305(is2DArray)
+             337:   49(fvec3) Load 51(c3)
+             338:   31(fvec2) Load 33(c2)
+             339:   31(fvec2) Load 33(c2)
+             340:   10(float) Load 36(lodClamp)
+             341:   16(ivec4) ImageSampleExplicitLod 336 337 Grad ConstOffset MinLod 338 339 310 340
+             342:   16(ivec4) Load 18(itexel)
+             343:   16(ivec4) IAdd 342 341
+                              Store 18(itexel) 343
+             347:      6(int) Load 8(resident)
+             349:   348(bool) ImageSparseTexelsResident 347
+                              SelectionMerge 351 None
+                              BranchConditional 349 350 353
+             350:               Label
+             352:   11(fvec4)   Load 13(texel)
+                                Store 346 352
+                                Branch 351
+             353:               Label
+             354:   16(ivec4)   Load 18(itexel)
+             355:   11(fvec4)   ConvertSToF 354
+             356:   21(ivec4)   Load 23(utexel)
+             357:   11(fvec4)   ConvertUToF 356
+             358:   11(fvec4)   FAdd 355 357
+                                Store 346 358
+                                Branch 351
+             351:             Label
+             359:   11(fvec4) Load 346
+                              Store 345(outColor) 359
+                              Return
+                              FunctionEnd
index f35537c..2014b5b 100644 (file)
@@ -21,6 +21,223 @@ void foo23()
     outp.x += textureProjGradOffset(u2drs, outp, vec2(0.0), vec2(0.0), offsets[1]);\r
 }\r
 \r
+void doubles()\r
+{\r
+    double doublev;\r
+    dvec2 dvec2v;\r
+    dvec3 dvec3v;\r
+    dvec4 dvec4v;\r
+\r
+    bool boolv;\r
+    bvec2 bvec2v;\r
+    bvec3 bvec3v;\r
+    bvec4 bvec4v;\r
+\r
+    doublev = sqrt(2.9);\r
+    dvec2v  = sqrt(dvec2(2.7));\r
+    dvec3v  = sqrt(dvec3(2.0));\r
+    dvec4v  = sqrt(dvec4(doublev));\r
+\r
+    doublev += inversesqrt(doublev);\r
+    dvec2v  += inversesqrt(dvec2v);\r
+    dvec3v  += inversesqrt(dvec3v);\r
+    dvec4v  += inversesqrt(dvec4v);\r
+\r
+    doublev += abs(doublev);\r
+    dvec2v  += abs(dvec2v);\r
+    dvec3v  += abs(dvec3v);\r
+    dvec4v  += abs(dvec4v);\r
+\r
+    doublev += sign(doublev);\r
+    dvec2v  += sign(dvec2v);\r
+    dvec3v  += sign(dvec3v);\r
+    dvec4v  += sign(dvec4v);\r
+\r
+    doublev += floor(doublev);\r
+    dvec2v  += floor(dvec2v);\r
+    dvec3v  += floor(dvec3v);\r
+    dvec4v  += floor(dvec4v);\r
+\r
+    doublev += trunc(doublev);\r
+    dvec2v  += trunc(dvec2v);\r
+    dvec3v  += trunc(dvec3v);\r
+    dvec4v  += trunc(dvec4v);\r
+\r
+    doublev += round(doublev);\r
+    dvec2v  += round(dvec2v);\r
+    dvec3v  += round(dvec3v);\r
+    dvec4v  += round(dvec4v);\r
+\r
+    doublev += roundEven(doublev);\r
+    dvec2v  += roundEven(dvec2v);\r
+    dvec3v  += roundEven(dvec3v);\r
+    dvec4v  += roundEven(dvec4v);\r
+\r
+    doublev += ceil(doublev);\r
+    dvec2v  += ceil(dvec2v);\r
+    dvec3v  += ceil(dvec3v);\r
+    dvec4v  += ceil(dvec4v);\r
+\r
+    doublev += fract(doublev);\r
+    dvec2v  += fract(dvec2v);\r
+    dvec3v  += fract(dvec3v);\r
+    dvec4v  += fract(dvec4v);\r
+\r
+    doublev += mod(doublev, doublev);\r
+    dvec2v  += mod(dvec2v, doublev);\r
+    dvec3v  += mod(dvec3v, doublev);\r
+    dvec4v  += mod(dvec4v, doublev);\r
+    dvec2v  += mod(dvec2v, dvec2v);\r
+    dvec3v  += mod(dvec3v, dvec3v);\r
+    dvec4v  += mod(dvec4v, dvec4v);\r
+\r
+    doublev += modf(doublev, doublev);\r
+    dvec2v  += modf(dvec2v,  dvec2v);\r
+    dvec3v  += modf(dvec3v,  dvec3v);\r
+    dvec4v  += modf(dvec4v,  dvec4v);\r
+\r
+    doublev += min(doublev, doublev);\r
+    dvec2v  += min(dvec2v, doublev);\r
+    dvec3v  += min(dvec3v, doublev);\r
+    dvec4v  += min(dvec4v, doublev);\r
+    dvec2v  += min(dvec2v, dvec2v);\r
+    dvec3v  += min(dvec3v, dvec3v);\r
+    dvec4v  += min(dvec4v, dvec4v);\r
+\r
+    doublev += max(doublev, doublev);\r
+    dvec2v  += max(dvec2v, doublev);\r
+    dvec3v  += max(dvec3v, doublev);\r
+    dvec4v  += max(dvec4v, doublev);\r
+    dvec2v  += max(dvec2v, dvec2v);\r
+    dvec3v  += max(dvec3v, dvec3v);\r
+    dvec4v  += max(dvec4v, dvec4v);\r
+\r
+    doublev += clamp(doublev, doublev, doublev);\r
+    dvec2v  += clamp(dvec2v, doublev, doublev);\r
+    dvec3v  += clamp(dvec3v, doublev, doublev);\r
+    dvec4v  += clamp(dvec4v, doublev, doublev);\r
+    dvec2v  += clamp(dvec2v, dvec2v, dvec2v);\r
+    dvec3v  += clamp(dvec3v, dvec3v, dvec3v);\r
+    dvec4v  += clamp(dvec4v, dvec4v, dvec4v);\r
+\r
+    doublev += mix(doublev, doublev, doublev);\r
+    dvec2v  += mix(dvec2v, dvec2v, doublev);\r
+    dvec3v  += mix(dvec3v, dvec3v, doublev);\r
+    dvec4v  += mix(dvec4v, dvec4v, doublev);\r
+    dvec2v  += mix(dvec2v, dvec2v, dvec2v);\r
+    dvec3v  += mix(dvec3v, dvec3v, dvec3v);\r
+    dvec4v  += mix(dvec4v, dvec4v, dvec4v);\r
+    doublev += mix(doublev, doublev, boolv);\r
+    dvec2v  += mix(dvec2v, dvec2v, bvec2v);\r
+    dvec3v  += mix(dvec3v, dvec3v, bvec3v);\r
+    dvec4v  += mix(dvec4v, dvec4v, bvec4v);\r
+\r
+    doublev += step(doublev, doublev);\r
+    dvec2v  += step(dvec2v, dvec2v);\r
+    dvec3v  += step(dvec3v, dvec3v);\r
+    dvec4v  += step(dvec4v, dvec4v);\r
+    dvec2v  += step(doublev, dvec2v);\r
+    dvec3v  += step(doublev, dvec3v);\r
+    dvec4v  += step(doublev, dvec4v);\r
+\r
+    doublev += smoothstep(doublev, doublev, doublev);\r
+    dvec2v  += smoothstep(dvec2v, dvec2v, dvec2v);\r
+    dvec3v  += smoothstep(dvec3v, dvec3v, dvec3v);\r
+    dvec4v  += smoothstep(dvec4v, dvec4v, dvec4v);\r
+    dvec2v  += smoothstep(doublev, doublev, dvec2v);\r
+    dvec3v  += smoothstep(doublev, doublev, dvec3v);\r
+    dvec4v  += smoothstep(doublev, doublev, dvec4v);\r
+\r
+    boolv  = isnan(doublev);\r
+    bvec2v = isnan(dvec2v);\r
+    bvec3v = isnan(dvec3v);\r
+    bvec4v = isnan(dvec4v);\r
+\r
+    boolv  = boolv ? isinf(doublev) : false;\r
+    bvec2v = boolv ? isinf(dvec2v)  : bvec2(false);\r
+    bvec3v = boolv ? isinf(dvec3v)  : bvec3(false);\r
+    bvec4v = boolv ? isinf(dvec4v)  : bvec4(false);\r
+\r
+    doublev += length(doublev);\r
+    doublev += length(dvec2v);\r
+    doublev += length(dvec3v);\r
+    doublev += length(dvec4v);\r
+\r
+    doublev += distance(doublev, doublev);\r
+    doublev += distance(dvec2v, dvec2v);\r
+    doublev += distance(dvec3v, dvec3v);\r
+    doublev += distance(dvec4v, dvec4v);\r
+\r
+    doublev += dot(doublev, doublev);\r
+    doublev += dot(dvec2v, dvec2v);\r
+    doublev += dot(dvec3v, dvec3v);\r
+    doublev += dot(dvec4v, dvec4v);\r
+\r
+    dvec3v += cross(dvec3v, dvec3v);\r
+\r
+    doublev += normalize(doublev);\r
+    dvec2v  += normalize(dvec2v);\r
+    dvec3v  += normalize(dvec3v);\r
+    dvec4v  += normalize(dvec4v);\r
+\r
+    doublev += faceforward(doublev, doublev, doublev);\r
+    dvec2v  += faceforward(dvec2v, dvec2v, dvec2v);\r
+    dvec3v  += faceforward(dvec3v, dvec3v, dvec3v);\r
+    dvec4v  += faceforward(dvec4v, dvec4v, dvec4v);\r
+\r
+    doublev += reflect(doublev, doublev);\r
+    dvec2v  += reflect(dvec2v, dvec2v);\r
+    dvec3v  += reflect(dvec3v, dvec3v);\r
+    dvec4v  += reflect(dvec4v, dvec4v);\r
+\r
+    doublev += refract(doublev, doublev, doublev);\r
+    dvec2v  += refract(dvec2v, dvec2v, doublev);\r
+    dvec3v  += refract(dvec3v, dvec3v, doublev);\r
+    dvec4v  += refract(dvec4v, dvec4v, doublev);\r
+\r
+    dmat2   dmat2v   = outerProduct(dvec2v, dvec2v);\r
+    dmat3   dmat3v   = outerProduct(dvec3v, dvec3v);\r
+    dmat4   dmat4v   = outerProduct(dvec4v, dvec4v);\r
+    dmat2x3 dmat2x3v = outerProduct(dvec3v, dvec2v);\r
+    dmat3x2 dmat3x2v = outerProduct(dvec2v, dvec3v);\r
+    dmat2x4 dmat2x4v = outerProduct(dvec4v, dvec2v);\r
+    dmat4x2 dmat4x2v = outerProduct(dvec2v, dvec4v);\r
+    dmat3x4 dmat3x4v = outerProduct(dvec4v, dvec3v);\r
+    dmat4x3 dmat4x3v = outerProduct(dvec3v, dvec4v);\r
+\r
+    dmat2v *= matrixCompMult(dmat2v, dmat2v);
+    dmat3v *= matrixCompMult(dmat3v, dmat3v);
+    dmat4v *= matrixCompMult(dmat4v, dmat4v);
+    dmat2x3v = matrixCompMult(dmat2x3v, dmat2x3v);  // For now, relying on no dead-code elimination\r
+    dmat2x4v = matrixCompMult(dmat2x4v, dmat2x4v);\r
+    dmat3x2v = matrixCompMult(dmat3x2v, dmat3x2v);\r
+    dmat3x4v = matrixCompMult(dmat3x4v, dmat3x4v);\r
+    dmat4x2v = matrixCompMult(dmat4x2v, dmat4x2v);\r
+    dmat4x3v = matrixCompMult(dmat4x3v, dmat4x3v);\r
+\r
+    dmat2v   *= transpose(dmat2v);\r
+    dmat3v   *= transpose(dmat3v);\r
+    dmat4v   *= transpose(dmat4v);\r
+    dmat2x3v  = transpose(dmat3x2v);  // For now, relying on no dead-code elimination\r
+    dmat3x2v  = transpose(dmat2x3v);\r
+    dmat2x4v  = transpose(dmat4x2v);\r
+    dmat4x2v  = transpose(dmat2x4v);\r
+    dmat3x4v  = transpose(dmat4x3v);\r
+    dmat4x3v  = transpose(dmat3x4v);\r
+\r
+    doublev += determinant(dmat2v);\r
+    doublev += determinant(dmat3v);\r
+    doublev += determinant(dmat4v);\r
+\r
+    dmat2v *= inverse(dmat2v);\r
+    dmat3v *= inverse(dmat3v);\r
+    dmat4v *= inverse(dmat4v);\r
+    \r
+    outp *= float(doublev + dvec2v.y + dvec3v.z + dvec4v.w + \r
+                  dmat2v[1][1] + dmat3v[2][2] + dmat4v[3][3] + dmat2x3v[1][1] + dmat3x2v[1][1] + dmat3x4v[2][2] + dmat4x3v[2][2] + dmat2x4v[1][1] + dmat4x2v[1][1] +\r
+                  float(boolv) + float(bvec2v.x) + float(bvec3v.x) + float(bvec4v.x));\r
+}\r
+\r
 void main()\r
 {\r
     vec4 v;\r
@@ -38,5 +255,6 @@ void main()
 \r
     outp += gl_FragCoord + vl2;\r
     foo23();\r
+    doubles();\r
 }\r
 \r
diff --git a/Test/spv.sparseTexture.frag b/Test/spv.sparseTexture.frag
new file mode 100644 (file)
index 0000000..06c89e5
--- /dev/null
@@ -0,0 +1,80 @@
+#version 450\r
+#extension GL_ARB_sparse_texture2: enable\r
+\r
+uniform sampler2D               s2D;\r
+uniform sampler3D               s3D;\r
+uniform sampler2DShadow         s2DShadow;\r
+uniform samplerCubeShadow       sCubeShadow;\r
+uniform sampler2DArrayShadow    s2DArrayShadow;\r
+uniform sampler2DRectShadow     s2DRectShadow;\r
+uniform samplerCubeArrayShadow  sCubeArrayShadow;\r
+uniform sampler2DMS             s2DMS;\r
+\r
+uniform isamplerCube            isCube;\r
+uniform isampler2DArray         is2DArray;\r
+\r
+uniform usamplerCubeArray       usCubeArray;\r
+uniform usampler2DRect          us2DRect;\r
+\r
+uniform vec2 c2;\r
+uniform vec3 c3;\r
+uniform vec4 c4;\r
+\r
+uniform ivec2 offsets[4];\r
+\r
+out vec4 outColor;\r
+\r
+void main()\r
+{\r
+    int   resident = 0;\r
+    vec4  texel  = vec4(0.0);\r
+    ivec4 itexel = ivec4(0);\r
+    uvec4 utexel = uvec4(0);\r
+\r
+    resident |= sparseTextureARB(s2D, c2, texel);\r
+    resident |= sparseTextureARB(s3D, c3, texel, 2.0);\r
+    resident |= sparseTextureARB(isCube, c3, itexel);\r
+    resident |= sparseTextureARB(s2DShadow, c3, texel.x);\r
+    resident |= sparseTextureARB(sCubeArrayShadow, c4, 1.0, texel.x);\r
+\r
+    resident |= sparseTextureLodARB(s2D, c2, 2.0, texel);\r
+    resident |= sparseTextureLodARB(usCubeArray, c4, 1.0, utexel);\r
+    resident |= sparseTextureLodARB(s2DShadow, c3, 2.0, texel.y);\r
+\r
+    resident |= sparseTextureOffsetARB(s3D, c3, ivec3(2), texel, 2.0);\r
+    resident |= sparseTextureOffsetARB(us2DRect, c2, ivec2(3), utexel);\r
+    resident |= sparseTextureOffsetARB(s2DArrayShadow, c4, ivec2(5), texel.z);\r
+\r
+    resident |= sparseTexelFetchARB(s2D, ivec2(c2), 2, texel);\r
+    resident |= sparseTexelFetchARB(us2DRect, ivec2(c2), utexel);\r
+    resident |= sparseTexelFetchARB(s2DMS, ivec2(c2), 4, texel);\r
+\r
+    resident |= sparseTexelFetchOffsetARB(s3D, ivec3(c3), 2, ivec3(4), texel);\r
+    resident |= sparseTexelFetchOffsetARB(us2DRect, ivec2(c2), ivec2(3), utexel);\r
+\r
+    resident |= sparseTextureLodOffsetARB(s2D, c2, 2.0, ivec2(5), texel);\r
+    resident |= sparseTextureLodOffsetARB(is2DArray, c3, 2.0, ivec2(6), itexel);\r
+    resident |= sparseTextureLodOffsetARB(s2DShadow, c3, 2.0, ivec2(7), texel.z);\r
+\r
+    resident |= sparseTextureGradARB(s3D, c3, c3, c3, texel);\r
+    resident |= sparseTextureGradARB(sCubeShadow, c4, c3, c3, texel.y);\r
+    resident |= sparseTextureGradARB(usCubeArray, c4, c3, c3, utexel);\r
+\r
+    resident |= sparseTextureGradOffsetARB(s2D, c2, c2, c2, ivec2(5), texel);\r
+    resident |= sparseTextureGradOffsetARB(s2DRectShadow, c3, c2, c2, ivec2(6), texel.w);\r
+    resident |= sparseTextureGradOffsetARB(is2DArray, c3, c2, c2, ivec2(2), itexel);\r
+\r
+    resident |= sparseTextureGatherARB(s2D, c2, texel);\r
+    resident |= sparseTextureGatherARB(is2DArray, c3, itexel, 2);\r
+    resident |= sparseTextureGatherARB(s2DArrayShadow, c3, 2.0, texel);\r
+\r
+    resident |= sparseTextureGatherOffsetARB(s2D, c2, ivec2(4), texel);\r
+    resident |= sparseTextureGatherOffsetARB(is2DArray, c3, ivec2(5), itexel, 2);\r
+    resident |= sparseTextureGatherOffsetARB(s2DRectShadow, c2, 2.0, ivec2(7), texel); \r
+\r
+    resident |= sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel);\r
+    resident |= sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2);\r
+    resident |= sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel); \r
+\r
+    outColor = sparseTexelsResidentARB(resident) ? texel : vec4(itexel) + vec4(utexel);\r
+}
\ No newline at end of file
diff --git a/Test/spv.sparseTextureClamp.frag b/Test/spv.sparseTextureClamp.frag
new file mode 100644 (file)
index 0000000..848d377
--- /dev/null
@@ -0,0 +1,70 @@
+#version 450\r
+#extension GL_ARB_sparse_texture_clamp: enable\r
+\r
+uniform sampler2D               s2D;\r
+uniform sampler3D               s3D;\r
+uniform sampler2DShadow         s2DShadow;\r
+uniform samplerCubeShadow       sCubeShadow;\r
+uniform sampler2DArrayShadow    s2DArrayShadow;\r
+uniform sampler2DRectShadow     s2DRectShadow;\r
+uniform samplerCubeArrayShadow  sCubeArrayShadow;\r
+\r
+uniform isamplerCube            isCube;\r
+uniform isampler2DArray         is2DArray;\r
+\r
+uniform usamplerCubeArray       usCubeArray;\r
+uniform usampler2DRect          us2DRect;\r
+\r
+uniform vec2 c2;\r
+uniform vec3 c3;\r
+uniform vec4 c4;\r
+\r
+uniform float lodClamp;\r
+\r
+out vec4 outColor;\r
+\r
+void main()\r
+{\r
+    int   resident = 0;\r
+    vec4  texel  = vec4(0.0);\r
+    ivec4 itexel = ivec4(0);\r
+    uvec4 utexel = uvec4(0);\r
+\r
+    resident |= sparseTextureClampARB(s2D, c2, lodClamp, texel);\r
+    resident |= sparseTextureClampARB(s3D, c3, lodClamp, texel, 2.0);\r
+    resident |= sparseTextureClampARB(isCube, c3, lodClamp, itexel);\r
+    resident |= sparseTextureClampARB(s2DShadow, c3, lodClamp, texel.x);\r
+    resident |= sparseTextureClampARB(sCubeArrayShadow, c4, 1.0, lodClamp, texel.x);\r
+\r
+    texel   += textureClampARB(s2D, c2, lodClamp);\r
+    texel   += textureClampARB(s3D, c3, lodClamp, 2.0);\r
+    itexel  += textureClampARB(isCube, c3, lodClamp);\r
+    texel.x += textureClampARB(s2DShadow, c3, lodClamp);\r
+    texel.x += textureClampARB(sCubeArrayShadow, c4, 1.0, lodClamp);\r
+\r
+    resident |= sparseTextureOffsetClampARB(s3D, c3, ivec3(2), lodClamp, texel, 2.0);\r
+    resident |= sparseTextureOffsetClampARB(us2DRect, c2, ivec2(3), lodClamp, utexel);\r
+    resident |= sparseTextureOffsetClampARB(s2DArrayShadow, c4, ivec2(5), lodClamp, texel.z);\r
+\r
+    texel   += textureOffsetClampARB(s3D, c3, ivec3(2), lodClamp, 2.0);\r
+    utexel  += textureOffsetClampARB(us2DRect, c2, ivec2(3), lodClamp);\r
+    texel.z += textureOffsetClampARB(s2DArrayShadow, c4, ivec2(5), lodClamp);\r
+\r
+    resident |= sparseTextureGradClampARB(s3D, c3, c3, c3, lodClamp, texel);\r
+    resident |= sparseTextureGradClampARB(sCubeShadow, c4, c3, c3, lodClamp, texel.y);\r
+    resident |= sparseTextureGradClampARB(usCubeArray, c4, c3, c3, lodClamp, utexel);\r
+\r
+    texel   += textureGradClampARB(s3D, c3, c3, c3, lodClamp);\r
+    texel.y += textureGradClampARB(sCubeShadow, c4, c3, c3, lodClamp);\r
+    utexel  += textureGradClampARB(usCubeArray, c4, c3, c3, lodClamp);\r
+\r
+    resident |= sparseTextureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp, texel);\r
+    resident |= sparseTextureGradOffsetClampARB(s2DRectShadow, c3, c2, c2, ivec2(6), lodClamp, texel.w);\r
+    resident |= sparseTextureGradOffsetClampARB(is2DArray, c3, c2, c2, ivec2(2), lodClamp, itexel);\r
+\r
+    texel   += textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp);\r
+    texel.w += textureGradOffsetClampARB(s2DRectShadow, c3, c2, c2, ivec2(6), lodClamp);\r
+    itexel  += textureGradOffsetClampARB(is2DArray, c3, c2, c2, ivec2(2), lodClamp);\r
+\r
+    outColor = sparseTexelsResidentARB(resident) ? texel : vec4(itexel) + vec4(utexel);\r
+}
\ No newline at end of file
index 799148d..af96262 100644 (file)
@@ -66,6 +66,8 @@ spv.qualifiers.vert
 spv.shiftOps.frag
 spv.simpleFunctionCall.frag
 spv.simpleMat.vert
+spv.sparseTexture.frag
+spv.sparseTextureClamp.frag
 spv.structAssignment.frag
 spv.structDeref.frag
 spv.structure.frag
index ebd4439..20d7323 100644 (file)
@@ -369,6 +369,8 @@ enum TOperator {
     EOpImageAtomicExchange,
     EOpImageAtomicCompSwap,
 
+    EOpSparseImageLoad,
+
     EOpImageGuardEnd,
 
     //
@@ -398,6 +400,31 @@ enum TOperator {
     EOpTextureGather,
     EOpTextureGatherOffset,
     EOpTextureGatherOffsets,
+    EOpTextureClamp,
+    EOpTextureOffsetClamp,
+    EOpTextureGradClamp,
+    EOpTextureGradOffsetClamp,
+
+    EOpSparseTextureGuardBegin,
+
+    EOpSparseTexture,
+    EOpSparseTextureLod,
+    EOpSparseTextureOffset,
+    EOpSparseTextureFetch,
+    EOpSparseTextureFetchOffset,
+    EOpSparseTextureLodOffset,
+    EOpSparseTextureGrad,
+    EOpSparseTextureGradOffset,
+    EOpSparseTextureGather,
+    EOpSparseTextureGatherOffset,
+    EOpSparseTextureGatherOffsets,
+    EOpSparseTexelsResident,
+    EOpSparseTextureClamp,
+    EOpSparseTextureOffsetClamp,
+    EOpSparseTextureGradClamp,
+    EOpSparseTextureGradOffsetClamp,
+
+    EOpSparseTextureGuardEnd,
 
     EOpTextureGuardEnd,
 
@@ -622,6 +649,7 @@ struct TCrackedTextureOp {
     bool offsets;
     bool gather;
     bool grad;
+    bool lodClamp;
 };
 
 //
@@ -637,6 +665,8 @@ public:
     bool isConstructor() const;
     bool isTexture() const { return op > EOpTextureGuardBegin && op < EOpTextureGuardEnd; }
     bool isImage()   const { return op > EOpImageGuardBegin   && op < EOpImageGuardEnd; }
+    bool isSparseTexture() const { return op > EOpSparseTextureGuardBegin && op < EOpSparseTextureGuardEnd; }
+    bool isSparseImage()   const { return op == EOpSparseImageLoad; }
 
     // Crack the op into the individual dimensions of texturing operation.
     void crackTexture(TSampler sampler, TCrackedTextureOp& cracked) const
@@ -649,6 +679,7 @@ public:
         cracked.offsets = false;
         cracked.gather = false;
         cracked.grad = false;
+        cracked.lodClamp = false;
 
         switch (op) {
         case EOpImageQuerySize:
@@ -657,25 +688,40 @@ public:
         case EOpTextureQueryLod:
         case EOpTextureQueryLevels:
         case EOpTextureQuerySamples:
+        case EOpSparseTexelsResident:
             cracked.query = true;
             break;
         case EOpTexture:
+        case EOpSparseTexture:
+            break;
+        case EOpTextureClamp:
+        case EOpSparseTextureClamp:
+            cracked.lodClamp = true;
             break;
         case EOpTextureProj:
             cracked.proj = true;
             break;
         case EOpTextureLod:
+        case EOpSparseTextureLod:
             cracked.lod = true;
             break;
         case EOpTextureOffset:
+        case EOpSparseTextureOffset:
             cracked.offset = true;
             break;
+        case EOpTextureOffsetClamp:
+        case EOpSparseTextureOffsetClamp:
+            cracked.offset = true;
+            cracked.lodClamp = true;
+            break;
         case EOpTextureFetch:
+        case EOpSparseTextureFetch:
             cracked.fetch = true;
             if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D)
                 cracked.lod = true;
             break;
         case EOpTextureFetchOffset:
+        case EOpSparseTextureFetchOffset:
             cracked.fetch = true;
             cracked.offset = true;
             if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D)
@@ -686,6 +732,7 @@ public:
             cracked.proj = true;
             break;
         case EOpTextureLodOffset:
+        case EOpSparseTextureLodOffset:
             cracked.offset = true;
             cracked.lod = true;
             break;
@@ -699,9 +746,16 @@ public:
             cracked.proj = true;
             break;
         case EOpTextureGrad:
+        case EOpSparseTextureGrad:
             cracked.grad = true;
             break;
+        case EOpTextureGradClamp:
+        case EOpSparseTextureGradClamp:
+            cracked.grad = true;
+            cracked.lodClamp = true;
+            break;
         case EOpTextureGradOffset:
+        case EOpSparseTextureGradOffset:
             cracked.grad = true;
             cracked.offset = true;
             break;
@@ -714,14 +768,23 @@ public:
             cracked.offset = true;
             cracked.proj = true;
             break;
+        case EOpTextureGradOffsetClamp:
+        case EOpSparseTextureGradOffsetClamp:
+            cracked.grad = true;
+            cracked.offset = true;
+            cracked.lodClamp = true;
+            break;
         case EOpTextureGather:
+        case EOpSparseTextureGather:
             cracked.gather = true;
             break;
         case EOpTextureGatherOffset:
+        case EOpSparseTextureGatherOffset:
             cracked.gather = true;
             cracked.offset = true;
             break;
         case EOpTextureGatherOffsets:
+        case EOpSparseTextureGatherOffsets:
             cracked.gather = true;
             cracked.offsets = true;
             break;
index c852d3c..089751b 100644 (file)
@@ -419,6 +419,214 @@ void TBuiltIns::initialize(int version, EProfile profile, int spv)
             "\n");
     }
 
+    //
+    // double functions added to desktop 4.00, but not fma, frexp, ldexp, or pack/unpack
+    //
+    if (profile != EEsProfile && version >= 400) {
+        commonBuiltins.append(
+
+            "double sqrt(double);"
+            "dvec2  sqrt(dvec2);"
+            "dvec3  sqrt(dvec3);"
+            "dvec4  sqrt(dvec4);"
+
+            "double inversesqrt(double);"
+            "dvec2  inversesqrt(dvec2);"
+            "dvec3  inversesqrt(dvec3);"
+            "dvec4  inversesqrt(dvec4);"
+
+            "double abs(double);"
+            "dvec2  abs(dvec2);"
+            "dvec3  abs(dvec3);"
+            "dvec4  abs(dvec4);"
+
+            "double sign(double);"
+            "dvec2  sign(dvec2);"
+            "dvec3  sign(dvec3);"
+            "dvec4  sign(dvec4);"
+
+            "double floor(double);"
+            "dvec2  floor(dvec2);"
+            "dvec3  floor(dvec3);"
+            "dvec4  floor(dvec4);"
+
+            "double trunc(double);"
+            "dvec2  trunc(dvec2);"
+            "dvec3  trunc(dvec3);"
+            "dvec4  trunc(dvec4);"
+
+            "double round(double);"
+            "dvec2  round(dvec2);"
+            "dvec3  round(dvec3);"
+            "dvec4  round(dvec4);"
+
+            "double roundEven(double);"
+            "dvec2  roundEven(dvec2);"
+            "dvec3  roundEven(dvec3);"
+            "dvec4  roundEven(dvec4);"
+
+            "double ceil(double);"
+            "dvec2  ceil(dvec2);"
+            "dvec3  ceil(dvec3);"
+            "dvec4  ceil(dvec4);"
+
+            "double fract(double);"
+            "dvec2  fract(dvec2);"
+            "dvec3  fract(dvec3);"
+            "dvec4  fract(dvec4);"
+
+            "double mod(double, double);"
+            "dvec2  mod(dvec2 , double);"
+            "dvec3  mod(dvec3 , double);"
+            "dvec4  mod(dvec4 , double);"
+            "dvec2  mod(dvec2 , dvec2);"
+            "dvec3  mod(dvec3 , dvec3);"
+            "dvec4  mod(dvec4 , dvec4);"
+
+            "double modf(double, out double);"
+            "dvec2  modf(dvec2,  out dvec2);"
+            "dvec3  modf(dvec3,  out dvec3);"
+            "dvec4  modf(dvec4,  out dvec4);"
+
+            "double min(double, double);"
+            "dvec2  min(dvec2,  double);"
+            "dvec3  min(dvec3,  double);"
+            "dvec4  min(dvec4,  double);"
+            "dvec2  min(dvec2,  dvec2);"
+            "dvec3  min(dvec3,  dvec3);"
+            "dvec4  min(dvec4,  dvec4);"
+
+            "double max(double, double);"
+            "dvec2  max(dvec2 , double);"
+            "dvec3  max(dvec3 , double);"
+            "dvec4  max(dvec4 , double);"
+            "dvec2  max(dvec2 , dvec2);"
+            "dvec3  max(dvec3 , dvec3);"
+            "dvec4  max(dvec4 , dvec4);"
+
+            "double clamp(double, double, double);"
+            "dvec2  clamp(dvec2 , double, double);"
+            "dvec3  clamp(dvec3 , double, double);"
+            "dvec4  clamp(dvec4 , double, double);"
+            "dvec2  clamp(dvec2 , dvec2 , dvec2);"
+            "dvec3  clamp(dvec3 , dvec3 , dvec3);"
+            "dvec4  clamp(dvec4 , dvec4 , dvec4);"
+
+            "double mix(double, double, double);"
+            "dvec2  mix(dvec2,  dvec2,  double);"
+            "dvec3  mix(dvec3,  dvec3,  double);"
+            "dvec4  mix(dvec4,  dvec4,  double);"
+            "dvec2  mix(dvec2,  dvec2,  dvec2);"
+            "dvec3  mix(dvec3,  dvec3,  dvec3);"
+            "dvec4  mix(dvec4,  dvec4,  dvec4);"
+            "double mix(double, double, bool);"
+            "dvec2  mix(dvec2,  dvec2,  bvec2);"
+            "dvec3  mix(dvec3,  dvec3,  bvec3);"
+            "dvec4  mix(dvec4,  dvec4,  bvec4);"
+
+            "double step(double, double);"
+            "dvec2  step(dvec2 , dvec2);"
+            "dvec3  step(dvec3 , dvec3);"
+            "dvec4  step(dvec4 , dvec4);"
+            "dvec2  step(double, dvec2);"
+            "dvec3  step(double, dvec3);"
+            "dvec4  step(double, dvec4);"
+
+            "double smoothstep(double, double, double);"
+            "dvec2  smoothstep(dvec2 , dvec2 , dvec2);"
+            "dvec3  smoothstep(dvec3 , dvec3 , dvec3);"
+            "dvec4  smoothstep(dvec4 , dvec4 , dvec4);"
+            "dvec2  smoothstep(double, double, dvec2);"
+            "dvec3  smoothstep(double, double, dvec3);"
+            "dvec4  smoothstep(double, double, dvec4);"
+
+            "bool  isnan(double);"
+            "bvec2 isnan(dvec2);"
+            "bvec3 isnan(dvec3);"
+            "bvec4 isnan(dvec4);"
+
+            "bool  isinf(double);"
+            "bvec2 isinf(dvec2);"
+            "bvec3 isinf(dvec3);"
+            "bvec4 isinf(dvec4);"
+
+            "double length(double);"
+            "double length(dvec2);"
+            "double length(dvec3);"
+            "double length(dvec4);"
+
+            "double distance(double, double);"
+            "double distance(dvec2 , dvec2);"
+            "double distance(dvec3 , dvec3);"
+            "double distance(dvec4 , dvec4);"
+
+            "double dot(double, double);"
+            "double dot(dvec2 , dvec2);"
+            "double dot(dvec3 , dvec3);"
+            "double dot(dvec4 , dvec4);"
+
+            "dvec3 cross(dvec3, dvec3);"
+
+            "double normalize(double);"
+            "dvec2  normalize(dvec2);"
+            "dvec3  normalize(dvec3);"
+            "dvec4  normalize(dvec4);"
+
+            "double faceforward(double, double, double);"
+            "dvec2  faceforward(dvec2,  dvec2,  dvec2);"
+            "dvec3  faceforward(dvec3,  dvec3,  dvec3);"
+            "dvec4  faceforward(dvec4,  dvec4,  dvec4);"
+                 
+            "double reflect(double, double);"
+            "dvec2  reflect(dvec2 , dvec2 );"
+            "dvec3  reflect(dvec3 , dvec3 );"
+            "dvec4  reflect(dvec4 , dvec4 );"
+                 
+            "double refract(double, double, double);"
+            "dvec2  refract(dvec2 , dvec2 , double);"
+            "dvec3  refract(dvec3 , dvec3 , double);"
+            "dvec4  refract(dvec4 , dvec4 , double);"
+
+            "dmat2 matrixCompMult(dmat2, dmat2);"
+            "dmat3 matrixCompMult(dmat3, dmat3);"
+            "dmat4 matrixCompMult(dmat4, dmat4);"
+            "dmat2x3 matrixCompMult(dmat2x3, dmat2x3);"
+            "dmat2x4 matrixCompMult(dmat2x4, dmat2x4);"
+            "dmat3x2 matrixCompMult(dmat3x2, dmat3x2);"
+            "dmat3x4 matrixCompMult(dmat3x4, dmat3x4);"
+            "dmat4x2 matrixCompMult(dmat4x2, dmat4x2);"
+            "dmat4x3 matrixCompMult(dmat4x3, dmat4x3);"
+
+            "dmat2   outerProduct(dvec2, dvec2);"
+            "dmat3   outerProduct(dvec3, dvec3);"
+            "dmat4   outerProduct(dvec4, dvec4);"
+            "dmat2x3 outerProduct(dvec3, dvec2);"
+            "dmat3x2 outerProduct(dvec2, dvec3);"
+            "dmat2x4 outerProduct(dvec4, dvec2);"
+            "dmat4x2 outerProduct(dvec2, dvec4);"
+            "dmat3x4 outerProduct(dvec4, dvec3);"
+            "dmat4x3 outerProduct(dvec3, dvec4);"
+
+            "dmat2   transpose(dmat2);"
+            "dmat3   transpose(dmat3);"
+            "dmat4   transpose(dmat4);"
+            "dmat2x3 transpose(dmat3x2);"
+            "dmat3x2 transpose(dmat2x3);"
+            "dmat2x4 transpose(dmat4x2);"
+            "dmat4x2 transpose(dmat2x4);"
+            "dmat3x4 transpose(dmat4x3);"
+            "dmat4x3 transpose(dmat3x4);"
+
+            "double determinant(dmat2);"
+            "double determinant(dmat3);"
+            "double determinant(dmat4);"
+
+            "dmat2 inverse(dmat2);"
+            "dmat3 inverse(dmat3);"
+            "dmat4 inverse(dmat4);"
+        );
+    }
+
     if ((profile == EEsProfile && version >= 310) ||
         (profile != EEsProfile && version >= 430)) {
         commonBuiltins.append(
@@ -1956,6 +2164,14 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, i
             }
         }
     }
+
+    //
+    // sparseTexelsResidentARB()
+    //
+
+    if (profile != EEsProfile && version >= 450) {
+        commonBuiltins.append("bool sparseTexelsResidentARB(int code);\n");
+    }
 }
 
 //
@@ -2069,6 +2285,15 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi
     commonBuiltins.append(prefixes[sampler.type]);
     commonBuiltins.append("vec4);\n");
 
+    if (sampler.dim != Esd1D && sampler.dim != EsdBuffer && profile != EEsProfile && version >= 450) {
+        commonBuiltins.append("int sparseImageLoadARB(readonly volatile coherent ");
+        commonBuiltins.append(imageParams);
+        commonBuiltins.append(", out ");
+        commonBuiltins.append(prefixes[sampler.type]);
+        commonBuiltins.append("vec4");
+        commonBuiltins.append(");\n");
+    }
+
     if ( profile != EEsProfile ||
         (profile == EEsProfile && version >= 310)) {
         if (sampler.type == EbtInt || sampler.type == EbtUint) {
@@ -2123,7 +2348,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, TString& typeName, int versi
 //
 // Add all the texture lookup functions for the given type.
 //
-void TBuiltIns::addSamplingFunctions(TSampler sampler, TString& typeName, int /*version*/, EProfile /*profile*/)
+void TBuiltIns::addSamplingFunctions(TSampler sampler, TString& typeName, int version, EProfile profile)
 {
     //
     // texturing
@@ -2196,97 +2421,148 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, TString& typeName, int /*
                                 if (extraProj && (sampler.dim == Esd3D || sampler.shadow))
                                     continue;
 
-                                TString s;
-
-                                // return type
-                                if (sampler.shadow)
-                                    s.append("float ");
-                                else {
-                                    s.append(prefixes[sampler.type]);
-                                    s.append("vec4 ");
-                                }
-
-                                // name
-                                if (fetch)
-                                    s.append("texel");
-                                else
-                                    s.append("texture");
-                                if (proj)
-                                    s.append("Proj");
-                                if (lod)
-                                    s.append("Lod");
-                                if (grad)
-                                    s.append("Grad");
-                                if (fetch)
-                                    s.append("Fetch");
-                                if (offset)
-                                    s.append("Offset");
-                                s.append("(");
-
-                                // sampler type
-                                s.append(typeName);
-
-                                // P coordinate
-                                if (extraProj)
-                                    s.append(",vec4");
-                                else {
-                                    s.append(",");
-                                    TBasicType t = fetch ? EbtInt : EbtFloat;
-                                    if (totalDims == 1)
-                                        s.append(TType::getBasicString(t));
-                                    else {
-                                        s.append(prefixes[t]);
-                                        s.append("vec");
-                                        s.append(postfixes[totalDims]);
+                                for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp) { // loop over "bool" lod clamp
+
+                                    if (lodClamp && (profile == EEsProfile || version < 450))
+                                        continue;
+                                    if (lodClamp && (proj || lod || fetch))
+                                        continue;
+
+                                    for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
+
+                                        if (sparse && (profile == EEsProfile || version < 450))
+                                            continue;
+                                        // Sparse sampling is not for 1D/1D array texture, buffer texture, and projective texture
+                                        if (sparse && (sampler.dim == Esd1D || sampler.dim == EsdBuffer || proj))
+                                            continue;
+
+                                        TString s;
+
+                                        // return type
+                                        if (sparse)
+                                            s.append("int ");
+                                        else {
+                                            if (sampler.shadow)
+                                                s.append("float ");
+                                            else {
+                                                s.append(prefixes[sampler.type]);
+                                                s.append("vec4 ");
+                                            }
+                                        }
+
+                                        // name
+                                        if (sparse) {
+                                            if (fetch)
+                                                s.append("sparseTexel");
+                                            else
+                                                s.append("sparseTexture");
+                                        } else {
+                                            if (fetch)
+                                                s.append("texel");
+                                            else
+                                                s.append("texture");
+                                        }
+                                        if (proj)
+                                            s.append("Proj");
+                                        if (lod)
+                                            s.append("Lod");
+                                        if (grad)
+                                            s.append("Grad");
+                                        if (fetch)
+                                            s.append("Fetch");
+                                        if (offset)
+                                            s.append("Offset");
+                                        if (lodClamp)
+                                            s.append("Clamp");
+                                        if (lodClamp || sparse)
+                                            s.append("ARB");
+                                        s.append("(");
+
+                                        // sampler type
+                                        s.append(typeName);
+
+                                        // P coordinate
+                                        if (extraProj)
+                                            s.append(",vec4");
+                                        else {
+                                            s.append(",");
+                                            TBasicType t = fetch ? EbtInt : EbtFloat;
+                                            if (totalDims == 1)
+                                                s.append(TType::getBasicString(t));
+                                            else {
+                                                s.append(prefixes[t]);
+                                                s.append("vec");
+                                                s.append(postfixes[totalDims]);
+                                            }
+                                        }
+
+                                        if (bias && compare)
+                                            continue;
+
+                                        // non-optional lod argument (lod that's not driven by lod loop) or sample
+                                        if ((fetch && sampler.dim != EsdBuffer && sampler.dim != EsdRect && !sampler.ms) ||
+                                            (sampler.ms && fetch))
+                                            s.append(",int");
+
+                                        // non-optional lod
+                                        if (lod)
+                                            s.append(",float");
+
+                                        // gradient arguments
+                                        if (grad) {
+                                            if (dimMap[sampler.dim] == 1)
+                                                s.append(",float,float");
+                                            else {
+                                                s.append(",vec");
+                                                s.append(postfixes[dimMap[sampler.dim]]);
+                                                s.append(",vec");
+                                                s.append(postfixes[dimMap[sampler.dim]]);
+                                            }
+                                        }
+
+                                        // offset
+                                        if (offset) {
+                                            if (dimMap[sampler.dim] == 1)
+                                                s.append(",int");
+                                            else {
+                                                s.append(",ivec");
+                                                s.append(postfixes[dimMap[sampler.dim]]);
+                                            }
+                                        }
+
+                                        // non-optional compare
+                                        if (compare)
+                                            s.append(",float");
+
+                                        // lod clamp
+                                        if (lodClamp)
+                                            s.append(",float");
+
+                                        // texel out (for sparse texture)
+                                        if (sparse) {
+                                            s.append(",out ");
+                                            if (sampler.shadow)
+                                                s.append("float ");
+                                            else {
+                                                s.append(prefixes[sampler.type]);
+                                                s.append("vec4 ");
+                                            }
+                                        }
+
+                                        // optional bias
+                                        if (bias)
+                                            s.append(",float");
+
+                                        s.append(");\n");
+
+                                        // Add to the per-language set of built-ins
+
+                                        if (bias)
+                                            stageBuiltins[EShLangFragment].append(s);
+                                        else
+                                            commonBuiltins.append(s);
                                     }
                                 }
-
-                                if (bias && compare)
-                                    continue;
-
-                                // non-optional lod argument (lod that's not driven by lod loop) or sample
-                                if ((fetch && sampler.dim != EsdBuffer && sampler.dim != EsdRect && !sampler.ms) ||
-                                    (sampler.ms && fetch))
-                                    s.append(",int");
-
-                                // non-optional lod
-                                if (lod)
-                                    s.append(",float");
-
-                                // gradient arguments
-                                if (grad) {
-                                    if (dimMap[sampler.dim] == 1)
-                                        s.append(",float,float");
-                                    else {
-                                        s.append(",vec");
-                                        s.append(postfixes[dimMap[sampler.dim]]);
-                                        s.append(",vec");
-                                        s.append(postfixes[dimMap[sampler.dim]]);
-                                    }
-                                }
-
-                                // offset
-                                if (offset) {
-                                    if (dimMap[sampler.dim] == 1)
-                                        s.append(",int");
-                                    else {
-                                        s.append(",ivec");
-                                        s.append(postfixes[dimMap[sampler.dim]]);
-                                    }
-                                }
-
-                                // optional bias or non-optional compare
-                                if (bias || compare)
-                                    s.append(",float");
-
-                                s.append(");\n");
-
-                                // Add to the per-language set of built-ins
-
-                                if (bias)
-                                    stageBuiltins[EShLangFragment].append(s);
-                                else
-                                    commonBuiltins.append(s);
                             }
                         }
                     }
@@ -2303,7 +2579,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, TString& typeName, int /*
 //
 // Add all the texture gather functions for the given type.
 //
-void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int version, EProfile /* profile */)
+void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int version, EProfile profile)
 {
     switch (sampler.dim) {
     case Esd2D:
@@ -2330,51 +2606,71 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, TString& typeName, int vers
             if (offset > 0 && sampler.dim == EsdCube)
                 continue;
 
-            TString s;
-
-            // return type
-            s.append(prefixes[sampler.type]);
-            s.append("vec4 ");
-
-            // name
-            s.append("textureGather");
-            switch (offset) {
-            case 1:
-                s.append("Offset");
-                break;
-            case 2:
-                s.append("Offsets");
-            default:
-                break;
-            }
-            s.append("(");
+            for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
+                if (sparse && (profile == EEsProfile || version < 450))
+                    continue;
 
-            // sampler type argument
-            s.append(typeName);
+                TString s;
 
-            // P coordinate argument
-            s.append(",vec");
-            int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
-            s.append(postfixes[totalDims]);
+                // return type
+                if (sparse)
+                    s.append("int ");
+                else {
+                    s.append(prefixes[sampler.type]);
+                    s.append("vec4 ");
+                }
 
-            // refZ argument
-            if (sampler.shadow)
-                s.append(",float");
+                // name
+                if (sparse)
+                    s.append("sparseTextureGather");
+                else
+                    s.append("textureGather");
+                switch (offset) {
+                case 1:
+                    s.append("Offset");
+                    break;
+                case 2:
+                    s.append("Offsets");
+                default:
+                    break;
+                }
+                if (sparse)
+                    s.append("ARB");
+                s.append("(");
+
+                // sampler type argument
+                s.append(typeName);
+
+                // P coordinate argument
+                s.append(",vec");
+                int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
+                s.append(postfixes[totalDims]);
+
+                // refZ argument
+                if (sampler.shadow)
+                    s.append(",float");
+
+                // offset argument
+                if (offset > 0) {
+                    s.append(",ivec2");
+                    if (offset == 2)
+                        s.append("[4]");
+                }
 
-            // offset argument
-            if (offset > 0) {
-                s.append(",ivec2");
-                if (offset == 2)
-                    s.append("[4]");
-            }
+                // texel out (for sparse texture)
+                if (sparse) {
+                    s.append(",out ");
+                    s.append(prefixes[sampler.type]);
+                    s.append("vec4 ");
+                }
 
-            // comp argument
-            if (comp)
-                s.append(",int");
+                // comp argument
+                if (comp)
+                    s.append(",int");
 
-            s.append(");\n");
-            commonBuiltins.append(s);
-            //printf("%s", s.c_str());
+                s.append(");\n");
+                commonBuiltins.append(s);
+            }
         }
     }
 }
@@ -3164,6 +3460,37 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, EShLanguage langua
             symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_ARB_derivative_control);
         }
 
+        // E_GL_ARB_sparse_texture2
+        if (profile != EEsProfile)
+        {
+            symbolTable.setFunctionExtensions("sparseTextureARB",              1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTextureLodARB",           1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTextureOffsetARB",        1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTexelFetchARB",           1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTexelFetchOffsetARB",     1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTextureLodOffsetARB",     1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTextureGradARB",          1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTextureGradOffsetARB",    1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTextureGatherARB",        1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTextureGatherOffsetARB",  1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTextureGatherOffsetsARB", 1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseImageLoadARB",            1, &E_GL_ARB_sparse_texture2);
+            symbolTable.setFunctionExtensions("sparseTexelsResident",          1, &E_GL_ARB_sparse_texture2);
+        }
+
+        // E_GL_ARB_sparse_texture_clamp
+        if (profile != EEsProfile)
+        {
+            symbolTable.setFunctionExtensions("sparseTextureClampARB",              1, &E_GL_ARB_sparse_texture_clamp);
+            symbolTable.setFunctionExtensions("sparseTextureOffsetClampARB",        1, &E_GL_ARB_sparse_texture_clamp);
+            symbolTable.setFunctionExtensions("sparseTextureGradClampARB",          1, &E_GL_ARB_sparse_texture_clamp);
+            symbolTable.setFunctionExtensions("sparseTextureGradOffsetClampARB",    1, &E_GL_ARB_sparse_texture_clamp);
+            symbolTable.setFunctionExtensions("textureClampARB",                    1, &E_GL_ARB_sparse_texture_clamp);
+            symbolTable.setFunctionExtensions("textureOffsetClampARB",              1, &E_GL_ARB_sparse_texture_clamp);
+            symbolTable.setFunctionExtensions("textureGradClampARB",                1, &E_GL_ARB_sparse_texture_clamp);
+            symbolTable.setFunctionExtensions("textureGradOffsetClampARB",          1, &E_GL_ARB_sparse_texture_clamp);
+        }
+
         symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
 
         if (profile == EEsProfile) {
@@ -3423,6 +3750,32 @@ void IdentifyBuiltIns(int version, EProfile profile, int spv, EShLanguage langua
             symbolTable.relateToOperator("shadow1DProjLod",          EOpTextureProjLod);
             symbolTable.relateToOperator("shadow2DProjLod",          EOpTextureProjLod);
         }
+
+        if (profile != EEsProfile)
+        {
+            symbolTable.relateToOperator("sparseTextureARB",                EOpSparseTexture);
+            symbolTable.relateToOperator("sparseTextureLodARB",             EOpSparseTextureLod);
+            symbolTable.relateToOperator("sparseTextureOffsetARB",          EOpSparseTextureOffset);
+            symbolTable.relateToOperator("sparseTexelFetchARB",             EOpSparseTextureFetch);
+            symbolTable.relateToOperator("sparseTexelFetchOffsetARB",       EOpSparseTextureFetchOffset);
+            symbolTable.relateToOperator("sparseTextureLodOffsetARB",       EOpSparseTextureLodOffset);
+            symbolTable.relateToOperator("sparseTextureGradARB",            EOpSparseTextureGrad);
+            symbolTable.relateToOperator("sparseTextureGradOffsetARB",      EOpSparseTextureGradOffset);
+            symbolTable.relateToOperator("sparseTextureGatherARB",          EOpSparseTextureGather);
+            symbolTable.relateToOperator("sparseTextureGatherOffsetARB",    EOpSparseTextureGatherOffset);
+            symbolTable.relateToOperator("sparseTextureGatherOffsetsARB",   EOpSparseTextureGatherOffsets);
+            symbolTable.relateToOperator("sparseImageLoadARB",              EOpSparseImageLoad);
+            symbolTable.relateToOperator("sparseTexelsResidentARB",         EOpSparseTexelsResident);
+
+            symbolTable.relateToOperator("sparseTextureClampARB",           EOpSparseTextureClamp);
+            symbolTable.relateToOperator("sparseTextureOffsetClampARB",     EOpSparseTextureOffsetClamp);
+            symbolTable.relateToOperator("sparseTextureGradClampARB",       EOpSparseTextureGradClamp);
+            symbolTable.relateToOperator("sparseTextureGradOffsetClampARB", EOpSparseTextureGradOffsetClamp);
+            symbolTable.relateToOperator("textureClampARB",                 EOpTextureClamp);
+            symbolTable.relateToOperator("textureOffsetClampARB",           EOpTextureOffsetClamp);
+            symbolTable.relateToOperator("textureGradClampARB",             EOpTextureGradClamp);
+            symbolTable.relateToOperator("textureGradOffsetClampARB",       EOpTextureGradOffsetClamp);
+        }
     }
 
     switch(language) {
index 8953498..fb11f1b 100644 (file)
@@ -173,6 +173,8 @@ void TParseContext::initializeExtensionBehavior()
     extensionBehavior[E_GL_ARB_derivative_control]           = EBhDisable;
     extensionBehavior[E_GL_ARB_shader_texture_image_samples] = EBhDisable;
     extensionBehavior[E_GL_ARB_viewport_array]               = EBhDisable;
+    extensionBehavior[E_GL_ARB_sparse_texture2]              = EBhDisable;
+    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
 
     // #line and #include
@@ -274,6 +276,8 @@ const char* TParseContext::getPreamble()
             "#define GL_ARB_derivative_control 1\n"
             "#define GL_ARB_shader_texture_image_samples 1\n"
             "#define GL_ARB_viewport_array 1\n"
+            "#define GL_ARB_sparse_texture2 1\n"
+            "#define GL_ARB_sparse_texture_clamp 1\n"
 
             "#define GL_GOOGLE_cpp_style_line_directive 1\n"
             "#define GL_GOOGLE_include_directive 1\n"
index a30ea7a..0d79fab 100644 (file)
@@ -111,6 +111,8 @@ const char* const E_GL_ARB_shader_draw_parameters       = "GL_ARB_shader_draw_pa
 const char* const E_GL_ARB_derivative_control           = "GL_ARB_derivative_control";
 const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture_image_samples";
 const char* const E_GL_ARB_viewport_array               = "GL_ARB_viewport_array";
+const char* const E_GL_ARB_sparse_texture2              = "GL_ARB_sparse_texture2";
+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
 
 // #line and #include
index b5ce18c..56dbf79 100644 (file)
@@ -147,6 +147,8 @@ void OS_Sleep(int milliseconds)
     Sleep(milliseconds);
 }
 
+//#define DUMP_COUNTERS
+
 void OS_DumpMemoryCounters()
 {
 #ifdef DUMP_COUNTERS