diff --git a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp index 6c84fd518f..1d8d3cbf8d 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp +++ b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.cpp @@ -43,20 +43,8 @@ std::string D3D12FragmentDecompiler::getFunction(enum class FUNCTION f) return "dot($0.xyz, $1.xyz).xxxx"; case FUNCTION::FUNCTION_DP4: return "dot($0, $1).xxxx"; - case FUNCTION::FUNCTION_SEQ: - return "($0 == $1).xxxx"; case FUNCTION::FUNCTION_SFL: return "float4(0., 0., 0., 0.)"; - case FUNCTION::FUNCTION_SGE: - return "($0 >= $1).xxxx"; - case FUNCTION::FUNCTION_SGT: - return "($0 > $1).xxxx"; - case FUNCTION::FUNCTION_SLE: - return "($0 <= $1).xxxx"; - case FUNCTION::FUNCTION_SLT: - return "($0 < $1).xxxx"; - case FUNCTION::FUNCTION_SNE: - return "($0 != $1).xxxx"; case FUNCTION::FUNCTION_STR: return "float4(1., 1., 1., 1.)"; case FUNCTION::FUNCTION_FRACT: @@ -75,6 +63,27 @@ std::string D3D12FragmentDecompiler::saturate(const std::string & code) return "saturate(" + code + ")"; } +std::string D3D12FragmentDecompiler::compareFunction(COMPARE f, const std::string &Op0, const std::string &Op1) +{ + switch (f) + { + default: + abort(); + case COMPARE::FUNCTION_SEQ: + return "(" + Op0 + " == " + Op1 + ".xxxx"; + case COMPARE::FUNCTION_SGE: + return "(" + Op0 + " >= " + Op1 +").xxxx"; + case COMPARE::FUNCTION_SGT: + return "(" + Op0 + " > " + Op1 + ").xxxx"; + case COMPARE::FUNCTION_SLE: + return "(" + Op0 + " <= " + Op1 + ").xxxx"; + case COMPARE::FUNCTION_SLT: + return "(" + Op0 + " < " + Op1 + ").xxxx"; + case COMPARE::FUNCTION_SNE: + return "(" + Op0 + " != " + Op1 + ").xxxx"; + } +} + void D3D12FragmentDecompiler::insertHeader(std::stringstream & OS) { OS << "// Header" << std::endl; diff --git a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.h b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.h index 69aeb93181..70b151a73f 100644 --- a/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.h +++ b/rpcs3/Emu/RSX/D3D12/D3D12FragmentProgramDecompiler.h @@ -11,6 +11,7 @@ protected: virtual std::string getFloatTypeName(size_t elementCount) override; virtual std::string getFunction(enum class FUNCTION) override; virtual std::string saturate(const std::string &code) override; + virtual std::string compareFunction(enum class COMPARE, const std::string &, const std::string &) override; virtual void insertHeader(std::stringstream &OS) override; virtual void insertIntputs(std::stringstream &OS) override;