diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-10-27 07:58:37 +0100 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2019-11-07 05:44:08 +0100 |
commit | 7b069252f8087f76a6ac3c73a7736a663d58e7b2 (patch) | |
tree | 70e7db3bafa25d9e0ba3d9f2fff6d5addbe5a142 | |
parent | shader/control_flow: Abstract repeated code chunks in BRX tracking (diff) | |
download | yuzu-7b069252f8087f76a6ac3c73a7736a663d58e7b2.tar yuzu-7b069252f8087f76a6ac3c73a7736a663d58e7b2.tar.gz yuzu-7b069252f8087f76a6ac3c73a7736a663d58e7b2.tar.bz2 yuzu-7b069252f8087f76a6ac3c73a7736a663d58e7b2.tar.lz yuzu-7b069252f8087f76a6ac3c73a7736a663d58e7b2.tar.xz yuzu-7b069252f8087f76a6ac3c73a7736a663d58e7b2.tar.zst yuzu-7b069252f8087f76a6ac3c73a7736a663d58e7b2.zip |
-rw-r--r-- | src/video_core/shader/control_flow.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/video_core/shader/control_flow.cpp b/src/video_core/shader/control_flow.cpp index 278de4084..7e6364d94 100644 --- a/src/video_core/shader/control_flow.cpp +++ b/src/video_core/shader/control_flow.cpp @@ -2,7 +2,6 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include <functional> #include <list> #include <map> #include <set> @@ -157,11 +156,11 @@ std::optional<std::pair<s32, u64>> GetBRXInfo(const CFGRebuildState& state, u32& return std::make_pair(instr.brx.GetBranchExtend(), instr.gpr8.Value()); } -template <typename Result> -std::optional<Result> TrackInstruction( - const CFGRebuildState& state, u32& pos, - std::function<bool(Instruction, const OpCode::Matcher&)>&& test, - std::function<Result(Instruction, const OpCode::Matcher&)>&& pack) { +template <typename Result, typename TestCallable, typename PackCallable> +// requires std::predicate<TestCallable, Instruction, const OpCode::Matcher&> +// requires std::invocable<PackCallable, Instruction, const OpCode::Matcher&> +std::optional<Result> TrackInstruction(const CFGRebuildState& state, u32& pos, TestCallable test, + PackCallable pack) { for (; pos >= state.start; --pos) { if (IsSchedInstruction(pos, state.start)) { continue; |