diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-03-26 05:58:49 +0100 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-03-26 05:58:49 +0100 |
commit | 46791c464a100ff37ecaf813a024858afa8ad9ff (patch) | |
tree | a78afb72941c2204a3a2c08d24e750ea9d46f02a | |
parent | Merge pull request #3544 from makigumo/myfork/patch-2 (diff) | |
download | yuzu-46791c464a100ff37ecaf813a024858afa8ad9ff.tar yuzu-46791c464a100ff37ecaf813a024858afa8ad9ff.tar.gz yuzu-46791c464a100ff37ecaf813a024858afa8ad9ff.tar.bz2 yuzu-46791c464a100ff37ecaf813a024858afa8ad9ff.tar.lz yuzu-46791c464a100ff37ecaf813a024858afa8ad9ff.tar.xz yuzu-46791c464a100ff37ecaf813a024858afa8ad9ff.tar.zst yuzu-46791c464a100ff37ecaf813a024858afa8ad9ff.zip |
-rw-r--r-- | src/video_core/shader/decode/conversion.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/video_core/shader/decode/conversion.cpp b/src/video_core/shader/decode/conversion.cpp index 6ead42070..c72690b2b 100644 --- a/src/video_core/shader/decode/conversion.cpp +++ b/src/video_core/shader/decode/conversion.cpp @@ -138,18 +138,23 @@ u32 ShaderIR::DecodeConversion(NodeBlock& bb, u32 pc) { value = GetOperandAbsNegFloat(value, instr.conversion.abs_a, instr.conversion.negate_a); - value = [&]() { + value = [&] { + if (instr.conversion.src_size != instr.conversion.dst_size) { + // Rounding operations only matter when the source and destination conversion size + // is the same. + return value; + } switch (instr.conversion.f2f.GetRoundingMode()) { case Tegra::Shader::F2fRoundingOp::None: return value; case Tegra::Shader::F2fRoundingOp::Round: - return Operation(OperationCode::FRoundEven, PRECISE, value); + return Operation(OperationCode::FRoundEven, value); case Tegra::Shader::F2fRoundingOp::Floor: - return Operation(OperationCode::FFloor, PRECISE, value); + return Operation(OperationCode::FFloor, value); case Tegra::Shader::F2fRoundingOp::Ceil: - return Operation(OperationCode::FCeil, PRECISE, value); + return Operation(OperationCode::FCeil, value); case Tegra::Shader::F2fRoundingOp::Trunc: - return Operation(OperationCode::FTrunc, PRECISE, value); + return Operation(OperationCode::FTrunc, value); default: UNIMPLEMENTED_MSG("Unimplemented F2F rounding mode {}", static_cast<u32>(instr.conversion.f2f.rounding.Value())); |