SPV: Add a switch for favoring non-NaN operands in min, max, and clamp.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 9ad19b5..3633c5b 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -224,6 +224,7 @@
     bool linkageOnly;                  // true when visiting the set of objects in the AST present only for establishing interface, whether or not they were statically used
     std::set<spv::Id> iOSet;           // all input/output variables from either static use or declaration of interface
     const glslang::TIntermediate* glslangIntermediate;
+    bool nanMinMaxClamp;               // true if use NMin/NMax/NClamp instead of FMin/FMax/FClamp
     spv::Id stdBuiltins;
     std::unordered_map<const char*, spv::Id> extBuiltinMap;
 
@@ -1313,7 +1314,8 @@
       sequenceDepth(0), logger(buildLogger),
       builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger),
       inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
-      glslangIntermediate(glslangIntermediate)
+      glslangIntermediate(glslangIntermediate),
+      nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp())
 {
     spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
 
@@ -6997,7 +6999,7 @@
     switch (op) {
     case glslang::EOpMin:
         if (isFloat)
-            libCall = spv::GLSLstd450FMin;
+            libCall = nanMinMaxClamp ? spv::GLSLstd450NMin : spv::GLSLstd450FMin;
         else if (isUnsigned)
             libCall = spv::GLSLstd450UMin;
         else
@@ -7009,7 +7011,7 @@
         break;
     case glslang::EOpMax:
         if (isFloat)
-            libCall = spv::GLSLstd450FMax;
+            libCall = nanMinMaxClamp ? spv::GLSLstd450NMax : spv::GLSLstd450FMax;
         else if (isUnsigned)
             libCall = spv::GLSLstd450UMax;
         else
@@ -7028,7 +7030,7 @@
 
     case glslang::EOpClamp:
         if (isFloat)
-            libCall = spv::GLSLstd450FClamp;
+            libCall = nanMinMaxClamp ? spv::GLSLstd450NClamp : spv::GLSLstd450FClamp;
         else if (isUnsigned)
             libCall = spv::GLSLstd450UClamp;
         else
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index 302f212..3269f97 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -648,6 +648,9 @@
     names[GLSLstd450InterpolateAtCentroid]   = "InterpolateAtCentroid";
     names[GLSLstd450InterpolateAtSample]     = "InterpolateAtSample";
     names[GLSLstd450InterpolateAtOffset]     = "InterpolateAtOffset";
+    names[GLSLstd450NMin]                    = "NMin";
+    names[GLSLstd450NMax]                    = "NMax";
+    names[GLSLstd450NClamp]                  = "NClamp";
 }
 
 #ifdef AMD_EXTENSIONS
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index b7c4387..9af2596 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -104,6 +104,7 @@
 bool targetHlslFunctionality1 = false;
 bool SpvToolsDisassembler = false;
 bool SpvToolsValidate = false;
+bool NaNClamp = false;
 
 //
 // Return codes from main/exit().
@@ -522,6 +523,8 @@
                     } else if (lowerword == "keep-uncalled" || // synonyms
                                lowerword == "ku") {
                         Options |= EOptionKeepUncalled;
+                    } else if (lowerword == "nan-clamp") {
+                        NaNClamp = true;
                     } else if (lowerword == "no-storage-format" || // synonyms
                                lowerword == "nsf") {
                         Options |= EOptionNoStorageFormat;
@@ -981,6 +984,7 @@
 
         shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0);
         shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0);
+        shader->setNanMinMaxClamp(NaNClamp);
         shader->setResourceSetBinding(baseResourceSetBinding[compUnit.stage]);
 
         if (Options & EOptionHlslIoMapping)
@@ -1533,9 +1537,11 @@
            "                                    works independently of source language\n"
            "  --hlsl-iomap                      perform IO mapping in HLSL register space\n"
            "  --hlsl-enable-16bit-types         allow 16-bit types in SPIR-V for HLSL\n"
-           "  --hlsl-dx9-compatible             interprets sampler declarations as a texture/sampler combo like DirectX9 would."
+           "  --hlsl-dx9-compatible             interprets sampler declarations as a\n"
+           "                                    texture/sampler combo like DirectX9 would.\n"
            "  --invert-y | --iy                 invert position.Y output in vertex shader\n"
            "  --keep-uncalled | --ku            don't eliminate uncalled functions\n"
+           "  --nan-clamp                       favor non-NaN operand in min, max, and clamp\n"
            "  --no-storage-format | --nsf       use Unknown image format\n"
            "  --reflect-strict-array-suffix     use strict array suffix rules when\n"
            "                                    reflecting\n"
