summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2018-12-17 21:42:59 -0300
committerGravatar ReinUsesLisp2019-01-15 17:54:52 -0300
commit07944a23455379dcc590735f67d764304c457bd7 (patch)
tree9fc6c4595bc41e44498195b631e7c76648a3f48a /src
parentshader_decode: Implement I2I (diff)
downloadyuzu-07944a23455379dcc590735f67d764304c457bd7.tar.gz
yuzu-07944a23455379dcc590735f67d764304c457bd7.tar.xz
yuzu-07944a23455379dcc590735f67d764304c457bd7.zip
shader_decode: Implement F2F_C
Diffstat (limited to 'src')
-rw-r--r--src/video_core/shader/decode/conversion.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/video_core/shader/decode/conversion.cpp b/src/video_core/shader/decode/conversion.cpp
index b823b6119..ef46ab7a5 100644
--- a/src/video_core/shader/decode/conversion.cpp
+++ b/src/video_core/shader/decode/conversion.cpp
@@ -67,13 +67,21 @@ u32 ShaderIR::DecodeConversion(BasicBlock& bb, u32 pc) {
67 SetRegister(bb, instr.gpr0, value); 67 SetRegister(bb, instr.gpr0, value);
68 break; 68 break;
69 } 69 }
70 case OpCode::Id::F2F_R: { 70 case OpCode::Id::F2F_R:
71 case OpCode::Id::F2F_C: {
71 UNIMPLEMENTED_IF(instr.conversion.dest_size != Register::Size::Word); 72 UNIMPLEMENTED_IF(instr.conversion.dest_size != Register::Size::Word);
72 UNIMPLEMENTED_IF(instr.conversion.src_size != Register::Size::Word); 73 UNIMPLEMENTED_IF(instr.conversion.src_size != Register::Size::Word);
73 UNIMPLEMENTED_IF_MSG(instr.generates_cc, 74 UNIMPLEMENTED_IF_MSG(instr.generates_cc,
74 "Condition codes generation in F2F is not implemented"); 75 "Condition codes generation in F2F is not implemented");
75 76
76 Node value = GetRegister(instr.gpr20); 77 Node value = [&]() {
78 if (instr.is_b_gpr) {
79 return GetRegister(instr.gpr20);
80 } else {
81 return GetConstBuffer(instr.cbuf34.index, instr.cbuf34.offset);
82 }
83 }();
84
77 value = GetOperandAbsNegFloat(value, instr.conversion.abs_a, instr.conversion.negate_a); 85 value = GetOperandAbsNegFloat(value, instr.conversion.abs_a, instr.conversion.negate_a);
78 86
79 value = [&]() { 87 value = [&]() {