summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-10-28 17:05:41 -0300
committerGravatar ReinUsesLisp2020-10-28 17:05:41 -0300
commit44b552be712a9db83a92710648cde4053adf876d (patch)
treeff128344b1a902ae61557c8515dc2fb546720463 /src
parentMerge pull request #4851 from ReinUsesLisp/core-threads-race (diff)
downloadyuzu-44b552be712a9db83a92710648cde4053adf876d.tar.gz
yuzu-44b552be712a9db83a92710648cde4053adf876d.tar.xz
yuzu-44b552be712a9db83a92710648cde4053adf876d.zip
shader/arithmetic: Implement FCMP immediate + register variant
Trivially add the encoding for this.
Diffstat (limited to 'src')
-rw-r--r--src/video_core/engines/shader_bytecode.h2
-rw-r--r--src/video_core/shader/decode/arithmetic.cpp3
2 files changed, 4 insertions, 1 deletions
diff --git a/src/video_core/engines/shader_bytecode.h b/src/video_core/engines/shader_bytecode.h
index d374b73cf..a3c05d1b0 100644
--- a/src/video_core/engines/shader_bytecode.h
+++ b/src/video_core/engines/shader_bytecode.h
@@ -1893,6 +1893,7 @@ public:
1893 ICMP_IMM, 1893 ICMP_IMM,
1894 FCMP_RR, 1894 FCMP_RR,
1895 FCMP_RC, 1895 FCMP_RC,
1896 FCMP_IMMR,
1896 MUFU, // Multi-Function Operator 1897 MUFU, // Multi-Function Operator
1897 RRO_C, // Range Reduction Operator 1898 RRO_C, // Range Reduction Operator
1898 RRO_R, 1899 RRO_R,
@@ -2205,6 +2206,7 @@ private:
2205 INST("0111110-0-------", Id::HSET2_IMM, Type::HalfSet, "HSET2_IMM"), 2206 INST("0111110-0-------", Id::HSET2_IMM, Type::HalfSet, "HSET2_IMM"),
2206 INST("010110111010----", Id::FCMP_RR, Type::Arithmetic, "FCMP_RR"), 2207 INST("010110111010----", Id::FCMP_RR, Type::Arithmetic, "FCMP_RR"),
2207 INST("010010111010----", Id::FCMP_RC, Type::Arithmetic, "FCMP_RC"), 2208 INST("010010111010----", Id::FCMP_RC, Type::Arithmetic, "FCMP_RC"),
2209 INST("0011011-1010----", Id::FCMP_IMMR, Type::Arithmetic, "FCMP_IMMR"),
2208 INST("0101000010000---", Id::MUFU, Type::Arithmetic, "MUFU"), 2210 INST("0101000010000---", Id::MUFU, Type::Arithmetic, "MUFU"),
2209 INST("0100110010010---", Id::RRO_C, Type::Arithmetic, "RRO_C"), 2211 INST("0100110010010---", Id::RRO_C, Type::Arithmetic, "RRO_C"),
2210 INST("0101110010010---", Id::RRO_R, Type::Arithmetic, "RRO_R"), 2212 INST("0101110010010---", Id::RRO_R, Type::Arithmetic, "RRO_R"),
diff --git a/src/video_core/shader/decode/arithmetic.cpp b/src/video_core/shader/decode/arithmetic.cpp
index 4db329fa5..afef5948d 100644
--- a/src/video_core/shader/decode/arithmetic.cpp
+++ b/src/video_core/shader/decode/arithmetic.cpp
@@ -137,7 +137,8 @@ u32 ShaderIR::DecodeArithmetic(NodeBlock& bb, u32 pc) {
137 break; 137 break;
138 } 138 }
139 case OpCode::Id::FCMP_RR: 139 case OpCode::Id::FCMP_RR:
140 case OpCode::Id::FCMP_RC: { 140 case OpCode::Id::FCMP_RC:
141 case OpCode::Id::FCMP_IMMR: {
141 UNIMPLEMENTED_IF(instr.fcmp.ftz == 0); 142 UNIMPLEMENTED_IF(instr.fcmp.ftz == 0);
142 Node op_c = GetRegister(instr.gpr39); 143 Node op_c = GetRegister(instr.gpr39);
143 Node comp = GetPredicateComparisonFloat(instr.fcmp.cond, std::move(op_c), Immediate(0.0f)); 144 Node comp = GetPredicateComparisonFloat(instr.fcmp.cond, std::move(op_c), Immediate(0.0f));