glslang -> SPIR-V: smear scalars for integer (scalar * vector).  OpVectorTimesScalar is only for floats.
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 8cdc032..302d850 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1693,7 +1693,7 @@
     bool isFloat = typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble;
 
     spv::Op binOp = spv::OpNop;
-    bool needsPromotion = true;
+    bool needMatchingVectors = true;  // for non-matrix ops, would a scalar need to smear to match a vector?
     bool comparison = false;
 
     switch (op) {
@@ -1720,11 +1720,14 @@
         break;
     case glslang::EOpVectorTimesScalar:
     case glslang::EOpVectorTimesScalarAssign:
-        if (builder.isVector(right))
-            std::swap(left, right);
-        assert(builder.isScalar(right));
-        binOp = spv::OpVectorTimesScalar;
-        needsPromotion = false;
+        if (isFloat) {
+            if (builder.isVector(right))
+                std::swap(left, right);
+            assert(builder.isScalar(right));
+            needMatchingVectors = false;
+            binOp = spv::OpVectorTimesScalar;
+        } else
+            binOp = spv::OpIMul;
         break;
     case glslang::EOpVectorTimesMatrix:
     case glslang::EOpVectorTimesMatrixAssign:
@@ -1752,7 +1755,7 @@
         break;
     case glslang::EOpOuterProduct:
         binOp = spv::OpOuterProduct;
-        needsPromotion = false;
+        needMatchingVectors = false;
         break;
 
     case glslang::EOpDiv:
@@ -1789,7 +1792,7 @@
         binOp = spv::OpBitwiseAnd;
         break;
     case glslang::EOpLogicalAnd:
-        needsPromotion = false;
+        needMatchingVectors = false;
         binOp = spv::OpLogicalAnd;
         break;
     case glslang::EOpInclusiveOr:
@@ -1797,7 +1800,7 @@
         binOp = spv::OpBitwiseOr;
         break;
     case glslang::EOpLogicalOr:
-        needsPromotion = false;
+        needMatchingVectors = false;
         binOp = spv::OpLogicalOr;
         break;
     case glslang::EOpExclusiveOr:
@@ -1805,7 +1808,7 @@
         binOp = spv::OpBitwiseXor;
         break;
     case glslang::EOpLogicalXor:
-        needsPromotion = false;
+        needMatchingVectors = false;
         binOp = spv::OpLogicalXor;
         break;
 
@@ -1849,7 +1852,7 @@
         }
 
         // No matrix involved; make both operands be the same number of components, if needed
-        if (needsPromotion)
+        if (needMatchingVectors)
             builder.promoteScalar(precision, left, right);
 
         spv::Id id = builder.createBinOp(binOp, typeId, left, right);