From f5addbf7516d97b86948159c33788b4720b46ee4 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Fri, 17 Nov 2017 19:43:57 +0300 Subject: [PATCH] rsx/fp: improve SRC modifier order - Neg modifier is applied after clamping. Abs has not been tested/proven so precision clamp goes first now, not last --- rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp b/rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp index d45e1f1827..c5b5d10e0d 100644 --- a/rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp +++ b/rpcs3/Emu/RSX/Common/FragmentProgramDecompiler.cpp @@ -398,9 +398,10 @@ template std::string FragmentProgramDecompiler::GetSRC(T src) if (strncmp(swizzle.c_str(), f, 4) != 0) ret += "." + swizzle; + //Warning: Modifier order matters. e.g neg should be applied after precision clamping (tested with Naruto UNS) + if (src1.input_prec_mod) ret = ClampValue(ret, src1.input_prec_mod); if (src.abs) ret = "abs(" + ret + ")"; if (src.neg) ret = "-" + ret; - if (src1.input_prec_mod) ret = ClampValue(ret, src1.input_prec_mod); return ret; }