Protect against DBZ in OpUMod also Bug: b/127962486 Test: dEQP-VK.glsl.operator.binary_operator.mod.* Change-Id: I6aee79c99b50f936512e9d9b4b51a07006445694 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/27208 Tested-by: Chris Forbes <chrisforbes@google.com> Presubmit-Ready: Chris Forbes <chrisforbes@google.com> Reviewed-by: Ben Clayton <bclayton@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp index 86394ae..b27f061 100644 --- a/src/Pipeline/SpirvShader.cpp +++ b/src/Pipeline/SpirvShader.cpp
@@ -1566,8 +1566,11 @@ break; } case spv::OpUMod: - dst.emplace(i, lhs.UInt(i) % rhs.UInt(i)); + { + auto zeroMask = As<SIMD::UInt>(CmpEQ(rhs.Int(i), SIMD::Int(0))); + dst.emplace(i, lhs.UInt(i) % (rhs.UInt(i) | zeroMask)); break; + } case spv::OpIEqual: case spv::OpLogicalEqual: dst.emplace(i, CmpEQ(lhs.Int(i), rhs.Int(i)));