SpirvShader: Add relational ops for integers

Bug: b/127282157
Change-Id: Icaec924ef011b42069d157bec2d76ae5df3eea46
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/26048
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 6c9e66a..ed2beee 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -231,6 +231,16 @@
 			case spv::OpFSub:
 			case spv::OpFDiv:
 			case spv::OpUMod:
+			case spv::OpIEqual:
+			case spv::OpINotEqual:
+			case spv::OpUGreaterThan:
+			case spv::OpSGreaterThan:
+			case spv::OpUGreaterThanEqual:
+			case spv::OpSGreaterThanEqual:
+			case spv::OpULessThan:
+			case spv::OpSLessThan:
+			case spv::OpULessThanEqual:
+			case spv::OpSLessThanEqual:
 			case spv::OpShiftRightLogical:
 			case spv::OpShiftRightArithmetic:
 			case spv::OpShiftLeftLogical:
@@ -918,6 +928,16 @@
 			case spv::OpFSub:
 			case spv::OpFDiv:
 			case spv::OpUMod:
+			case spv::OpIEqual:
+			case spv::OpINotEqual:
+			case spv::OpUGreaterThan:
+			case spv::OpSGreaterThan:
+			case spv::OpUGreaterThanEqual:
+			case spv::OpSGreaterThanEqual:
+			case spv::OpULessThan:
+			case spv::OpSLessThan:
+			case spv::OpULessThanEqual:
+			case spv::OpSLessThanEqual:
 			case spv::OpShiftRightLogical:
 			case spv::OpShiftRightArithmetic:
 			case spv::OpShiftLeftLogical:
@@ -1269,6 +1289,36 @@
 			case spv::OpUMod:
 				dst.emplace(i, As<SIMD::Float>(As<SIMD::UInt>(lhs) % As<SIMD::UInt>(rhs)));
 				break;
+			case spv::OpIEqual:
+				dst.emplace(i, As<SIMD::Float>(CmpEQ(As<SIMD::Int>(lhs), As<SIMD::Int>(rhs))));
+				break;
+			case spv::OpINotEqual:
+				dst.emplace(i, As<SIMD::Float>(CmpNEQ(As<SIMD::Int>(lhs), As<SIMD::Int>(rhs))));
+				break;
+			case spv::OpUGreaterThan:
+				dst.emplace(i, As<SIMD::Float>(CmpGT(As<SIMD::UInt>(lhs), As<SIMD::UInt>(rhs))));
+				break;
+			case spv::OpSGreaterThan:
+				dst.emplace(i, As<SIMD::Float>(CmpGT(As<SIMD::Int>(lhs), As<SIMD::Int>(rhs))));
+				break;
+			case spv::OpUGreaterThanEqual:
+				dst.emplace(i, As<SIMD::Float>(CmpGE(As<SIMD::UInt>(lhs), As<SIMD::UInt>(rhs))));
+				break;
+			case spv::OpSGreaterThanEqual:
+				dst.emplace(i, As<SIMD::Float>(CmpGE(As<SIMD::Int>(lhs), As<SIMD::Int>(rhs))));
+				break;
+			case spv::OpULessThan:
+				dst.emplace(i, As<SIMD::Float>(CmpLT(As<SIMD::UInt>(lhs), As<SIMD::UInt>(rhs))));
+				break;
+			case spv::OpSLessThan:
+				dst.emplace(i, As<SIMD::Float>(CmpLT(As<SIMD::Int>(lhs), As<SIMD::Int>(rhs))));
+				break;
+			case spv::OpULessThanEqual:
+				dst.emplace(i, As<SIMD::Float>(CmpLE(As<SIMD::UInt>(lhs), As<SIMD::UInt>(rhs))));
+				break;
+			case spv::OpSLessThanEqual:
+				dst.emplace(i, As<SIMD::Float>(CmpLE(As<SIMD::Int>(lhs), As<SIMD::Int>(rhs))));
+				break;
 			case spv::OpFAdd:
 				dst.emplace(i, lhs + rhs);
 				break;