diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 31f7aab..10c2f92 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -2590,20 +2590,25 @@
         if (builder.isScalarType(nominalTypeId)) {
             // Conversion for bool
             spv::Id boolType = builder.makeBoolType();
-            if (nominalTypeId != boolType)
-                rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, builder.makeUintConstant(1),
-                                                                                   builder.makeUintConstant(0));
-            else if (builder.getTypeId(rvalue) != boolType)
+            if (nominalTypeId != boolType) {
+                // keep these outside arguments, for determinant order-of-evaluation
+                spv::Id one = builder.makeUintConstant(1);
+                spv::Id zero = builder.makeUintConstant(0);
+                rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
+            } else if (builder.getTypeId(rvalue) != boolType)
                 rvalue = builder.createBinOp(spv::OpINotEqual, boolType, rvalue, builder.makeUintConstant(0));
         } else if (builder.isVectorType(nominalTypeId)) {
             // Conversion for bvec
             int vecSize = builder.getNumTypeComponents(nominalTypeId);
             spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize);
-            if (nominalTypeId != bvecType)
+            if (nominalTypeId != bvecType) {
+                // keep these outside arguments, for determinant order-of-evaluation
+                spv::Id one = builder.makeUintConstant(1);
+                spv::Id zero = builder.makeUintConstant(0);
                 rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue,
-                                             makeSmearedConstant(builder.makeUintConstant(1), vecSize),
-                                             makeSmearedConstant(builder.makeUintConstant(0), vecSize));
-            else if (builder.getTypeId(rvalue) != bvecType)
+                                             makeSmearedConstant(one, vecSize),
+                                             makeSmearedConstant(zero, vecSize));
+            } else if (builder.getTypeId(rvalue) != bvecType)
                 rvalue = builder.createBinOp(spv::OpINotEqual, bvecType, rvalue,
                                              makeSmearedConstant(builder.makeUintConstant(0), vecSize));
         }
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index 4742dad..30490fe 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -52,17 +52,17 @@
               28:     27(int) Constant 0
               29:     6(bool) ConstantFalse
               30:    9(bvec2) ConstantComposite 29 29
-              31:     22(int) Constant 0
-              32:     22(int) Constant 1
-              33:   23(ivec2) ConstantComposite 31 31
-              34:   23(ivec2) ConstantComposite 32 32
+              31:     22(int) Constant 1
+              32:     22(int) Constant 0
+              33:   23(ivec2) ConstantComposite 32 32
+              34:   23(ivec2) ConstantComposite 31 31
               36:             TypePointer Uniform 23(ivec2)
               38:             TypeVector 22(int) 4
      39(Uniform):             TypeStruct 38(ivec4)
               40:             TypePointer Uniform 39(Uniform)
               41:     40(ptr) Variable Uniform
               42:             TypePointer Uniform 38(ivec4)
-              65:   38(ivec4) ConstantComposite 31 31 31 31
+              65:   38(ivec4) ConstantComposite 32 32 32 32
               72:             TypeFloat 32
               73:             TypeVector 72(float) 4
               74:             TypePointer Output 73(fvec4)
@@ -79,14 +79,14 @@
               43:     42(ptr) AccessChain 41 28
               44:   38(ivec4) Load 43
               45:     22(int) CompositeExtract 44 2
-              46:     6(bool) INotEqual 45 31
+              46:     6(bool) INotEqual 45 32
                               SelectionMerge 48 None
                               BranchConditional 46 47 48
               47:               Label
               49:     42(ptr)   AccessChain 41 28
               50:   38(ivec4)   Load 49
               51:     22(int)   CompositeExtract 50 0
-              52:     6(bool)   INotEqual 51 31
+              52:     6(bool)   INotEqual 51 32
               53:    9(bvec2)   CompositeConstruct 52 52
               54:   23(ivec2)   Select 53 34 33
               55:     36(ptr)   AccessChain 26 28
@@ -96,7 +96,7 @@
               56:     36(ptr) AccessChain 26 28
               57:   23(ivec2) Load 56
               58:     22(int) CompositeExtract 57 0
-              59:     6(bool) INotEqual 58 31
+              59:     6(bool) INotEqual 58 32
                               SelectionMerge 61 None
                               BranchConditional 59 60 61
               60:               Label
@@ -114,14 +114,14 @@
               76:     42(ptr) AccessChain 41 28
               77:   38(ivec4) Load 76
               78:     22(int) CompositeExtract 77 0
-              79:     6(bool) INotEqual 78 31
+              79:     6(bool) INotEqual 78 32
                               SelectionMerge 81 None
                               BranchConditional 79 80 81
               80:               Label
               82:     42(ptr)   AccessChain 41 28
               83:   38(ivec4)   Load 82
               84:     22(int)   CompositeExtract 83 1
-              85:     6(bool)   INotEqual 84 31
+              85:     6(bool)   INotEqual 84 32
                                 Branch 81
               81:             Label
               86:     6(bool) Phi 79 61 85 80
@@ -131,7 +131,7 @@
               91:     42(ptr) AccessChain 41 28
               92:   38(ivec4) Load 91
               93:     22(int) CompositeExtract 92 0
-              94:     6(bool) INotEqual 93 31
+              94:     6(bool) INotEqual 93 32
               95:     6(bool) LogicalNot 94
                               SelectionMerge 97 None
                               BranchConditional 95 96 97
@@ -139,7 +139,7 @@
               98:     42(ptr)   AccessChain 41 28
               99:   38(ivec4)   Load 98
              100:     22(int)   CompositeExtract 99 1
-             101:     6(bool)   INotEqual 100 31
+             101:     6(bool)   INotEqual 100 32
                                 Branch 97
               97:             Label
              102:     6(bool) Phi 94 81 101 96