diff --git a/Test/baseResults/spv.400.frag.nanclamp.out b/Test/baseResults/spv.400.frag.nanclamp.out
new file mode 100644
index 0000000..5305ee4
--- /dev/null
+++ b/Test/baseResults/spv.400.frag.nanclamp.out
@@ -0,0 +1,1402 @@
+spv.400.frag
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 1118
+
+                              Capability Shader
+                              Capability Geometry
+                              Capability Float64
+                              Capability ImageGatherExtended
+                              Capability ClipDistance
+                              Capability SampledRect
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107 1116
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 400
+                              SourceExtension  "GL_ARB_separate_shader_objects"
+                              Name 4  "main"
+                              Name 6  "foo23("
+                              Name 8  "doubles("
+                              Name 13  "outp"
+                              Name 17  "u2drs"
+                              Name 41  "doublev"
+                              Name 45  "dvec2v"
+                              Name 50  "dvec3v"
+                              Name 55  "dvec4v"
+                              Name 430  "boolv"
+                              Name 439  "bvec2v"
+                              Name 448  "bvec3v"
+                              Name 457  "bvec4v"
+                              Name 739  "dmat2v"
+                              Name 745  "dmat3v"
+                              Name 751  "dmat4v"
+                              Name 757  "dmat2x3v"
+                              Name 763  "dmat3x2v"
+                              Name 769  "dmat2x4v"
+                              Name 775  "dmat4x2v"
+                              Name 781  "dmat3x4v"
+                              Name 787  "dmat4x3v"
+                              Name 1019  "v"
+                              Name 1025  "arrayedSampler"
+                              Name 1027  "i"
+                              Name 1033  "c2D"
+                              Name 1038  "gl_ClipDistance"
+                              Name 1050  "uoutp"
+                              Name 1054  "samp2dr"
+                              Name 1076  "ioutp"
+                              Name 1080  "isamp2DA"
+                              Name 1097  "gl_FragCoord"
+                              Name 1099  "vl2"
+                              Name 1105  "uo"
+                              Name 1107  "u"
+                              Name 1115  "id"
+                              Name 1116  "gl_PrimitiveID"
+                              Decorate 13(outp) Location 1
+                              Decorate 17(u2drs) DescriptorSet 0
+                              Decorate 17(u2drs) Binding 3
+                              Decorate 1025(arrayedSampler) DescriptorSet 0
+                              Decorate 1025(arrayedSampler) Binding 0
+                              Decorate 1027(i) Flat
+                              Decorate 1027(i) Location 1
+                              Decorate 1033(c2D) Location 0
+                              Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance
+                              Decorate 1050(uoutp) Location 3
+                              Decorate 1054(samp2dr) DescriptorSet 0
+                              Decorate 1054(samp2dr) Binding 1
+                              Decorate 1076(ioutp) Location 2
+                              Decorate 1080(isamp2DA) DescriptorSet 0
+                              Decorate 1080(isamp2DA) Binding 2
+                              Decorate 1097(gl_FragCoord) BuiltIn FragCoord
+                              Decorate 1099(vl2) Location 6
+                              Decorate 1105(uo) Location 0
+                              Decorate 1107(u) Flat
+                              Decorate 1107(u) Location 2
+                              Decorate 1116(gl_PrimitiveID) Flat
+                              Decorate 1116(gl_PrimitiveID) BuiltIn PrimitiveId
+               2:             TypeVoid
+               3:             TypeFunction 2
+              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
+              32:             TypeInt 32 0
+              33:     32(int) Constant 0
+              34:             TypePointer Output 10(float)
+              39:             TypeFloat 64
+              40:             TypePointer Function 39(float64_t)
+              42:39(float64_t) Constant 2507418074 1073430332
+              43:             TypeVector 39(float64_t) 2
+              44:             TypePointer Function 43(f64vec2)
+              46:39(float64_t) Constant 796182188 1073367658
+              47: 43(f64vec2) ConstantComposite 46 46
+              48:             TypeVector 39(float64_t) 3
+              49:             TypePointer Function 48(f64vec3)
+              51:39(float64_t) Constant 1719614413 1073127582
+              52: 48(f64vec3) ConstantComposite 51 51 51
+              53:             TypeVector 39(float64_t) 4
+              54:             TypePointer Function 53(f64vec4)
+             428:             TypeBool
+             429:             TypePointer Function 428(bool)
+             437:             TypeVector 428(bool) 2
+             438:             TypePointer Function 437(bvec2)
+             446:             TypeVector 428(bool) 3
+             447:             TypePointer Function 446(bvec3)
+             455:             TypeVector 428(bool) 4
+             456:             TypePointer Function 455(bvec4)
+             563:   428(bool) ConstantFalse
+             572:  437(bvec2) ConstantComposite 563 563
+             581:  446(bvec3) ConstantComposite 563 563 563
+             590:  455(bvec4) ConstantComposite 563 563 563 563
+             737:             TypeMatrix 43(f64vec2) 2
+             738:             TypePointer Function 737
+             743:             TypeMatrix 48(f64vec3) 3
+             744:             TypePointer Function 743
+             749:             TypeMatrix 53(f64vec4) 4
+             750:             TypePointer Function 749
+             755:             TypeMatrix 48(f64vec3) 2
+             756:             TypePointer Function 755
+             761:             TypeMatrix 43(f64vec2) 3
+             762:             TypePointer Function 761
+             767:             TypeMatrix 53(f64vec4) 2
+             768:             TypePointer Function 767
+             773:             TypeMatrix 43(f64vec2) 4
+             774:             TypePointer Function 773
+             779:             TypeMatrix 53(f64vec4) 3
+             780:             TypePointer Function 779
+             785:             TypeMatrix 48(f64vec3) 4
+             786:             TypePointer Function 785
+             954:     32(int) Constant 1
+             958:     32(int) Constant 2
+             962:     32(int) Constant 3
+             966:     23(int) Constant 1
+             970:     23(int) Constant 2
+             996:   10(float) Constant 1065353216
+            1018:             TypePointer Function 11(fvec4)
+            1020:             TypeImage 10(float) 2D sampled format:Unknown
+            1021:             TypeSampledImage 1020
+            1022:     32(int) Constant 5
+            1023:             TypeArray 1021 1022
+            1024:             TypePointer UniformConstant 1023
+1025(arrayedSampler):   1024(ptr) Variable UniformConstant
+            1026:             TypePointer Input 23(int)
+         1027(i):   1026(ptr) Variable Input
+            1029:             TypePointer UniformConstant 1021
+            1032:             TypePointer Input 20(fvec2)
+       1033(c2D):   1032(ptr) Variable Input
+            1036:             TypeArray 10(float) 958
+            1037:             TypePointer Input 1036
+1038(gl_ClipDistance):   1037(ptr) Variable Input
+            1039:             TypePointer Input 10(float)
+            1043:             TypeVector 10(float) 3
+            1048:             TypeVector 32(int) 4
+            1049:             TypePointer Output 1048(ivec4)
+     1050(uoutp):   1049(ptr) Variable Output
+            1051:             TypeImage 32(int) Rect sampled format:Unknown
+            1052:             TypeSampledImage 1051
+            1053:             TypePointer UniformConstant 1052
+   1054(samp2dr):   1053(ptr) Variable UniformConstant
+            1057:     32(int) Constant 4
+            1058:             TypeArray 24(ivec2) 1057
+            1059:   24(ivec2) ConstantComposite 966 970
+            1060:     23(int) Constant 15
+            1061:     23(int) Constant 16
+            1062:   24(ivec2) ConstantComposite 1060 1061
+            1063:     23(int) Constant 4294967294
+            1064:     23(int) Constant 0
+            1065:   24(ivec2) ConstantComposite 1063 1064
+            1066:        1058 ConstantComposite 1059 27 1062 1065
+            1074:             TypeVector 23(int) 4
+            1075:             TypePointer Output 1074(ivec4)
+     1076(ioutp):   1075(ptr) Variable Output
+            1077:             TypeImage 23(int) 2D array sampled format:Unknown
+            1078:             TypeSampledImage 1077
+            1079:             TypePointer UniformConstant 1078
+  1080(isamp2DA):   1079(ptr) Variable UniformConstant
+            1082:   10(float) Constant 1036831949
+            1083: 1043(fvec3) ConstantComposite 1082 1082 1082
+            1084:   24(ivec2) ConstantComposite 966 966
+            1096:             TypePointer Input 11(fvec4)
+1097(gl_FragCoord):   1096(ptr) Variable Input
+       1099(vl2):   1096(ptr) Variable Input
+            1104:             TypePointer Output 32(int)
+        1105(uo):   1104(ptr) Variable Output
+            1106:             TypePointer Input 32(int)
+         1107(u):   1106(ptr) Variable Input
+            1114:             TypePointer Function 23(int)
+1116(gl_PrimitiveID):   1026(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+         1019(v):   1018(ptr) Variable Function
+        1115(id):   1114(ptr) Variable Function
+            1028:     23(int) Load 1027(i)
+            1030:   1029(ptr) AccessChain 1025(arrayedSampler) 1028
+            1031:        1021 Load 1030
+            1034:   20(fvec2) Load 1033(c2D)
+            1035:   11(fvec4) ImageSampleImplicitLod 1031 1034
+                              Store 1019(v) 1035
+            1040:   1039(ptr) AccessChain 1038(gl_ClipDistance) 966
+            1041:   10(float) Load 1040
+            1042:     34(ptr) AccessChain 13(outp) 33
+                              Store 1042 1041
+            1044:   11(fvec4) Load 1019(v)
+            1045: 1043(fvec3) VectorShuffle 1044 1044 1 2 3
+            1046:   11(fvec4) Load 13(outp)
+            1047:   11(fvec4) VectorShuffle 1046 1045 0 4 5 6
+                              Store 13(outp) 1047
+            1055:        1052 Load 1054(samp2dr)
+            1056:   20(fvec2) Load 1033(c2D)
+            1067: 1048(ivec4) ImageGather 1055 1056 970 ConstOffsets 1066
+                              Store 1050(uoutp) 1067
+            1068:   1029(ptr) AccessChain 1025(arrayedSampler) 1064
+            1069:        1021 Load 1068
+            1070:   20(fvec2) Load 1033(c2D)
+            1071:   11(fvec4) ImageGather 1069 1070 1064
+            1072:   11(fvec4) Load 13(outp)
+            1073:   11(fvec4) FAdd 1072 1071
+                              Store 13(outp) 1073
+            1081:        1078 Load 1080(isamp2DA)
+            1085: 1074(ivec4) ImageGather 1081 1083 25 ConstOffset 1084
+                              Store 1076(ioutp) 1085
+            1086:        1078 Load 1080(isamp2DA)
+            1087: 1074(ivec4) ImageGather 1086 1083 25 ConstOffset 1084
+            1088: 1074(ivec4) Load 1076(ioutp)
+            1089: 1074(ivec4) IAdd 1088 1087
+                              Store 1076(ioutp) 1089
+            1090:        1078 Load 1080(isamp2DA)
+            1091:     23(int) Load 1027(i)
+            1092:   24(ivec2) CompositeConstruct 1091 1091
+            1093: 1074(ivec4) ImageGather 1090 1083 1064 Offset 1092
+            1094: 1074(ivec4) Load 1076(ioutp)
+            1095: 1074(ivec4) IAdd 1094 1093
+                              Store 1076(ioutp) 1095
+            1098:   11(fvec4) Load 1097(gl_FragCoord)
+            1100:   11(fvec4) Load 1099(vl2)
+            1101:   11(fvec4) FAdd 1098 1100
+            1102:   11(fvec4) Load 13(outp)
+            1103:   11(fvec4) FAdd 1102 1101
+                              Store 13(outp) 1103
+            1108:     32(int) Load 1107(u)
+            1109:     23(int) Load 1027(i)
+            1110:     32(int) Bitcast 1109
+            1111:     32(int) UMod 1108 1110
+                              Store 1105(uo) 1111
+            1112:           2 FunctionCall 6(foo23()
+            1113:           2 FunctionCall 8(doubles()
+            1117:     23(int) Load 1116(gl_PrimitiveID)
+                              Store 1115(id) 1117
+                              Return
+                              FunctionEnd
+       6(foo23():           2 Function None 3
+               7:             Label
+              18:          15 Load 17(u2drs)
+              19:   11(fvec4) Load 13(outp)
+              28:   10(float) CompositeExtract 19 2
+              29:   10(float) CompositeExtract 19 3
+              30:   11(fvec4) CompositeInsert 29 19 2
+              31:   10(float) ImageSampleProjDrefExplicitLod 18 30 28 Grad ConstOffset 22 22 27
+              35:     34(ptr) AccessChain 13(outp) 33
+              36:   10(float) Load 35
+              37:   10(float) FAdd 36 31
+              38:     34(ptr) AccessChain 13(outp) 33
+                              Store 38 37
+                              Return
+                              FunctionEnd
+     8(doubles():           2 Function None 3
+               9:             Label
+     41(doublev):     40(ptr) Variable Function
+      45(dvec2v):     44(ptr) Variable Function
+      50(dvec3v):     49(ptr) Variable Function
+      55(dvec4v):     54(ptr) Variable Function
+      430(boolv):    429(ptr) Variable Function
+     439(bvec2v):    438(ptr) Variable Function
+     448(bvec3v):    447(ptr) Variable Function
+     457(bvec4v):    456(ptr) Variable Function
+             557:    429(ptr) Variable Function
+             566:    438(ptr) Variable Function
+             575:    447(ptr) Variable Function
+             584:    456(ptr) Variable Function
+     739(dmat2v):    738(ptr) Variable Function
+     745(dmat3v):    744(ptr) Variable Function
+     751(dmat4v):    750(ptr) Variable Function
+   757(dmat2x3v):    756(ptr) Variable Function
+   763(dmat3x2v):    762(ptr) Variable Function
+   769(dmat2x4v):    768(ptr) Variable Function
+   775(dmat4x2v):    774(ptr) Variable Function
+   781(dmat3x4v):    780(ptr) Variable Function
+   787(dmat4x3v):    786(ptr) Variable Function
+                              Store 41(doublev) 42
+                              Store 45(dvec2v) 47
+                              Store 50(dvec3v) 52
+              56:39(float64_t) Load 41(doublev)
+              57: 53(f64vec4) CompositeConstruct 56 56 56 56
+              58: 53(f64vec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 57
+                              Store 55(dvec4v) 58
+              59:39(float64_t) Load 41(doublev)
+              60:39(float64_t) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 59
+              61:39(float64_t) Load 41(doublev)
+              62:39(float64_t) FAdd 61 60
+                              Store 41(doublev) 62
+              63: 43(f64vec2) Load 45(dvec2v)
+              64: 43(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 63
+              65: 43(f64vec2) Load 45(dvec2v)
+              66: 43(f64vec2) FAdd 65 64
+                              Store 45(dvec2v) 66
+              67: 48(f64vec3) Load 50(dvec3v)
+              68: 48(f64vec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 67
+              69: 48(f64vec3) Load 50(dvec3v)
+              70: 48(f64vec3) FAdd 69 68
+                              Store 50(dvec3v) 70
+              71: 53(f64vec4) Load 55(dvec4v)
+              72: 53(f64vec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 71
+              73: 53(f64vec4) Load 55(dvec4v)
+              74: 53(f64vec4) FAdd 73 72
+                              Store 55(dvec4v) 74
+              75:39(float64_t) Load 41(doublev)
+              76:39(float64_t) ExtInst 1(GLSL.std.450) 4(FAbs) 75
+              77:39(float64_t) Load 41(doublev)
+              78:39(float64_t) FAdd 77 76
+                              Store 41(doublev) 78
+              79: 43(f64vec2) Load 45(dvec2v)
+              80: 43(f64vec2) ExtInst 1(GLSL.std.450) 4(FAbs) 79
+              81: 43(f64vec2) Load 45(dvec2v)
+              82: 43(f64vec2) FAdd 81 80
+                              Store 45(dvec2v) 82
+              83: 48(f64vec3) Load 50(dvec3v)
+              84: 48(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 83
+              85: 48(f64vec3) Load 50(dvec3v)
+              86: 48(f64vec3) FAdd 85 84
+                              Store 50(dvec3v) 86
+              87: 53(f64vec4) Load 55(dvec4v)
+              88: 53(f64vec4) ExtInst 1(GLSL.std.450) 4(FAbs) 87
+              89: 53(f64vec4) Load 55(dvec4v)
+              90: 53(f64vec4) FAdd 89 88
+                              Store 55(dvec4v) 90
+              91:39(float64_t) Load 41(doublev)
+              92:39(float64_t) ExtInst 1(GLSL.std.450) 6(FSign) 91
+              93:39(float64_t) Load 41(doublev)
+              94:39(float64_t) FAdd 93 92
+                              Store 41(doublev) 94
+              95: 43(f64vec2) Load 45(dvec2v)
+              96: 43(f64vec2) ExtInst 1(GLSL.std.450) 6(FSign) 95
+              97: 43(f64vec2) Load 45(dvec2v)
+              98: 43(f64vec2) FAdd 97 96
+                              Store 45(dvec2v) 98
+              99: 48(f64vec3) Load 50(dvec3v)
+             100: 48(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 99
+             101: 48(f64vec3) Load 50(dvec3v)
+             102: 48(f64vec3) FAdd 101 100
+                              Store 50(dvec3v) 102
+             103: 53(f64vec4) Load 55(dvec4v)
+             104: 53(f64vec4) ExtInst 1(GLSL.std.450) 6(FSign) 103
+             105: 53(f64vec4) Load 55(dvec4v)
+             106: 53(f64vec4) FAdd 105 104
+                              Store 55(dvec4v) 106
+             107:39(float64_t) Load 41(doublev)
+             108:39(float64_t) ExtInst 1(GLSL.std.450) 8(Floor) 107
+             109:39(float64_t) Load 41(doublev)
+             110:39(float64_t) FAdd 109 108
+                              Store 41(doublev) 110
+             111: 43(f64vec2) Load 45(dvec2v)
+             112: 43(f64vec2) ExtInst 1(GLSL.std.450) 8(Floor) 111
+             113: 43(f64vec2) Load 45(dvec2v)
+             114: 43(f64vec2) FAdd 113 112
+                              Store 45(dvec2v) 114
+             115: 48(f64vec3) Load 50(dvec3v)
+             116: 48(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 115
+             117: 48(f64vec3) Load 50(dvec3v)
+             118: 48(f64vec3) FAdd 117 116
+                              Store 50(dvec3v) 118
+             119: 53(f64vec4) Load 55(dvec4v)
+             120: 53(f64vec4) ExtInst 1(GLSL.std.450) 8(Floor) 119
+             121: 53(f64vec4) Load 55(dvec4v)
+             122: 53(f64vec4) FAdd 121 120
+                              Store 55(dvec4v) 122
+             123:39(float64_t) Load 41(doublev)
+             124:39(float64_t) ExtInst 1(GLSL.std.450) 3(Trunc) 123
+             125:39(float64_t) Load 41(doublev)
+             126:39(float64_t) FAdd 125 124
+                              Store 41(doublev) 126
+             127: 43(f64vec2) Load 45(dvec2v)
+             128: 43(f64vec2) ExtInst 1(GLSL.std.450) 3(Trunc) 127
+             129: 43(f64vec2) Load 45(dvec2v)
+             130: 43(f64vec2) FAdd 129 128
+                              Store 45(dvec2v) 130
+             131: 48(f64vec3) Load 50(dvec3v)
+             132: 48(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 131
+             133: 48(f64vec3) Load 50(dvec3v)
+             134: 48(f64vec3) FAdd 133 132
+                              Store 50(dvec3v) 134
+             135: 53(f64vec4) Load 55(dvec4v)
+             136: 53(f64vec4) ExtInst 1(GLSL.std.450) 3(Trunc) 135
+             137: 53(f64vec4) Load 55(dvec4v)
+             138: 53(f64vec4) FAdd 137 136
+                              Store 55(dvec4v) 138
+             139:39(float64_t) Load 41(doublev)
+             140:39(float64_t) ExtInst 1(GLSL.std.450) 1(Round) 139
+             141:39(float64_t) Load 41(doublev)
+             142:39(float64_t) FAdd 141 140
+                              Store 41(doublev) 142
+             143: 43(f64vec2) Load 45(dvec2v)
+             144: 43(f64vec2) ExtInst 1(GLSL.std.450) 1(Round) 143
+             145: 43(f64vec2) Load 45(dvec2v)
+             146: 43(f64vec2) FAdd 145 144
+                              Store 45(dvec2v) 146
+             147: 48(f64vec3) Load 50(dvec3v)
+             148: 48(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 147
+             149: 48(f64vec3) Load 50(dvec3v)
+             150: 48(f64vec3) FAdd 149 148
+                              Store 50(dvec3v) 150
+             151: 53(f64vec4) Load 55(dvec4v)
+             152: 53(f64vec4) ExtInst 1(GLSL.std.450) 1(Round) 151
+             153: 53(f64vec4) Load 55(dvec4v)
+             154: 53(f64vec4) FAdd 153 152
+                              Store 55(dvec4v) 154
+             155:39(float64_t) Load 41(doublev)
+             156:39(float64_t) ExtInst 1(GLSL.std.450) 2(RoundEven) 155
+             157:39(float64_t) Load 41(doublev)
+             158:39(float64_t) FAdd 157 156
+                              Store 41(doublev) 158
+             159: 43(f64vec2) Load 45(dvec2v)
+             160: 43(f64vec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 159
+             161: 43(f64vec2) Load 45(dvec2v)
+             162: 43(f64vec2) FAdd 161 160
+                              Store 45(dvec2v) 162
+             163: 48(f64vec3) Load 50(dvec3v)
+             164: 48(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 163
+             165: 48(f64vec3) Load 50(dvec3v)
+             166: 48(f64vec3) FAdd 165 164
+                              Store 50(dvec3v) 166
+             167: 53(f64vec4) Load 55(dvec4v)
+             168: 53(f64vec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 167
+             169: 53(f64vec4) Load 55(dvec4v)
+             170: 53(f64vec4) FAdd 169 168
+                              Store 55(dvec4v) 170
+             171:39(float64_t) Load 41(doublev)
+             172:39(float64_t) ExtInst 1(GLSL.std.450) 9(Ceil) 171
+             173:39(float64_t) Load 41(doublev)
+             174:39(float64_t) FAdd 173 172
+                              Store 41(doublev) 174
+             175: 43(f64vec2) Load 45(dvec2v)
+             176: 43(f64vec2) ExtInst 1(GLSL.std.450) 9(Ceil) 175
+             177: 43(f64vec2) Load 45(dvec2v)
+             178: 43(f64vec2) FAdd 177 176
+                              Store 45(dvec2v) 178
+             179: 48(f64vec3) Load 50(dvec3v)
+             180: 48(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 179
+             181: 48(f64vec3) Load 50(dvec3v)
+             182: 48(f64vec3) FAdd 181 180
+                              Store 50(dvec3v) 182
+             183: 53(f64vec4) Load 55(dvec4v)
+             184: 53(f64vec4) ExtInst 1(GLSL.std.450) 9(Ceil) 183
+             185: 53(f64vec4) Load 55(dvec4v)
+             186: 53(f64vec4) FAdd 185 184
+                              Store 55(dvec4v) 186
+             187:39(float64_t) Load 41(doublev)
+             188:39(float64_t) ExtInst 1(GLSL.std.450) 10(Fract) 187
+             189:39(float64_t) Load 41(doublev)
+             190:39(float64_t) FAdd 189 188
+                              Store 41(doublev) 190
+             191: 43(f64vec2) Load 45(dvec2v)
+             192: 43(f64vec2) ExtInst 1(GLSL.std.450) 10(Fract) 191
+             193: 43(f64vec2) Load 45(dvec2v)
+             194: 43(f64vec2) FAdd 193 192
+                              Store 45(dvec2v) 194
+             195: 48(f64vec3) Load 50(dvec3v)
+             196: 48(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 195
+             197: 48(f64vec3) Load 50(dvec3v)
+             198: 48(f64vec3) FAdd 197 196
+                              Store 50(dvec3v) 198
+             199: 53(f64vec4) Load 55(dvec4v)
+             200: 53(f64vec4) ExtInst 1(GLSL.std.450) 10(Fract) 199
+             201: 53(f64vec4) Load 55(dvec4v)
+             202: 53(f64vec4) FAdd 201 200
+                              Store 55(dvec4v) 202
+             203:39(float64_t) Load 41(doublev)
+             204:39(float64_t) Load 41(doublev)
+             205:39(float64_t) FMod 203 204
+             206:39(float64_t) Load 41(doublev)
+             207:39(float64_t) FAdd 206 205
+                              Store 41(doublev) 207
+             208: 43(f64vec2) Load 45(dvec2v)
+             209:39(float64_t) Load 41(doublev)
+             210: 43(f64vec2) CompositeConstruct 209 209
+             211: 43(f64vec2) FMod 208 210
+             212: 43(f64vec2) Load 45(dvec2v)
+             213: 43(f64vec2) FAdd 212 211
+                              Store 45(dvec2v) 213
+             214: 48(f64vec3) Load 50(dvec3v)
+             215:39(float64_t) Load 41(doublev)
+             216: 48(f64vec3) CompositeConstruct 215 215 215
+             217: 48(f64vec3) FMod 214 216
+             218: 48(f64vec3) Load 50(dvec3v)
+             219: 48(f64vec3) FAdd 218 217
+                              Store 50(dvec3v) 219
+             220: 53(f64vec4) Load 55(dvec4v)
+             221:39(float64_t) Load 41(doublev)
+             222: 53(f64vec4) CompositeConstruct 221 221 221 221
+             223: 53(f64vec4) FMod 220 222
+             224: 53(f64vec4) Load 55(dvec4v)
+             225: 53(f64vec4) FAdd 224 223
+                              Store 55(dvec4v) 225
+             226: 43(f64vec2) Load 45(dvec2v)
+             227: 43(f64vec2) Load 45(dvec2v)
+             228: 43(f64vec2) FMod 226 227
+             229: 43(f64vec2) Load 45(dvec2v)
+             230: 43(f64vec2) FAdd 229 228
+                              Store 45(dvec2v) 230
+             231: 48(f64vec3) Load 50(dvec3v)
+             232: 48(f64vec3) Load 50(dvec3v)
+             233: 48(f64vec3) FMod 231 232
+             234: 48(f64vec3) Load 50(dvec3v)
+             235: 48(f64vec3) FAdd 234 233
+                              Store 50(dvec3v) 235
+             236: 53(f64vec4) Load 55(dvec4v)
+             237: 53(f64vec4) Load 55(dvec4v)
+             238: 53(f64vec4) FMod 236 237
+             239: 53(f64vec4) Load 55(dvec4v)
+             240: 53(f64vec4) FAdd 239 238
+                              Store 55(dvec4v) 240
+             241:39(float64_t) Load 41(doublev)
+             242:39(float64_t) ExtInst 1(GLSL.std.450) 35(Modf) 241 41(doublev)
+             243:39(float64_t) Load 41(doublev)
+             244:39(float64_t) FAdd 243 242
+                              Store 41(doublev) 244
+             245: 43(f64vec2) Load 45(dvec2v)
+             246: 43(f64vec2) ExtInst 1(GLSL.std.450) 35(Modf) 245 45(dvec2v)
+             247: 43(f64vec2) Load 45(dvec2v)
+             248: 43(f64vec2) FAdd 247 246
+                              Store 45(dvec2v) 248
+             249: 48(f64vec3) Load 50(dvec3v)
+             250: 48(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 249 50(dvec3v)
+             251: 48(f64vec3) Load 50(dvec3v)
+             252: 48(f64vec3) FAdd 251 250
+                              Store 50(dvec3v) 252
+             253: 53(f64vec4) Load 55(dvec4v)
+             254: 53(f64vec4) ExtInst 1(GLSL.std.450) 35(Modf) 253 55(dvec4v)
+             255: 53(f64vec4) Load 55(dvec4v)
+             256: 53(f64vec4) FAdd 255 254
+                              Store 55(dvec4v) 256
+             257:39(float64_t) Load 41(doublev)
+             258:39(float64_t) Load 41(doublev)
+             259:39(float64_t) ExtInst 1(GLSL.std.450) 79(NMin) 257 258
+             260:39(float64_t) Load 41(doublev)
+             261:39(float64_t) FAdd 260 259
+                              Store 41(doublev) 261
+             262: 43(f64vec2) Load 45(dvec2v)
+             263:39(float64_t) Load 41(doublev)
+             264: 43(f64vec2) CompositeConstruct 263 263
+             265: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 262 264
+             266: 43(f64vec2) Load 45(dvec2v)
+             267: 43(f64vec2) FAdd 266 265
+                              Store 45(dvec2v) 267
+             268: 48(f64vec3) Load 50(dvec3v)
+             269:39(float64_t) Load 41(doublev)
+             270: 48(f64vec3) CompositeConstruct 269 269 269
+             271: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 268 270
+             272: 48(f64vec3) Load 50(dvec3v)
+             273: 48(f64vec3) FAdd 272 271
+                              Store 50(dvec3v) 273
+             274: 53(f64vec4) Load 55(dvec4v)
+             275:39(float64_t) Load 41(doublev)
+             276: 53(f64vec4) CompositeConstruct 275 275 275 275
+             277: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 274 276
+             278: 53(f64vec4) Load 55(dvec4v)
+             279: 53(f64vec4) FAdd 278 277
+                              Store 55(dvec4v) 279
+             280: 43(f64vec2) Load 45(dvec2v)
+             281: 43(f64vec2) Load 45(dvec2v)
+             282: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 280 281
+             283: 43(f64vec2) Load 45(dvec2v)
+             284: 43(f64vec2) FAdd 283 282
+                              Store 45(dvec2v) 284
+             285: 48(f64vec3) Load 50(dvec3v)
+             286: 48(f64vec3) Load 50(dvec3v)
+             287: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 285 286
+             288: 48(f64vec3) Load 50(dvec3v)
+             289: 48(f64vec3) FAdd 288 287
+                              Store 50(dvec3v) 289
+             290: 53(f64vec4) Load 55(dvec4v)
+             291: 53(f64vec4) Load 55(dvec4v)
+             292: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 290 291
+             293: 53(f64vec4) Load 55(dvec4v)
+             294: 53(f64vec4) FAdd 293 292
+                              Store 55(dvec4v) 294
+             295:39(float64_t) Load 41(doublev)
+             296:39(float64_t) Load 41(doublev)
+             297:39(float64_t) ExtInst 1(GLSL.std.450) 80(NMax) 295 296
+             298:39(float64_t) Load 41(doublev)
+             299:39(float64_t) FAdd 298 297
+                              Store 41(doublev) 299
+             300: 43(f64vec2) Load 45(dvec2v)
+             301:39(float64_t) Load 41(doublev)
+             302: 43(f64vec2) CompositeConstruct 301 301
+             303: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 300 302
+             304: 43(f64vec2) Load 45(dvec2v)
+             305: 43(f64vec2) FAdd 304 303
+                              Store 45(dvec2v) 305
+             306: 48(f64vec3) Load 50(dvec3v)
+             307:39(float64_t) Load 41(doublev)
+             308: 48(f64vec3) CompositeConstruct 307 307 307
+             309: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 306 308
+             310: 48(f64vec3) Load 50(dvec3v)
+             311: 48(f64vec3) FAdd 310 309
+                              Store 50(dvec3v) 311
+             312: 53(f64vec4) Load 55(dvec4v)
+             313:39(float64_t) Load 41(doublev)
+             314: 53(f64vec4) CompositeConstruct 313 313 313 313
+             315: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 312 314
+             316: 53(f64vec4) Load 55(dvec4v)
+             317: 53(f64vec4) FAdd 316 315
+                              Store 55(dvec4v) 317
+             318: 43(f64vec2) Load 45(dvec2v)
+             319: 43(f64vec2) Load 45(dvec2v)
+             320: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 318 319
+             321: 43(f64vec2) Load 45(dvec2v)
+             322: 43(f64vec2) FAdd 321 320
+                              Store 45(dvec2v) 322
+             323: 48(f64vec3) Load 50(dvec3v)
+             324: 48(f64vec3) Load 50(dvec3v)
+             325: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 323 324
+             326: 48(f64vec3) Load 50(dvec3v)
+             327: 48(f64vec3) FAdd 326 325
+                              Store 50(dvec3v) 327
+             328: 53(f64vec4) Load 55(dvec4v)
+             329: 53(f64vec4) Load 55(dvec4v)
+             330: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 328 329
+             331: 53(f64vec4) Load 55(dvec4v)
+             332: 53(f64vec4) FAdd 331 330
+                              Store 55(dvec4v) 332
+             333:39(float64_t) Load 41(doublev)
+             334:39(float64_t) Load 41(doublev)
+             335:39(float64_t) Load 41(doublev)
+             336:39(float64_t) ExtInst 1(GLSL.std.450) 81(NClamp) 333 334 335
+             337:39(float64_t) Load 41(doublev)
+             338:39(float64_t) FAdd 337 336
+                              Store 41(doublev) 338
+             339: 43(f64vec2) Load 45(dvec2v)
+             340:39(float64_t) Load 41(doublev)
+             341:39(float64_t) Load 41(doublev)
+             342: 43(f64vec2) CompositeConstruct 340 340
+             343: 43(f64vec2) CompositeConstruct 341 341
+             344: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 339 342 343
+             345: 43(f64vec2) Load 45(dvec2v)
+             346: 43(f64vec2) FAdd 345 344
+                              Store 45(dvec2v) 346
+             347: 48(f64vec3) Load 50(dvec3v)
+             348:39(float64_t) Load 41(doublev)
+             349:39(float64_t) Load 41(doublev)
+             350: 48(f64vec3) CompositeConstruct 348 348 348
+             351: 48(f64vec3) CompositeConstruct 349 349 349
+             352: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 347 350 351
+             353: 48(f64vec3) Load 50(dvec3v)
+             354: 48(f64vec3) FAdd 353 352
+                              Store 50(dvec3v) 354
+             355: 53(f64vec4) Load 55(dvec4v)
+             356:39(float64_t) Load 41(doublev)
+             357:39(float64_t) Load 41(doublev)
+             358: 53(f64vec4) CompositeConstruct 356 356 356 356
+             359: 53(f64vec4) CompositeConstruct 357 357 357 357
+             360: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 355 358 359
+             361: 53(f64vec4) Load 55(dvec4v)
+             362: 53(f64vec4) FAdd 361 360
+                              Store 55(dvec4v) 362
+             363: 43(f64vec2) Load 45(dvec2v)
+             364: 43(f64vec2) Load 45(dvec2v)
+             365: 43(f64vec2) Load 45(dvec2v)
+             366: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 363 364 365
+             367: 43(f64vec2) Load 45(dvec2v)
+             368: 43(f64vec2) FAdd 367 366
+                              Store 45(dvec2v) 368
+             369: 48(f64vec3) Load 50(dvec3v)
+             370: 48(f64vec3) Load 50(dvec3v)
+             371: 48(f64vec3) Load 50(dvec3v)
+             372: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 369 370 371
+             373: 48(f64vec3) Load 50(dvec3v)
+             374: 48(f64vec3) FAdd 373 372
+                              Store 50(dvec3v) 374
+             375: 53(f64vec4) Load 55(dvec4v)
+             376: 53(f64vec4) Load 55(dvec4v)
+             377: 53(f64vec4) Load 55(dvec4v)
+             378: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 375 376 377
+             379: 53(f64vec4) Load 55(dvec4v)
+             380: 53(f64vec4) FAdd 379 378
+                              Store 55(dvec4v) 380
+             381:39(float64_t) Load 41(doublev)
+             382:39(float64_t) Load 41(doublev)
+             383:39(float64_t) Load 41(doublev)
+             384:39(float64_t) ExtInst 1(GLSL.std.450) 46(FMix) 381 382 383
+             385:39(float64_t) Load 41(doublev)
+             386:39(float64_t) FAdd 385 384
+                              Store 41(doublev) 386
+             387: 43(f64vec2) Load 45(dvec2v)
+             388: 43(f64vec2) Load 45(dvec2v)
+             389:39(float64_t) Load 41(doublev)
+             390: 43(f64vec2) CompositeConstruct 389 389
+             391: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 387 388 390
+             392: 43(f64vec2) Load 45(dvec2v)
+             393: 43(f64vec2) FAdd 392 391
+                              Store 45(dvec2v) 393
+             394: 48(f64vec3) Load 50(dvec3v)
+             395: 48(f64vec3) Load 50(dvec3v)
+             396:39(float64_t) Load 41(doublev)
+             397: 48(f64vec3) CompositeConstruct 396 396 396
+             398: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 394 395 397
+             399: 48(f64vec3) Load 50(dvec3v)
+             400: 48(f64vec3) FAdd 399 398
+                              Store 50(dvec3v) 400
+             401: 53(f64vec4) Load 55(dvec4v)
+             402: 53(f64vec4) Load 55(dvec4v)
+             403:39(float64_t) Load 41(doublev)
+             404: 53(f64vec4) CompositeConstruct 403 403 403 403
+             405: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 401 402 404
+             406: 53(f64vec4) Load 55(dvec4v)
+             407: 53(f64vec4) FAdd 406 405
+                              Store 55(dvec4v) 407
+             408: 43(f64vec2) Load 45(dvec2v)
+             409: 43(f64vec2) Load 45(dvec2v)
+             410: 43(f64vec2) Load 45(dvec2v)
+             411: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 408 409 410
+             412: 43(f64vec2) Load 45(dvec2v)
+             413: 43(f64vec2) FAdd 412 411
+                              Store 45(dvec2v) 413
+             414: 48(f64vec3) Load 50(dvec3v)
+             415: 48(f64vec3) Load 50(dvec3v)
+             416: 48(f64vec3) Load 50(dvec3v)
+             417: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 414 415 416
+             418: 48(f64vec3) Load 50(dvec3v)
+             419: 48(f64vec3) FAdd 418 417
+                              Store 50(dvec3v) 419
+             420: 53(f64vec4) Load 55(dvec4v)
+             421: 53(f64vec4) Load 55(dvec4v)
+             422: 53(f64vec4) Load 55(dvec4v)
+             423: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422
+             424: 53(f64vec4) Load 55(dvec4v)
+             425: 53(f64vec4) FAdd 424 423
+                              Store 55(dvec4v) 425
+             426:39(float64_t) Load 41(doublev)
+             427:39(float64_t) Load 41(doublev)
+             431:   428(bool) Load 430(boolv)
+             432:39(float64_t) Select 431 427 426
+             433:39(float64_t) Load 41(doublev)
+             434:39(float64_t) FAdd 433 432
+                              Store 41(doublev) 434
+             435: 43(f64vec2) Load 45(dvec2v)
+             436: 43(f64vec2) Load 45(dvec2v)
+             440:  437(bvec2) Load 439(bvec2v)
+             441: 43(f64vec2) Select 440 436 435
+             442: 43(f64vec2) Load 45(dvec2v)
+             443: 43(f64vec2) FAdd 442 441
+                              Store 45(dvec2v) 443
+             444: 48(f64vec3) Load 50(dvec3v)
+             445: 48(f64vec3) Load 50(dvec3v)
+             449:  446(bvec3) Load 448(bvec3v)
+             450: 48(f64vec3) Select 449 445 444
+             451: 48(f64vec3) Load 50(dvec3v)
+             452: 48(f64vec3) FAdd 451 450
+                              Store 50(dvec3v) 452
+             453: 53(f64vec4) Load 55(dvec4v)
+             454: 53(f64vec4) Load 55(dvec4v)
+             458:  455(bvec4) Load 457(bvec4v)
+             459: 53(f64vec4) Select 458 454 453
+             460: 53(f64vec4) Load 55(dvec4v)
+             461: 53(f64vec4) FAdd 460 459
+                              Store 55(dvec4v) 461
+             462:39(float64_t) Load 41(doublev)
+             463:39(float64_t) Load 41(doublev)
+             464:39(float64_t) ExtInst 1(GLSL.std.450) 48(Step) 462 463
+             465:39(float64_t) Load 41(doublev)
+             466:39(float64_t) FAdd 465 464
+                              Store 41(doublev) 466
+             467: 43(f64vec2) Load 45(dvec2v)
+             468: 43(f64vec2) Load 45(dvec2v)
+             469: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 467 468
+             470: 43(f64vec2) Load 45(dvec2v)
+             471: 43(f64vec2) FAdd 470 469
+                              Store 45(dvec2v) 471
+             472: 48(f64vec3) Load 50(dvec3v)
+             473: 48(f64vec3) Load 50(dvec3v)
+             474: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 472 473
+             475: 48(f64vec3) Load 50(dvec3v)
+             476: 48(f64vec3) FAdd 475 474
+                              Store 50(dvec3v) 476
+             477: 53(f64vec4) Load 55(dvec4v)
+             478: 53(f64vec4) Load 55(dvec4v)
+             479: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 477 478
+             480: 53(f64vec4) Load 55(dvec4v)
+             481: 53(f64vec4) FAdd 480 479
+                              Store 55(dvec4v) 481
+             482:39(float64_t) Load 41(doublev)
+             483: 43(f64vec2) Load 45(dvec2v)
+             484: 43(f64vec2) CompositeConstruct 482 482
+             485: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 484 483
+             486: 43(f64vec2) Load 45(dvec2v)
+             487: 43(f64vec2) FAdd 486 485
+                              Store 45(dvec2v) 487
+             488:39(float64_t) Load 41(doublev)
+             489: 48(f64vec3) Load 50(dvec3v)
+             490: 48(f64vec3) CompositeConstruct 488 488 488
+             491: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 490 489
+             492: 48(f64vec3) Load 50(dvec3v)
+             493: 48(f64vec3) FAdd 492 491
+                              Store 50(dvec3v) 493
+             494:39(float64_t) Load 41(doublev)
+             495: 53(f64vec4) Load 55(dvec4v)
+             496: 53(f64vec4) CompositeConstruct 494 494 494 494
+             497: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 496 495
+             498: 53(f64vec4) Load 55(dvec4v)
+             499: 53(f64vec4) FAdd 498 497
+                              Store 55(dvec4v) 499
+             500:39(float64_t) Load 41(doublev)
+             501:39(float64_t) Load 41(doublev)
+             502:39(float64_t) Load 41(doublev)
+             503:39(float64_t) ExtInst 1(GLSL.std.450) 49(SmoothStep) 500 501 502
+             504:39(float64_t) Load 41(doublev)
+             505:39(float64_t) FAdd 504 503
+                              Store 41(doublev) 505
+             506: 43(f64vec2) Load 45(dvec2v)
+             507: 43(f64vec2) Load 45(dvec2v)
+             508: 43(f64vec2) Load 45(dvec2v)
+             509: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 506 507 508
+             510: 43(f64vec2) Load 45(dvec2v)
+             511: 43(f64vec2) FAdd 510 509
+                              Store 45(dvec2v) 511
+             512: 48(f64vec3) Load 50(dvec3v)
+             513: 48(f64vec3) Load 50(dvec3v)
+             514: 48(f64vec3) Load 50(dvec3v)
+             515: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514
+             516: 48(f64vec3) Load 50(dvec3v)
+             517: 48(f64vec3) FAdd 516 515
+                              Store 50(dvec3v) 517
+             518: 53(f64vec4) Load 55(dvec4v)
+             519: 53(f64vec4) Load 55(dvec4v)
+             520: 53(f64vec4) Load 55(dvec4v)
+             521: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520
+             522: 53(f64vec4) Load 55(dvec4v)
+             523: 53(f64vec4) FAdd 522 521
+                              Store 55(dvec4v) 523
+             524:39(float64_t) Load 41(doublev)
+             525:39(float64_t) Load 41(doublev)
+             526: 43(f64vec2) Load 45(dvec2v)
+             527: 43(f64vec2) CompositeConstruct 524 524
+             528: 43(f64vec2) CompositeConstruct 525 525
+             529: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 527 528 526
+             530: 43(f64vec2) Load 45(dvec2v)
+             531: 43(f64vec2) FAdd 530 529
+                              Store 45(dvec2v) 531
+             532:39(float64_t) Load 41(doublev)
+             533:39(float64_t) Load 41(doublev)
+             534: 48(f64vec3) Load 50(dvec3v)
+             535: 48(f64vec3) CompositeConstruct 532 532 532
+             536: 48(f64vec3) CompositeConstruct 533 533 533
+             537: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 535 536 534
+             538: 48(f64vec3) Load 50(dvec3v)
+             539: 48(f64vec3) FAdd 538 537
+                              Store 50(dvec3v) 539
+             540:39(float64_t) Load 41(doublev)
+             541:39(float64_t) Load 41(doublev)
+             542: 53(f64vec4) Load 55(dvec4v)
+             543: 53(f64vec4) CompositeConstruct 540 540 540 540
+             544: 53(f64vec4) CompositeConstruct 541 541 541 541
+             545: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 543 544 542
+             546: 53(f64vec4) Load 55(dvec4v)
+             547: 53(f64vec4) FAdd 546 545
+                              Store 55(dvec4v) 547
+             548:39(float64_t) Load 41(doublev)
+             549:   428(bool) IsNan 548
+                              Store 430(boolv) 549
+             550: 43(f64vec2) Load 45(dvec2v)
+             551:  437(bvec2) IsNan 550
+                              Store 439(bvec2v) 551
+             552: 48(f64vec3) Load 50(dvec3v)
+             553:  446(bvec3) IsNan 552
+                              Store 448(bvec3v) 553
+             554: 53(f64vec4) Load 55(dvec4v)
+             555:  455(bvec4) IsNan 554
+                              Store 457(bvec4v) 555
+             556:   428(bool) Load 430(boolv)
+                              SelectionMerge 559 None
+                              BranchConditional 556 558 562
+             558:               Label
+             560:39(float64_t)   Load 41(doublev)
+             561:   428(bool)   IsInf 560
+                                Store 557 561
+                                Branch 559
+             562:               Label
+                                Store 557 563
+                                Branch 559
+             559:             Label
+             564:   428(bool) Load 557
+                              Store 430(boolv) 564
+             565:   428(bool) Load 430(boolv)
+                              SelectionMerge 568 None
+                              BranchConditional 565 567 571
+             567:               Label
+             569: 43(f64vec2)   Load 45(dvec2v)
+             570:  437(bvec2)   IsInf 569
+                                Store 566 570
+                                Branch 568
+             571:               Label
+                                Store 566 572
+                                Branch 568
+             568:             Label
+             573:  437(bvec2) Load 566
+                              Store 439(bvec2v) 573
+             574:   428(bool) Load 430(boolv)
+                              SelectionMerge 577 None
+                              BranchConditional 574 576 580
+             576:               Label
+             578: 48(f64vec3)   Load 50(dvec3v)
+             579:  446(bvec3)   IsInf 578
+                                Store 575 579
+                                Branch 577
+             580:               Label
+                                Store 575 581
+                                Branch 577
+             577:             Label
+             582:  446(bvec3) Load 575
+                              Store 448(bvec3v) 582
+             583:   428(bool) Load 430(boolv)
+                              SelectionMerge 586 None
+                              BranchConditional 583 585 589
+             585:               Label
+             587: 53(f64vec4)   Load 55(dvec4v)
+             588:  455(bvec4)   IsInf 587
+                                Store 584 588
+                                Branch 586
+             589:               Label
+                                Store 584 590
+                                Branch 586
+             586:             Label
+             591:  455(bvec4) Load 584
+                              Store 457(bvec4v) 591
+             592:39(float64_t) Load 41(doublev)
+             593:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 592
+             594:39(float64_t) Load 41(doublev)
+             595:39(float64_t) FAdd 594 593
+                              Store 41(doublev) 595
+             596: 43(f64vec2) Load 45(dvec2v)
+             597:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 596
+             598:39(float64_t) Load 41(doublev)
+             599:39(float64_t) FAdd 598 597
+                              Store 41(doublev) 599
+             600: 48(f64vec3) Load 50(dvec3v)
+             601:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 600
+             602:39(float64_t) Load 41(doublev)
+             603:39(float64_t) FAdd 602 601
+                              Store 41(doublev) 603
+             604: 53(f64vec4) Load 55(dvec4v)
+             605:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 604
+             606:39(float64_t) Load 41(doublev)
+             607:39(float64_t) FAdd 606 605
+                              Store 41(doublev) 607
+             608:39(float64_t) Load 41(doublev)
+             609:39(float64_t) Load 41(doublev)
+             610:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 608 609
+             611:39(float64_t) Load 41(doublev)
+             612:39(float64_t) FAdd 611 610
+                              Store 41(doublev) 612
+             613: 43(f64vec2) Load 45(dvec2v)
+             614: 43(f64vec2) Load 45(dvec2v)
+             615:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 613 614
+             616:39(float64_t) Load 41(doublev)
+             617:39(float64_t) FAdd 616 615
+                              Store 41(doublev) 617
+             618: 48(f64vec3) Load 50(dvec3v)
+             619: 48(f64vec3) Load 50(dvec3v)
+             620:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 618 619
+             621:39(float64_t) Load 41(doublev)
+             622:39(float64_t) FAdd 621 620
+                              Store 41(doublev) 622
+             623: 53(f64vec4) Load 55(dvec4v)
+             624: 53(f64vec4) Load 55(dvec4v)
+             625:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 623 624
+             626:39(float64_t) Load 41(doublev)
+             627:39(float64_t) FAdd 626 625
+                              Store 41(doublev) 627
+             628:39(float64_t) Load 41(doublev)
+             629:39(float64_t) Load 41(doublev)
+             630:39(float64_t) FMul 628 629
+             631:39(float64_t) Load 41(doublev)
+             632:39(float64_t) FAdd 631 630
+                              Store 41(doublev) 632
+             633: 43(f64vec2) Load 45(dvec2v)
+             634: 43(f64vec2) Load 45(dvec2v)
+             635:39(float64_t) Dot 633 634
+             636:39(float64_t) Load 41(doublev)
+             637:39(float64_t) FAdd 636 635
+                              Store 41(doublev) 637
+             638: 48(f64vec3) Load 50(dvec3v)
+             639: 48(f64vec3) Load 50(dvec3v)
+             640:39(float64_t) Dot 638 639
+             641:39(float64_t) Load 41(doublev)
+             642:39(float64_t) FAdd 641 640
+                              Store 41(doublev) 642
+             643: 53(f64vec4) Load 55(dvec4v)
+             644: 53(f64vec4) Load 55(dvec4v)
+             645:39(float64_t) Dot 643 644
+             646:39(float64_t) Load 41(doublev)
+             647:39(float64_t) FAdd 646 645
+                              Store 41(doublev) 647
+             648: 48(f64vec3) Load 50(dvec3v)
+             649: 48(f64vec3) Load 50(dvec3v)
+             650: 48(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 648 649
+             651: 48(f64vec3) Load 50(dvec3v)
+             652: 48(f64vec3) FAdd 651 650
+                              Store 50(dvec3v) 652
+             653:39(float64_t) Load 41(doublev)
+             654:39(float64_t) ExtInst 1(GLSL.std.450) 69(Normalize) 653
+             655:39(float64_t) Load 41(doublev)
+             656:39(float64_t) FAdd 655 654
+                              Store 41(doublev) 656
+             657: 43(f64vec2) Load 45(dvec2v)
+             658: 43(f64vec2) ExtInst 1(GLSL.std.450) 69(Normalize) 657
+             659: 43(f64vec2) Load 45(dvec2v)
+             660: 43(f64vec2) FAdd 659 658
+                              Store 45(dvec2v) 660
+             661: 48(f64vec3) Load 50(dvec3v)
+             662: 48(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 661
+             663: 48(f64vec3) Load 50(dvec3v)
+             664: 48(f64vec3) FAdd 663 662
+                              Store 50(dvec3v) 664
+             665: 53(f64vec4) Load 55(dvec4v)
+             666: 53(f64vec4) ExtInst 1(GLSL.std.450) 69(Normalize) 665
+             667: 53(f64vec4) Load 55(dvec4v)
+             668: 53(f64vec4) FAdd 667 666
+                              Store 55(dvec4v) 668
+             669:39(float64_t) Load 41(doublev)
+             670:39(float64_t) Load 41(doublev)
+             671:39(float64_t) Load 41(doublev)
+             672:39(float64_t) ExtInst 1(GLSL.std.450) 70(FaceForward) 669 670 671
+             673:39(float64_t) Load 41(doublev)
+             674:39(float64_t) FAdd 673 672
+                              Store 41(doublev) 674
+             675: 43(f64vec2) Load 45(dvec2v)
+             676: 43(f64vec2) Load 45(dvec2v)
+             677: 43(f64vec2) Load 45(dvec2v)
+             678: 43(f64vec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677
+             679: 43(f64vec2) Load 45(dvec2v)
+             680: 43(f64vec2) FAdd 679 678
+                              Store 45(dvec2v) 680
+             681: 48(f64vec3) Load 50(dvec3v)
+             682: 48(f64vec3) Load 50(dvec3v)
+             683: 48(f64vec3) Load 50(dvec3v)
+             684: 48(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683
+             685: 48(f64vec3) Load 50(dvec3v)
+             686: 48(f64vec3) FAdd 685 684
+                              Store 50(dvec3v) 686
+             687: 53(f64vec4) Load 55(dvec4v)
+             688: 53(f64vec4) Load 55(dvec4v)
+             689: 53(f64vec4) Load 55(dvec4v)
+             690: 53(f64vec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689
+             691: 53(f64vec4) Load 55(dvec4v)
+             692: 53(f64vec4) FAdd 691 690
+                              Store 55(dvec4v) 692
+             693:39(float64_t) Load 41(doublev)
+             694:39(float64_t) Load 41(doublev)
+             695:39(float64_t) ExtInst 1(GLSL.std.450) 71(Reflect) 693 694
+             696:39(float64_t) Load 41(doublev)
+             697:39(float64_t) FAdd 696 695
+                              Store 41(doublev) 697
+             698: 43(f64vec2) Load 45(dvec2v)
+             699: 43(f64vec2) Load 45(dvec2v)
+             700: 43(f64vec2) ExtInst 1(GLSL.std.450) 71(Reflect) 698 699
+             701: 43(f64vec2) Load 45(dvec2v)
+             702: 43(f64vec2) FAdd 701 700
+                              Store 45(dvec2v) 702
+             703: 48(f64vec3) Load 50(dvec3v)
+             704: 48(f64vec3) Load 50(dvec3v)
+             705: 48(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 703 704
+             706: 48(f64vec3) Load 50(dvec3v)
+             707: 48(f64vec3) FAdd 706 705
+                              Store 50(dvec3v) 707
+             708: 53(f64vec4) Load 55(dvec4v)
+             709: 53(f64vec4) Load 55(dvec4v)
+             710: 53(f64vec4) ExtInst 1(GLSL.std.450) 71(Reflect) 708 709
+             711: 53(f64vec4) Load 55(dvec4v)
+             712: 53(f64vec4) FAdd 711 710
+                              Store 55(dvec4v) 712
+             713:39(float64_t) Load 41(doublev)
+             714:39(float64_t) Load 41(doublev)
+             715:39(float64_t) Load 41(doublev)
+             716:39(float64_t) ExtInst 1(GLSL.std.450) 72(Refract) 713 714 715
+             717:39(float64_t) Load 41(doublev)
+             718:39(float64_t) FAdd 717 716
+                              Store 41(doublev) 718
+             719: 43(f64vec2) Load 45(dvec2v)
+             720: 43(f64vec2) Load 45(dvec2v)
+             721:39(float64_t) Load 41(doublev)
+             722: 43(f64vec2) ExtInst 1(GLSL.std.450) 72(Refract) 719 720 721
+             723: 43(f64vec2) Load 45(dvec2v)
+             724: 43(f64vec2) FAdd 723 722
+                              Store 45(dvec2v) 724
+             725: 48(f64vec3) Load 50(dvec3v)
+             726: 48(f64vec3) Load 50(dvec3v)
+             727:39(float64_t) Load 41(doublev)
+             728: 48(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727
+             729: 48(f64vec3) Load 50(dvec3v)
+             730: 48(f64vec3) FAdd 729 728
+                              Store 50(dvec3v) 730
+             731: 53(f64vec4) Load 55(dvec4v)
+             732: 53(f64vec4) Load 55(dvec4v)
+             733:39(float64_t) Load 41(doublev)
+             734: 53(f64vec4) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733
+             735: 53(f64vec4) Load 55(dvec4v)
+             736: 53(f64vec4) FAdd 735 734
+                              Store 55(dvec4v) 736
+             740: 43(f64vec2) Load 45(dvec2v)
+             741: 43(f64vec2) Load 45(dvec2v)
+             742:         737 OuterProduct 740 741
+                              Store 739(dmat2v) 742
+             746: 48(f64vec3) Load 50(dvec3v)
+             747: 48(f64vec3) Load 50(dvec3v)
+             748:         743 OuterProduct 746 747
+                              Store 745(dmat3v) 748
+             752: 53(f64vec4) Load 55(dvec4v)
+             753: 53(f64vec4) Load 55(dvec4v)
+             754:         749 OuterProduct 752 753
+                              Store 751(dmat4v) 754
+             758: 48(f64vec3) Load 50(dvec3v)
+             759: 43(f64vec2) Load 45(dvec2v)
+             760:         755 OuterProduct 758 759
+                              Store 757(dmat2x3v) 760
+             764: 43(f64vec2) Load 45(dvec2v)
+             765: 48(f64vec3) Load 50(dvec3v)
+             766:         761 OuterProduct 764 765
+                              Store 763(dmat3x2v) 766
+             770: 53(f64vec4) Load 55(dvec4v)
+             771: 43(f64vec2) Load 45(dvec2v)
+             772:         767 OuterProduct 770 771
+                              Store 769(dmat2x4v) 772
+             776: 43(f64vec2) Load 45(dvec2v)
+             777: 53(f64vec4) Load 55(dvec4v)
+             778:         773 OuterProduct 776 777
+                              Store 775(dmat4x2v) 778
+             782: 53(f64vec4) Load 55(dvec4v)
+             783: 48(f64vec3) Load 50(dvec3v)
+             784:         779 OuterProduct 782 783
+                              Store 781(dmat3x4v) 784
+             788: 48(f64vec3) Load 50(dvec3v)
+             789: 53(f64vec4) Load 55(dvec4v)
+             790:         785 OuterProduct 788 789
+                              Store 787(dmat4x3v) 790
+             791:         737 Load 739(dmat2v)
+             792:         737 Load 739(dmat2v)
+             793: 43(f64vec2) CompositeExtract 791 0
+             794: 43(f64vec2) CompositeExtract 792 0
+             795: 43(f64vec2) FMul 793 794
+             796: 43(f64vec2) CompositeExtract 791 1
+             797: 43(f64vec2) CompositeExtract 792 1
+             798: 43(f64vec2) FMul 796 797
+             799:         737 CompositeConstruct 795 798
+             800:         737 Load 739(dmat2v)
+             801:         737 MatrixTimesMatrix 800 799
+                              Store 739(dmat2v) 801
+             802:         743 Load 745(dmat3v)
+             803:         743 Load 745(dmat3v)
+             804: 48(f64vec3) CompositeExtract 802 0
+             805: 48(f64vec3) CompositeExtract 803 0
+             806: 48(f64vec3) FMul 804 805
+             807: 48(f64vec3) CompositeExtract 802 1
+             808: 48(f64vec3) CompositeExtract 803 1
+             809: 48(f64vec3) FMul 807 808
+             810: 48(f64vec3) CompositeExtract 802 2
+             811: 48(f64vec3) CompositeExtract 803 2
+             812: 48(f64vec3) FMul 810 811
+             813:         743 CompositeConstruct 806 809 812
+             814:         743 Load 745(dmat3v)
+             815:         743 MatrixTimesMatrix 814 813
+                              Store 745(dmat3v) 815
+             816:         749 Load 751(dmat4v)
+             817:         749 Load 751(dmat4v)
+             818: 53(f64vec4) CompositeExtract 816 0
+             819: 53(f64vec4) CompositeExtract 817 0
+             820: 53(f64vec4) FMul 818 819
+             821: 53(f64vec4) CompositeExtract 816 1
+             822: 53(f64vec4) CompositeExtract 817 1
+             823: 53(f64vec4) FMul 821 822
+             824: 53(f64vec4) CompositeExtract 816 2
+             825: 53(f64vec4) CompositeExtract 817 2
+             826: 53(f64vec4) FMul 824 825
+             827: 53(f64vec4) CompositeExtract 816 3
+             828: 53(f64vec4) CompositeExtract 817 3
+             829: 53(f64vec4) FMul 827 828
+             830:         749 CompositeConstruct 820 823 826 829
+             831:         749 Load 751(dmat4v)
+             832:         749 MatrixTimesMatrix 831 830
+                              Store 751(dmat4v) 832
+             833:         755 Load 757(dmat2x3v)
+             834:         755 Load 757(dmat2x3v)
+             835: 48(f64vec3) CompositeExtract 833 0
+             836: 48(f64vec3) CompositeExtract 834 0
+             837: 48(f64vec3) FMul 835 836
+             838: 48(f64vec3) CompositeExtract 833 1
+             839: 48(f64vec3) CompositeExtract 834 1
+             840: 48(f64vec3) FMul 838 839
+             841:         755 CompositeConstruct 837 840
+                              Store 757(dmat2x3v) 841
+             842:         767 Load 769(dmat2x4v)
+             843:         767 Load 769(dmat2x4v)
+             844: 53(f64vec4) CompositeExtract 842 0
+             845: 53(f64vec4) CompositeExtract 843 0
+             846: 53(f64vec4) FMul 844 845
+             847: 53(f64vec4) CompositeExtract 842 1
+             848: 53(f64vec4) CompositeExtract 843 1
+             849: 53(f64vec4) FMul 847 848
+             850:         767 CompositeConstruct 846 849
+                              Store 769(dmat2x4v) 850
+             851:         761 Load 763(dmat3x2v)
+             852:         761 Load 763(dmat3x2v)
+             853: 43(f64vec2) CompositeExtract 851 0
+             854: 43(f64vec2) CompositeExtract 852 0
+             855: 43(f64vec2) FMul 853 854
+             856: 43(f64vec2) CompositeExtract 851 1
+             857: 43(f64vec2) CompositeExtract 852 1
+             858: 43(f64vec2) FMul 856 857
+             859: 43(f64vec2) CompositeExtract 851 2
+             860: 43(f64vec2) CompositeExtract 852 2
+             861: 43(f64vec2) FMul 859 860
+             862:         761 CompositeConstruct 855 858 861
+                              Store 763(dmat3x2v) 862
+             863:         779 Load 781(dmat3x4v)
+             864:         779 Load 781(dmat3x4v)
+             865: 53(f64vec4) CompositeExtract 863 0
+             866: 53(f64vec4) CompositeExtract 864 0
+             867: 53(f64vec4) FMul 865 866
+             868: 53(f64vec4) CompositeExtract 863 1
+             869: 53(f64vec4) CompositeExtract 864 1
+             870: 53(f64vec4) FMul 868 869
+             871: 53(f64vec4) CompositeExtract 863 2
+             872: 53(f64vec4) CompositeExtract 864 2
+             873: 53(f64vec4) FMul 871 872
+             874:         779 CompositeConstruct 867 870 873
+                              Store 781(dmat3x4v) 874
+             875:         773 Load 775(dmat4x2v)
+             876:         773 Load 775(dmat4x2v)
+             877: 43(f64vec2) CompositeExtract 875 0
+             878: 43(f64vec2) CompositeExtract 876 0
+             879: 43(f64vec2) FMul 877 878
+             880: 43(f64vec2) CompositeExtract 875 1
+             881: 43(f64vec2) CompositeExtract 876 1
+             882: 43(f64vec2) FMul 880 881
+             883: 43(f64vec2) CompositeExtract 875 2
+             884: 43(f64vec2) CompositeExtract 876 2
+             885: 43(f64vec2) FMul 883 884
+             886: 43(f64vec2) CompositeExtract 875 3
+             887: 43(f64vec2) CompositeExtract 876 3
+             888: 43(f64vec2) FMul 886 887
+             889:         773 CompositeConstruct 879 882 885 888
+                              Store 775(dmat4x2v) 889
+             890:         785 Load 787(dmat4x3v)
+             891:         785 Load 787(dmat4x3v)
+             892: 48(f64vec3) CompositeExtract 890 0
+             893: 48(f64vec3) CompositeExtract 891 0
+             894: 48(f64vec3) FMul 892 893
+             895: 48(f64vec3) CompositeExtract 890 1
+             896: 48(f64vec3) CompositeExtract 891 1
+             897: 48(f64vec3) FMul 895 896
+             898: 48(f64vec3) CompositeExtract 890 2
+             899: 48(f64vec3) CompositeExtract 891 2
+             900: 48(f64vec3) FMul 898 899
+             901: 48(f64vec3) CompositeExtract 890 3
+             902: 48(f64vec3) CompositeExtract 891 3
+             903: 48(f64vec3) FMul 901 902
+             904:         785 CompositeConstruct 894 897 900 903
+                              Store 787(dmat4x3v) 904
+             905:         737 Load 739(dmat2v)
+             906:         737 Transpose 905
+             907:         737 Load 739(dmat2v)
+             908:         737 MatrixTimesMatrix 907 906
+                              Store 739(dmat2v) 908
+             909:         743 Load 745(dmat3v)
+             910:         743 Transpose 909
+             911:         743 Load 745(dmat3v)
+             912:         743 MatrixTimesMatrix 911 910
+                              Store 745(dmat3v) 912
+             913:         749 Load 751(dmat4v)
+             914:         749 Transpose 913
+             915:         749 Load 751(dmat4v)
+             916:         749 MatrixTimesMatrix 915 914
+                              Store 751(dmat4v) 916
+             917:         761 Load 763(dmat3x2v)
+             918:         755 Transpose 917
+                              Store 757(dmat2x3v) 918
+             919:         755 Load 757(dmat2x3v)
+             920:         761 Transpose 919
+                              Store 763(dmat3x2v) 920
+             921:         773 Load 775(dmat4x2v)
+             922:         767 Transpose 921
+                              Store 769(dmat2x4v) 922
+             923:         767 Load 769(dmat2x4v)
+             924:         773 Transpose 923
+                              Store 775(dmat4x2v) 924
+             925:         785 Load 787(dmat4x3v)
+             926:         779 Transpose 925
+                              Store 781(dmat3x4v) 926
+             927:         779 Load 781(dmat3x4v)
+             928:         785 Transpose 927
+                              Store 787(dmat4x3v) 928
+             929:         737 Load 739(dmat2v)
+             930:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 929
+             931:39(float64_t) Load 41(doublev)
+             932:39(float64_t) FAdd 931 930
+                              Store 41(doublev) 932
+             933:         743 Load 745(dmat3v)
+             934:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 933
+             935:39(float64_t) Load 41(doublev)
+             936:39(float64_t) FAdd 935 934
+                              Store 41(doublev) 936
+             937:         749 Load 751(dmat4v)
+             938:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 937
+             939:39(float64_t) Load 41(doublev)
+             940:39(float64_t) FAdd 939 938
+                              Store 41(doublev) 940
+             941:         737 Load 739(dmat2v)
+             942:         737 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 941
+             943:         737 Load 739(dmat2v)
+             944:         737 MatrixTimesMatrix 943 942
+                              Store 739(dmat2v) 944
+             945:         743 Load 745(dmat3v)
+             946:         743 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 945
+             947:         743 Load 745(dmat3v)
+             948:         743 MatrixTimesMatrix 947 946
+                              Store 745(dmat3v) 948
+             949:         749 Load 751(dmat4v)
+             950:         749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 949
+             951:         749 Load 751(dmat4v)
+             952:         749 MatrixTimesMatrix 951 950
+                              Store 751(dmat4v) 952
+             953:39(float64_t) Load 41(doublev)
+             955:     40(ptr) AccessChain 45(dvec2v) 954
+             956:39(float64_t) Load 955
+             957:39(float64_t) FAdd 953 956
+             959:     40(ptr) AccessChain 50(dvec3v) 958
+             960:39(float64_t) Load 959
+             961:39(float64_t) FAdd 957 960
+             963:     40(ptr) AccessChain 55(dvec4v) 962
+             964:39(float64_t) Load 963
+             965:39(float64_t) FAdd 961 964
+             967:     40(ptr) AccessChain 739(dmat2v) 966 954
+             968:39(float64_t) Load 967
+             969:39(float64_t) FAdd 965 968
+             971:     40(ptr) AccessChain 745(dmat3v) 970 958
+             972:39(float64_t) Load 971
+             973:39(float64_t) FAdd 969 972
+             974:     40(ptr) AccessChain 751(dmat4v) 25 962
+             975:39(float64_t) Load 974
+             976:39(float64_t) FAdd 973 975
+             977:     40(ptr) AccessChain 757(dmat2x3v) 966 954
+             978:39(float64_t) Load 977
+             979:39(float64_t) FAdd 976 978
+             980:     40(ptr) AccessChain 763(dmat3x2v) 966 954
+             981:39(float64_t) Load 980
+             982:39(float64_t) FAdd 979 981
+             983:     40(ptr) AccessChain 781(dmat3x4v) 970 958
+             984:39(float64_t) Load 983
+             985:39(float64_t) FAdd 982 984
+             986:     40(ptr) AccessChain 787(dmat4x3v) 970 958
+             987:39(float64_t) Load 986
+             988:39(float64_t) FAdd 985 987
+             989:     40(ptr) AccessChain 769(dmat2x4v) 966 954
+             990:39(float64_t) Load 989
+             991:39(float64_t) FAdd 988 990
+             992:     40(ptr) AccessChain 775(dmat4x2v) 966 954
+             993:39(float64_t) Load 992
+             994:39(float64_t) FAdd 991 993
+             995:   428(bool) Load 430(boolv)
+             997:   10(float) Select 995 996 21
+             998:39(float64_t) FConvert 997
+             999:39(float64_t) FAdd 994 998
+            1000:    429(ptr) AccessChain 439(bvec2v) 33
+            1001:   428(bool) Load 1000
+            1002:   10(float) Select 1001 996 21
+            1003:39(float64_t) FConvert 1002
+            1004:39(float64_t) FAdd 999 1003
+            1005:    429(ptr) AccessChain 448(bvec3v) 33
+            1006:   428(bool) Load 1005
+            1007:   10(float) Select 1006 996 21
+            1008:39(float64_t) FConvert 1007
+            1009:39(float64_t) FAdd 1004 1008
+            1010:    429(ptr) AccessChain 457(bvec4v) 33
+            1011:   428(bool) Load 1010
+            1012:   10(float) Select 1011 996 21
+            1013:39(float64_t) FConvert 1012
+            1014:39(float64_t) FAdd 1009 1013
+            1015:   10(float) FConvert 1014
+            1016:   11(fvec4) Load 13(outp)
+            1017:   11(fvec4) VectorTimesScalar 1016 1015
+                              Store 13(outp) 1017
+                              Return
+                              FunctionEnd
diff --git a/Test/runtests b/Test/runtests
index cc34306..c50f148 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -240,6 +240,13 @@
 diff -b $BASEDIR/hlsl.pp.expand.frag.err $TARGETDIR/hlsl.pp.expand.frag.err || HASERROR=1
 
 #
+# Test --nan-clamp
+#
+echo "Testing nan-clamp"
+$EXE --nan-clamp -H --aml --amb spv.400.frag > $TARGETDIR/spv.400.frag.nanclamp.out
+diff -b $BASEDIR/spv.400.frag.nanclamp.out $TARGETDIR/spv.400.frag.nanclamp.out || HASERROR=1
+
+#
 # Final checking
 #
 if [ $HASERROR -eq 0 ]
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 6f9db01..c7e8a34 100755
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -1791,6 +1791,7 @@
 void TShader::setHlslIoMapping(bool hlslIoMap)          { intermediate->setHlslIoMapping(hlslIoMap); }
 void TShader::setFlattenUniformArrays(bool flatten)     { intermediate->setFlattenUniformArrays(flatten); }
 void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); }
+void TShader::setNanMinMaxClamp(bool useNonNan)         { intermediate->setNanMinMaxClamp(useNonNan); }
 void TShader::setResourceSetBinding(const std::vector<std::string>& base)   { intermediate->setResourceSetBinding(base); }
 void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); }
 
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 30ba98d..7b8bf7f 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -266,7 +266,8 @@
         needToLegalize(false),
         binaryDoubleOutput(false),
         usePhysicalStorageBuffer(false),
-        uniformLocationBase(0)
+        uniformLocationBase(0),
+        nanMinMaxClamp(false)
     {
         localSize[0] = 1;
         localSize[1] = 1;
@@ -767,6 +768,9 @@
     void setUniformLocationBase(int base) { uniformLocationBase = base; }
     int getUniformLocationBase() const { return uniformLocationBase; }
 
+    void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; }
+    bool getNanMinMaxClamp() const { return nanMinMaxClamp; }
+
     void setNeedsLegalization() { needToLegalize = true; }
     bool needsLegalization() const { return needToLegalize; }
 
@@ -900,6 +904,7 @@
 
     std::unordered_map<std::string, int> uniformLocationOverrides;
     int uniformLocationBase;
+    bool nanMinMaxClamp;            // true if desiring min/max/clamp to favor non-NaN over NaN
 
 private:
     void operator=(TIntermediate&); // prevent assignments
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index 33f05e2..9d4ec67 100755
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -435,6 +435,7 @@
     void setHlslIoMapping(bool hlslIoMap);
     void setFlattenUniformArrays(bool flatten);
     void setNoStorageFormat(bool useUnknownFormat);
+    void setNanMinMaxClamp(bool nanMinMaxClamp);
     void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode);
 
     // For setting up the environment (cleared to nothingness in the constructor).