diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/shader_recompiler/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp | 4 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_predicate.cpp | 38 | ||||
| -rw-r--r-- | src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_register.cpp (renamed from src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set.cpp) | 0 |
4 files changed, 40 insertions, 5 deletions
diff --git a/src/shader_recompiler/CMakeLists.txt b/src/shader_recompiler/CMakeLists.txt index 057857299..981a79e44 100644 --- a/src/shader_recompiler/CMakeLists.txt +++ b/src/shader_recompiler/CMakeLists.txt | |||
| @@ -89,7 +89,8 @@ add_library(shader_recompiler STATIC | |||
| 89 | frontend/maxwell/translate/impl/move_register.cpp | 89 | frontend/maxwell/translate/impl/move_register.cpp |
| 90 | frontend/maxwell/translate/impl/move_special_register.cpp | 90 | frontend/maxwell/translate/impl/move_special_register.cpp |
| 91 | frontend/maxwell/translate/impl/not_implemented.cpp | 91 | frontend/maxwell/translate/impl/not_implemented.cpp |
| 92 | frontend/maxwell/translate/impl/predicate_set.cpp | 92 | frontend/maxwell/translate/impl/predicate_set_predicate.cpp |
| 93 | frontend/maxwell/translate/impl/predicate_set_register.cpp | ||
| 93 | frontend/maxwell/translate/impl/select_source_with_predicate.cpp | 94 | frontend/maxwell/translate/impl/select_source_with_predicate.cpp |
| 94 | frontend/maxwell/translate/translate.cpp | 95 | frontend/maxwell/translate/translate.cpp |
| 95 | frontend/maxwell/translate/translate.h | 96 | frontend/maxwell/translate/translate.h |
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp index 291d7a4bc..91a9858c6 100644 --- a/src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp +++ b/src/shader_recompiler/frontend/maxwell/translate/impl/not_implemented.cpp | |||
| @@ -593,10 +593,6 @@ void TranslatorVisitor::PRMT_imm(u64) { | |||
| 593 | ThrowNotImplemented(Opcode::PRMT_imm); | 593 | ThrowNotImplemented(Opcode::PRMT_imm); |
| 594 | } | 594 | } |
| 595 | 595 | ||
| 596 | void TranslatorVisitor::PSETP(u64) { | ||
| 597 | ThrowNotImplemented(Opcode::PSETP); | ||
| 598 | } | ||
| 599 | |||
| 600 | void TranslatorVisitor::R2B(u64) { | 596 | void TranslatorVisitor::R2B(u64) { |
| 601 | ThrowNotImplemented(Opcode::R2B); | 597 | ThrowNotImplemented(Opcode::R2B); |
| 602 | } | 598 | } |
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_predicate.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_predicate.cpp new file mode 100644 index 000000000..75d1fa8c1 --- /dev/null +++ b/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_predicate.cpp | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | // Copyright 2021 yuzu Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "common/bit_field.h" | ||
| 6 | #include "common/common_types.h" | ||
| 7 | #include "shader_recompiler/frontend/maxwell/translate/impl/common_funcs.h" | ||
| 8 | #include "shader_recompiler/frontend/maxwell/translate/impl/impl.h" | ||
| 9 | |||
| 10 | namespace Shader::Maxwell { | ||
| 11 | void TranslatorVisitor::PSETP(u64 insn) { | ||
| 12 | union { | ||
| 13 | u64 raw; | ||
| 14 | BitField<0, 3, IR::Pred> dest_pred_b; | ||
| 15 | BitField<3, 3, IR::Pred> dest_pred_a; | ||
| 16 | BitField<12, 3, IR::Pred> pred_a; | ||
| 17 | BitField<15, 1, u64> neg_pred_a; | ||
| 18 | BitField<24, 2, BooleanOp> bop_1; | ||
| 19 | BitField<29, 3, IR::Pred> pred_b; | ||
| 20 | BitField<32, 1, u64> neg_pred_b; | ||
| 21 | BitField<39, 3, IR::Pred> pred_c; | ||
| 22 | BitField<42, 1, u64> neg_pred_c; | ||
| 23 | BitField<45, 2, BooleanOp> bop_2; | ||
| 24 | } const pset{insn}; | ||
| 25 | |||
| 26 | const IR::U1 pred_a{ir.GetPred(pset.pred_a, pset.neg_pred_a != 0)}; | ||
| 27 | const IR::U1 pred_b{ir.GetPred(pset.pred_b, pset.neg_pred_b != 0)}; | ||
| 28 | const IR::U1 pred_c{ir.GetPred(pset.pred_c, pset.neg_pred_c != 0)}; | ||
| 29 | |||
| 30 | const IR::U1 lhs_a{PredicateCombine(ir, pred_a, pred_b, pset.bop_1)}; | ||
| 31 | const IR::U1 lhs_b{PredicateCombine(ir, ir.LogicalNot(pred_a), pred_b, pset.bop_1)}; | ||
| 32 | const IR::U1 result_a{PredicateCombine(ir, lhs_a, pred_c, pset.bop_2)}; | ||
| 33 | const IR::U1 result_b{PredicateCombine(ir, lhs_b, pred_c, pset.bop_2)}; | ||
| 34 | |||
| 35 | ir.SetPred(pset.dest_pred_a, result_a); | ||
| 36 | ir.SetPred(pset.dest_pred_b, result_b); | ||
| 37 | } | ||
| 38 | } // namespace Shader::Maxwell | ||
diff --git a/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set.cpp b/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_register.cpp index 6c15963fa..6c15963fa 100644 --- a/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set.cpp +++ b/src/shader_recompiler/frontend/maxwell/translate/impl/predicate_set_register.cpp | |||