diff options
Diffstat (limited to 'src')
27 files changed, 62 insertions, 57 deletions
diff --git a/src/video_core/shader/decode.cpp b/src/video_core/shader/decode.cpp index 812983a99..4dfa8075a 100644 --- a/src/video_core/shader/decode.cpp +++ b/src/video_core/shader/decode.cpp | |||
| @@ -151,7 +151,7 @@ u32 ShaderIR::DecodeInstr(BasicBlock& bb, u32 pc) { | |||
| 151 | UNIMPLEMENTED_IF_MSG(instr.pred.full_pred == Pred::NeverExecute, | 151 | UNIMPLEMENTED_IF_MSG(instr.pred.full_pred == Pred::NeverExecute, |
| 152 | "NeverExecute predicate not implemented"); | 152 | "NeverExecute predicate not implemented"); |
| 153 | 153 | ||
| 154 | static const std::map<OpCode::Type, u32 (ShaderIR::*)(BasicBlock&, const BasicBlock&, u32)> | 154 | static const std::map<OpCode::Type, u32 (ShaderIR::*)(BasicBlock&, u32)> |
| 155 | decoders = { | 155 | decoders = { |
| 156 | {OpCode::Type::Arithmetic, &ShaderIR::DecodeArithmetic}, | 156 | {OpCode::Type::Arithmetic, &ShaderIR::DecodeArithmetic}, |
| 157 | {OpCode::Type::ArithmeticImmediate, &ShaderIR::DecodeArithmeticImmediate}, | 157 | {OpCode::Type::ArithmeticImmediate, &ShaderIR::DecodeArithmeticImmediate}, |
| @@ -181,9 +181,9 @@ u32 ShaderIR::DecodeInstr(BasicBlock& bb, u32 pc) { | |||
| 181 | 181 | ||
| 182 | std::vector<Node> tmp_block; | 182 | std::vector<Node> tmp_block; |
| 183 | if (const auto decoder = decoders.find(opcode->get().GetType()); decoder != decoders.end()) { | 183 | if (const auto decoder = decoders.find(opcode->get().GetType()); decoder != decoders.end()) { |
| 184 | pc = (this->*decoder->second)(tmp_block, bb, pc); | 184 | pc = (this->*decoder->second)(tmp_block, pc); |
| 185 | } else { | 185 | } else { |
| 186 | pc = DecodeOther(tmp_block, bb, pc); | 186 | pc = DecodeOther(tmp_block, pc); |
| 187 | } | 187 | } |
| 188 | 188 | ||
| 189 | // Some instructions (like SSY) don't have a predicate field, they are always unconditionally | 189 | // Some instructions (like SSY) don't have a predicate field, they are always unconditionally |
| @@ -192,11 +192,14 @@ u32 ShaderIR::DecodeInstr(BasicBlock& bb, u32 pc) { | |||
| 192 | const auto pred_index = static_cast<u32>(instr.pred.pred_index); | 192 | const auto pred_index = static_cast<u32>(instr.pred.pred_index); |
| 193 | 193 | ||
| 194 | if (can_be_predicated && pred_index != static_cast<u32>(Pred::UnusedIndex)) { | 194 | if (can_be_predicated && pred_index != static_cast<u32>(Pred::UnusedIndex)) { |
| 195 | bb.push_back( | 195 | const Node conditional = |
| 196 | Conditional(GetPredicate(pred_index, instr.negate_pred != 0), std::move(tmp_block))); | 196 | Conditional(GetPredicate(pred_index, instr.negate_pred != 0), std::move(tmp_block)); |
| 197 | global_code.push_back(conditional); | ||
| 198 | bb.push_back(conditional); | ||
| 197 | } else { | 199 | } else { |
| 198 | for (auto& node : tmp_block) { | 200 | for (auto& node : tmp_block) { |
| 199 | bb.push_back(std::move(node)); | 201 | global_code.push_back(node); |
| 202 | bb.push_back(node); | ||
| 200 | } | 203 | } |
| 201 | } | 204 | } |
| 202 | 205 | ||
diff --git a/src/video_core/shader/decode/arithmetic.cpp b/src/video_core/shader/decode/arithmetic.cpp index 51b8d55d4..187123c04 100644 --- a/src/video_core/shader/decode/arithmetic.cpp +++ b/src/video_core/shader/decode/arithmetic.cpp | |||
| @@ -13,7 +13,7 @@ using Tegra::Shader::Instruction; | |||
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | using Tegra::Shader::SubOp; | 14 | using Tegra::Shader::SubOp; |
| 15 | 15 | ||
| 16 | u32 ShaderIR::DecodeArithmetic(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 16 | u32 ShaderIR::DecodeArithmetic(BasicBlock& bb, u32 pc) { |
| 17 | const Instruction instr = {program_code[pc]}; | 17 | const Instruction instr = {program_code[pc]}; |
| 18 | const auto opcode = OpCode::Decode(instr); | 18 | const auto opcode = OpCode::Decode(instr); |
| 19 | 19 | ||
diff --git a/src/video_core/shader/decode/arithmetic_half.cpp b/src/video_core/shader/decode/arithmetic_half.cpp index 37eef2bf2..c68e613cd 100644 --- a/src/video_core/shader/decode/arithmetic_half.cpp +++ b/src/video_core/shader/decode/arithmetic_half.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeArithmeticHalf(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeArithmeticHalf(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/arithmetic_half_immediate.cpp b/src/video_core/shader/decode/arithmetic_half_immediate.cpp index 7b4f7d284..5c280a1a6 100644 --- a/src/video_core/shader/decode/arithmetic_half_immediate.cpp +++ b/src/video_core/shader/decode/arithmetic_half_immediate.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeArithmeticHalfImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeArithmeticHalfImmediate(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/arithmetic_immediate.cpp b/src/video_core/shader/decode/arithmetic_immediate.cpp index 4fd3db54e..1c6da94b4 100644 --- a/src/video_core/shader/decode/arithmetic_immediate.cpp +++ b/src/video_core/shader/decode/arithmetic_immediate.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeArithmeticImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeArithmeticImmediate(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/arithmetic_integer.cpp b/src/video_core/shader/decode/arithmetic_integer.cpp index cc9a76a19..b471522f0 100644 --- a/src/video_core/shader/decode/arithmetic_integer.cpp +++ b/src/video_core/shader/decode/arithmetic_integer.cpp | |||
| @@ -15,7 +15,7 @@ using Tegra::Shader::OpCode; | |||
| 15 | using Tegra::Shader::Pred; | 15 | using Tegra::Shader::Pred; |
| 16 | using Tegra::Shader::Register; | 16 | using Tegra::Shader::Register; |
| 17 | 17 | ||
| 18 | u32 ShaderIR::DecodeArithmeticInteger(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 18 | u32 ShaderIR::DecodeArithmeticInteger(BasicBlock& bb, u32 pc) { |
| 19 | const Instruction instr = {program_code[pc]}; | 19 | const Instruction instr = {program_code[pc]}; |
| 20 | const auto opcode = OpCode::Decode(instr); | 20 | const auto opcode = OpCode::Decode(instr); |
| 21 | 21 | ||
diff --git a/src/video_core/shader/decode/arithmetic_integer_immediate.cpp b/src/video_core/shader/decode/arithmetic_integer_immediate.cpp index b26a6e473..3cbaeeaf5 100644 --- a/src/video_core/shader/decode/arithmetic_integer_immediate.cpp +++ b/src/video_core/shader/decode/arithmetic_integer_immediate.cpp | |||
| @@ -16,7 +16,7 @@ using Tegra::Shader::Pred; | |||
| 16 | using Tegra::Shader::PredicateResultMode; | 16 | using Tegra::Shader::PredicateResultMode; |
| 17 | using Tegra::Shader::Register; | 17 | using Tegra::Shader::Register; |
| 18 | 18 | ||
| 19 | u32 ShaderIR::DecodeArithmeticIntegerImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 19 | u32 ShaderIR::DecodeArithmeticIntegerImmediate(BasicBlock& bb, u32 pc) { |
| 20 | const Instruction instr = {program_code[pc]}; | 20 | const Instruction instr = {program_code[pc]}; |
| 21 | const auto opcode = OpCode::Decode(instr); | 21 | const auto opcode = OpCode::Decode(instr); |
| 22 | 22 | ||
diff --git a/src/video_core/shader/decode/bfe.cpp b/src/video_core/shader/decode/bfe.cpp index 0734141b0..d3244fd40 100644 --- a/src/video_core/shader/decode/bfe.cpp +++ b/src/video_core/shader/decode/bfe.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeBfe(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeBfe(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/bfi.cpp b/src/video_core/shader/decode/bfi.cpp index 942d6729d..ddb1872c6 100644 --- a/src/video_core/shader/decode/bfi.cpp +++ b/src/video_core/shader/decode/bfi.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeBfi(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeBfi(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/conversion.cpp b/src/video_core/shader/decode/conversion.cpp index 728a393a1..af3716593 100644 --- a/src/video_core/shader/decode/conversion.cpp +++ b/src/video_core/shader/decode/conversion.cpp | |||
| @@ -13,7 +13,7 @@ using Tegra::Shader::Instruction; | |||
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | using Tegra::Shader::Register; | 14 | using Tegra::Shader::Register; |
| 15 | 15 | ||
| 16 | u32 ShaderIR::DecodeConversion(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 16 | u32 ShaderIR::DecodeConversion(BasicBlock& bb, u32 pc) { |
| 17 | const Instruction instr = {program_code[pc]}; | 17 | const Instruction instr = {program_code[pc]}; |
| 18 | const auto opcode = OpCode::Decode(instr); | 18 | const auto opcode = OpCode::Decode(instr); |
| 19 | 19 | ||
diff --git a/src/video_core/shader/decode/ffma.cpp b/src/video_core/shader/decode/ffma.cpp index 52f39d3ff..a72f1503d 100644 --- a/src/video_core/shader/decode/ffma.cpp +++ b/src/video_core/shader/decode/ffma.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeFfma(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeFfma(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/float_set.cpp b/src/video_core/shader/decode/float_set.cpp index 9f9da2278..bc49386ab 100644 --- a/src/video_core/shader/decode/float_set.cpp +++ b/src/video_core/shader/decode/float_set.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeFloatSet(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeFloatSet(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/float_set_predicate.cpp b/src/video_core/shader/decode/float_set_predicate.cpp index dd3aef6f2..1f12a59f5 100644 --- a/src/video_core/shader/decode/float_set_predicate.cpp +++ b/src/video_core/shader/decode/float_set_predicate.cpp | |||
| @@ -13,7 +13,7 @@ using Tegra::Shader::Instruction; | |||
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | using Tegra::Shader::Pred; | 14 | using Tegra::Shader::Pred; |
| 15 | 15 | ||
| 16 | u32 ShaderIR::DecodeFloatSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 16 | u32 ShaderIR::DecodeFloatSetPredicate(BasicBlock& bb, u32 pc) { |
| 17 | const Instruction instr = {program_code[pc]}; | 17 | const Instruction instr = {program_code[pc]}; |
| 18 | const auto opcode = OpCode::Decode(instr); | 18 | const auto opcode = OpCode::Decode(instr); |
| 19 | 19 | ||
diff --git a/src/video_core/shader/decode/half_set.cpp b/src/video_core/shader/decode/half_set.cpp index dfd7cb98f..e34deeff4 100644 --- a/src/video_core/shader/decode/half_set.cpp +++ b/src/video_core/shader/decode/half_set.cpp | |||
| @@ -14,7 +14,7 @@ namespace VideoCommon::Shader { | |||
| 14 | using Tegra::Shader::Instruction; | 14 | using Tegra::Shader::Instruction; |
| 15 | using Tegra::Shader::OpCode; | 15 | using Tegra::Shader::OpCode; |
| 16 | 16 | ||
| 17 | u32 ShaderIR::DecodeHalfSet(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 17 | u32 ShaderIR::DecodeHalfSet(BasicBlock& bb, u32 pc) { |
| 18 | const Instruction instr = {program_code[pc]}; | 18 | const Instruction instr = {program_code[pc]}; |
| 19 | const auto opcode = OpCode::Decode(instr); | 19 | const auto opcode = OpCode::Decode(instr); |
| 20 | 20 | ||
diff --git a/src/video_core/shader/decode/half_set_predicate.cpp b/src/video_core/shader/decode/half_set_predicate.cpp index 53c44ae5a..72cc3d5c8 100644 --- a/src/video_core/shader/decode/half_set_predicate.cpp +++ b/src/video_core/shader/decode/half_set_predicate.cpp | |||
| @@ -13,7 +13,7 @@ using Tegra::Shader::Instruction; | |||
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | using Tegra::Shader::Pred; | 14 | using Tegra::Shader::Pred; |
| 15 | 15 | ||
| 16 | u32 ShaderIR::DecodeHalfSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 16 | u32 ShaderIR::DecodeHalfSetPredicate(BasicBlock& bb, u32 pc) { |
| 17 | const Instruction instr = {program_code[pc]}; | 17 | const Instruction instr = {program_code[pc]}; |
| 18 | const auto opcode = OpCode::Decode(instr); | 18 | const auto opcode = OpCode::Decode(instr); |
| 19 | 19 | ||
diff --git a/src/video_core/shader/decode/hfma2.cpp b/src/video_core/shader/decode/hfma2.cpp index 43a0a9e10..465c624a8 100644 --- a/src/video_core/shader/decode/hfma2.cpp +++ b/src/video_core/shader/decode/hfma2.cpp | |||
| @@ -16,7 +16,7 @@ using Tegra::Shader::HalfType; | |||
| 16 | using Tegra::Shader::Instruction; | 16 | using Tegra::Shader::Instruction; |
| 17 | using Tegra::Shader::OpCode; | 17 | using Tegra::Shader::OpCode; |
| 18 | 18 | ||
| 19 | u32 ShaderIR::DecodeHfma2(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 19 | u32 ShaderIR::DecodeHfma2(BasicBlock& bb, u32 pc) { |
| 20 | const Instruction instr = {program_code[pc]}; | 20 | const Instruction instr = {program_code[pc]}; |
| 21 | const auto opcode = OpCode::Decode(instr); | 21 | const auto opcode = OpCode::Decode(instr); |
| 22 | 22 | ||
diff --git a/src/video_core/shader/decode/integer_set.cpp b/src/video_core/shader/decode/integer_set.cpp index 16eb3985f..54068469f 100644 --- a/src/video_core/shader/decode/integer_set.cpp +++ b/src/video_core/shader/decode/integer_set.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeIntegerSet(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeIntegerSet(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/integer_set_predicate.cpp b/src/video_core/shader/decode/integer_set_predicate.cpp index daf97174b..2d17350e3 100644 --- a/src/video_core/shader/decode/integer_set_predicate.cpp +++ b/src/video_core/shader/decode/integer_set_predicate.cpp | |||
| @@ -13,7 +13,7 @@ using Tegra::Shader::Instruction; | |||
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | using Tegra::Shader::Pred; | 14 | using Tegra::Shader::Pred; |
| 15 | 15 | ||
| 16 | u32 ShaderIR::DecodeIntegerSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 16 | u32 ShaderIR::DecodeIntegerSetPredicate(BasicBlock& bb, u32 pc) { |
| 17 | const Instruction instr = {program_code[pc]}; | 17 | const Instruction instr = {program_code[pc]}; |
| 18 | const auto opcode = OpCode::Decode(instr); | 18 | const auto opcode = OpCode::Decode(instr); |
| 19 | 19 | ||
diff --git a/src/video_core/shader/decode/memory.cpp b/src/video_core/shader/decode/memory.cpp index 4d075f088..bdfb609d0 100644 --- a/src/video_core/shader/decode/memory.cpp +++ b/src/video_core/shader/decode/memory.cpp | |||
| @@ -36,7 +36,7 @@ static std::size_t GetCoordCount(TextureType texture_type) { | |||
| 36 | } | 36 | } |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | u32 ShaderIR::DecodeMemory(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 39 | u32 ShaderIR::DecodeMemory(BasicBlock& bb, u32 pc) { |
| 40 | const Instruction instr = {program_code[pc]}; | 40 | const Instruction instr = {program_code[pc]}; |
| 41 | const auto opcode = OpCode::Decode(instr); | 41 | const auto opcode = OpCode::Decode(instr); |
| 42 | 42 | ||
| @@ -137,7 +137,8 @@ u32 ShaderIR::DecodeMemory(BasicBlock& bb, const BasicBlock& code, u32 pc) { | |||
| 137 | }(); | 137 | }(); |
| 138 | 138 | ||
| 139 | const Node addr_register = GetRegister(instr.gpr8); | 139 | const Node addr_register = GetRegister(instr.gpr8); |
| 140 | const Node base_address = TrackCbuf(addr_register, code, static_cast<s64>(code.size())); | 140 | const Node base_address = |
| 141 | TrackCbuf(addr_register, global_code, static_cast<s64>(global_code.size())); | ||
| 141 | const auto cbuf = std::get_if<CbufNode>(base_address); | 142 | const auto cbuf = std::get_if<CbufNode>(base_address); |
| 142 | ASSERT(cbuf != nullptr); | 143 | ASSERT(cbuf != nullptr); |
| 143 | const auto cbuf_offset_imm = std::get_if<ImmediateNode>(cbuf->GetOffset()); | 144 | const auto cbuf_offset_imm = std::get_if<ImmediateNode>(cbuf->GetOffset()); |
diff --git a/src/video_core/shader/decode/other.cpp b/src/video_core/shader/decode/other.cpp index c1e5f4efb..6e6795ba7 100644 --- a/src/video_core/shader/decode/other.cpp +++ b/src/video_core/shader/decode/other.cpp | |||
| @@ -14,7 +14,7 @@ using Tegra::Shader::Instruction; | |||
| 14 | using Tegra::Shader::OpCode; | 14 | using Tegra::Shader::OpCode; |
| 15 | using Tegra::Shader::Register; | 15 | using Tegra::Shader::Register; |
| 16 | 16 | ||
| 17 | u32 ShaderIR::DecodeOther(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 17 | u32 ShaderIR::DecodeOther(BasicBlock& bb, u32 pc) { |
| 18 | const Instruction instr = {program_code[pc]}; | 18 | const Instruction instr = {program_code[pc]}; |
| 19 | const auto opcode = OpCode::Decode(instr); | 19 | const auto opcode = OpCode::Decode(instr); |
| 20 | 20 | ||
diff --git a/src/video_core/shader/decode/predicate_set_predicate.cpp b/src/video_core/shader/decode/predicate_set_predicate.cpp index 1717f0653..6ea6daceb 100644 --- a/src/video_core/shader/decode/predicate_set_predicate.cpp +++ b/src/video_core/shader/decode/predicate_set_predicate.cpp | |||
| @@ -13,7 +13,7 @@ using Tegra::Shader::Instruction; | |||
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | using Tegra::Shader::Pred; | 14 | using Tegra::Shader::Pred; |
| 15 | 15 | ||
| 16 | u32 ShaderIR::DecodePredicateSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 16 | u32 ShaderIR::DecodePredicateSetPredicate(BasicBlock& bb, u32 pc) { |
| 17 | const Instruction instr = {program_code[pc]}; | 17 | const Instruction instr = {program_code[pc]}; |
| 18 | const auto opcode = OpCode::Decode(instr); | 18 | const auto opcode = OpCode::Decode(instr); |
| 19 | 19 | ||
diff --git a/src/video_core/shader/decode/predicate_set_register.cpp b/src/video_core/shader/decode/predicate_set_register.cpp index 8bd15fb00..58d20ceb5 100644 --- a/src/video_core/shader/decode/predicate_set_register.cpp +++ b/src/video_core/shader/decode/predicate_set_register.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodePredicateSetRegister(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodePredicateSetRegister(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/register_set_predicate.cpp b/src/video_core/shader/decode/register_set_predicate.cpp index bdb4424a6..14bce9fa4 100644 --- a/src/video_core/shader/decode/register_set_predicate.cpp +++ b/src/video_core/shader/decode/register_set_predicate.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeRegisterSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeRegisterSetPredicate(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/shift.cpp b/src/video_core/shader/decode/shift.cpp index 6623f8ff9..0982fae59 100644 --- a/src/video_core/shader/decode/shift.cpp +++ b/src/video_core/shader/decode/shift.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeShift(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeShift(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/decode/video.cpp b/src/video_core/shader/decode/video.cpp index c3432356d..609b3a257 100644 --- a/src/video_core/shader/decode/video.cpp +++ b/src/video_core/shader/decode/video.cpp | |||
| @@ -15,7 +15,7 @@ using Tegra::Shader::Pred; | |||
| 15 | using Tegra::Shader::VideoType; | 15 | using Tegra::Shader::VideoType; |
| 16 | using Tegra::Shader::VmadShr; | 16 | using Tegra::Shader::VmadShr; |
| 17 | 17 | ||
| 18 | u32 ShaderIR::DecodeVideo(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 18 | u32 ShaderIR::DecodeVideo(BasicBlock& bb, u32 pc) { |
| 19 | const Instruction instr = {program_code[pc]}; | 19 | const Instruction instr = {program_code[pc]}; |
| 20 | const auto opcode = OpCode::Decode(instr); | 20 | const auto opcode = OpCode::Decode(instr); |
| 21 | 21 | ||
diff --git a/src/video_core/shader/decode/xmad.cpp b/src/video_core/shader/decode/xmad.cpp index 9cb864500..95df8c319 100644 --- a/src/video_core/shader/decode/xmad.cpp +++ b/src/video_core/shader/decode/xmad.cpp | |||
| @@ -12,7 +12,7 @@ namespace VideoCommon::Shader { | |||
| 12 | using Tegra::Shader::Instruction; | 12 | using Tegra::Shader::Instruction; |
| 13 | using Tegra::Shader::OpCode; | 13 | using Tegra::Shader::OpCode; |
| 14 | 14 | ||
| 15 | u32 ShaderIR::DecodeXmad(BasicBlock& bb, const BasicBlock& code, u32 pc) { | 15 | u32 ShaderIR::DecodeXmad(BasicBlock& bb, u32 pc) { |
| 16 | const Instruction instr = {program_code[pc]}; | 16 | const Instruction instr = {program_code[pc]}; |
| 17 | const auto opcode = OpCode::Decode(instr); | 17 | const auto opcode = OpCode::Decode(instr); |
| 18 | 18 | ||
diff --git a/src/video_core/shader/shader_ir.h b/src/video_core/shader/shader_ir.h index 6e42e3dfb..e229e59e0 100644 --- a/src/video_core/shader/shader_ir.h +++ b/src/video_core/shader/shader_ir.h | |||
| @@ -591,31 +591,31 @@ private: | |||
| 591 | */ | 591 | */ |
| 592 | u32 DecodeInstr(BasicBlock& bb, u32 pc); | 592 | u32 DecodeInstr(BasicBlock& bb, u32 pc); |
| 593 | 593 | ||
| 594 | u32 DecodeArithmetic(BasicBlock& bb, const BasicBlock& code, u32 pc); | 594 | u32 DecodeArithmetic(BasicBlock& bb, u32 pc); |
| 595 | u32 DecodeArithmeticImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc); | 595 | u32 DecodeArithmeticImmediate(BasicBlock& bb, u32 pc); |
| 596 | u32 DecodeBfe(BasicBlock& bb, const BasicBlock& code, u32 pc); | 596 | u32 DecodeBfe(BasicBlock& bb, u32 pc); |
| 597 | u32 DecodeBfi(BasicBlock& bb, const BasicBlock& code, u32 pc); | 597 | u32 DecodeBfi(BasicBlock& bb, u32 pc); |
| 598 | u32 DecodeShift(BasicBlock& bb, const BasicBlock& code, u32 pc); | 598 | u32 DecodeShift(BasicBlock& bb, u32 pc); |
| 599 | u32 DecodeArithmeticInteger(BasicBlock& bb, const BasicBlock& code, u32 pc); | 599 | u32 DecodeArithmeticInteger(BasicBlock& bb, u32 pc); |
| 600 | u32 DecodeArithmeticIntegerImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc); | 600 | u32 DecodeArithmeticIntegerImmediate(BasicBlock& bb, u32 pc); |
| 601 | u32 DecodeArithmeticHalf(BasicBlock& bb, const BasicBlock& code, u32 pc); | 601 | u32 DecodeArithmeticHalf(BasicBlock& bb, u32 pc); |
| 602 | u32 DecodeArithmeticHalfImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc); | 602 | u32 DecodeArithmeticHalfImmediate(BasicBlock& bb, u32 pc); |
| 603 | u32 DecodeFfma(BasicBlock& bb, const BasicBlock& code, u32 pc); | 603 | u32 DecodeFfma(BasicBlock& bb, u32 pc); |
| 604 | u32 DecodeHfma2(BasicBlock& bb, const BasicBlock& code, u32 pc); | 604 | u32 DecodeHfma2(BasicBlock& bb, u32 pc); |
| 605 | u32 DecodeConversion(BasicBlock& bb, const BasicBlock& code, u32 pc); | 605 | u32 DecodeConversion(BasicBlock& bb, u32 pc); |
| 606 | u32 DecodeMemory(BasicBlock& bb, const BasicBlock& code, u32 pc); | 606 | u32 DecodeMemory(BasicBlock& bb, u32 pc); |
| 607 | u32 DecodeFloatSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); | 607 | u32 DecodeFloatSetPredicate(BasicBlock& bb, u32 pc); |
| 608 | u32 DecodeIntegerSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); | 608 | u32 DecodeIntegerSetPredicate(BasicBlock& bb, u32 pc); |
| 609 | u32 DecodeHalfSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); | 609 | u32 DecodeHalfSetPredicate(BasicBlock& bb, u32 pc); |
| 610 | u32 DecodePredicateSetRegister(BasicBlock& bb, const BasicBlock& code, u32 pc); | 610 | u32 DecodePredicateSetRegister(BasicBlock& bb, u32 pc); |
| 611 | u32 DecodePredicateSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); | 611 | u32 DecodePredicateSetPredicate(BasicBlock& bb, u32 pc); |
| 612 | u32 DecodeRegisterSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); | 612 | u32 DecodeRegisterSetPredicate(BasicBlock& bb, u32 pc); |
| 613 | u32 DecodeFloatSet(BasicBlock& bb, const BasicBlock& code, u32 pc); | 613 | u32 DecodeFloatSet(BasicBlock& bb, u32 pc); |
| 614 | u32 DecodeIntegerSet(BasicBlock& bb, const BasicBlock& code, u32 pc); | 614 | u32 DecodeIntegerSet(BasicBlock& bb, u32 pc); |
| 615 | u32 DecodeHalfSet(BasicBlock& bb, const BasicBlock& code, u32 pc); | 615 | u32 DecodeHalfSet(BasicBlock& bb, u32 pc); |
| 616 | u32 DecodeVideo(BasicBlock& bb, const BasicBlock& code, u32 pc); | 616 | u32 DecodeVideo(BasicBlock& bb, u32 pc); |
| 617 | u32 DecodeXmad(BasicBlock& bb, const BasicBlock& code, u32 pc); | 617 | u32 DecodeXmad(BasicBlock& bb, u32 pc); |
| 618 | u32 DecodeOther(BasicBlock& bb, const BasicBlock& code, u32 pc); | 618 | u32 DecodeOther(BasicBlock& bb, u32 pc); |
| 619 | 619 | ||
| 620 | /// Internalizes node's data and returns a managed pointer to a clone of that node | 620 | /// Internalizes node's data and returns a managed pointer to a clone of that node |
| 621 | Node StoreNode(NodeData&& node_data); | 621 | Node StoreNode(NodeData&& node_data); |
| @@ -804,6 +804,7 @@ private: | |||
| 804 | std::map<std::pair<u32, u32>, ExitMethod> exit_method_map; | 804 | std::map<std::pair<u32, u32>, ExitMethod> exit_method_map; |
| 805 | 805 | ||
| 806 | std::map<u32, BasicBlock> basic_blocks; | 806 | std::map<u32, BasicBlock> basic_blocks; |
| 807 | BasicBlock global_code; | ||
| 807 | 808 | ||
| 808 | std::vector<std::unique_ptr<NodeData>> stored_nodes; | 809 | std::vector<std::unique_ptr<NodeData>> stored_nodes; |
| 809 | 810 | ||