diff options
| author | 2018-12-28 20:00:36 -0300 | |
|---|---|---|
| committer | 2019-01-15 17:54:53 -0300 | |
| commit | 170c8212bbb10129dfbaed8eb7ab67138c932af2 (patch) | |
| tree | 22c061870f548cc06d6bd9225f9850fbe9562be1 /src | |
| parent | shader_decode: Improve zero flag implementation (diff) | |
| download | yuzu-170c8212bbb10129dfbaed8eb7ab67138c932af2.tar.gz yuzu-170c8212bbb10129dfbaed8eb7ab67138c932af2.tar.xz yuzu-170c8212bbb10129dfbaed8eb7ab67138c932af2.zip | |
shader_ir: Pass to decoder functions basic block's code
Diffstat (limited to 'src')
27 files changed, 83 insertions, 82 deletions
diff --git a/src/video_core/shader/decode.cpp b/src/video_core/shader/decode.cpp index 3265de869..6fdcac784 100644 --- a/src/video_core/shader/decode.cpp +++ b/src/video_core/shader/decode.cpp | |||
| @@ -151,38 +151,39 @@ 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 & code, u32 pc)> decoders = { | 154 | static const std::map<OpCode::Type, u32 (ShaderIR::*)(BasicBlock&, const BasicBlock&, u32)> |
| 155 | {OpCode::Type::Arithmetic, &ShaderIR::DecodeArithmetic}, | 155 | decoders = { |
| 156 | {OpCode::Type::ArithmeticImmediate, &ShaderIR::DecodeArithmeticImmediate}, | 156 | {OpCode::Type::Arithmetic, &ShaderIR::DecodeArithmetic}, |
| 157 | {OpCode::Type::Bfe, &ShaderIR::DecodeBfe}, | 157 | {OpCode::Type::ArithmeticImmediate, &ShaderIR::DecodeArithmeticImmediate}, |
| 158 | {OpCode::Type::Bfi, &ShaderIR::DecodeBfi}, | 158 | {OpCode::Type::Bfe, &ShaderIR::DecodeBfe}, |
| 159 | {OpCode::Type::Shift, &ShaderIR::DecodeShift}, | 159 | {OpCode::Type::Bfi, &ShaderIR::DecodeBfi}, |
| 160 | {OpCode::Type::ArithmeticInteger, &ShaderIR::DecodeArithmeticInteger}, | 160 | {OpCode::Type::Shift, &ShaderIR::DecodeShift}, |
| 161 | {OpCode::Type::ArithmeticIntegerImmediate, &ShaderIR::DecodeArithmeticIntegerImmediate}, | 161 | {OpCode::Type::ArithmeticInteger, &ShaderIR::DecodeArithmeticInteger}, |
| 162 | {OpCode::Type::ArithmeticHalf, &ShaderIR::DecodeArithmeticHalf}, | 162 | {OpCode::Type::ArithmeticIntegerImmediate, &ShaderIR::DecodeArithmeticIntegerImmediate}, |
| 163 | {OpCode::Type::ArithmeticHalfImmediate, &ShaderIR::DecodeArithmeticHalfImmediate}, | 163 | {OpCode::Type::ArithmeticHalf, &ShaderIR::DecodeArithmeticHalf}, |
| 164 | {OpCode::Type::Ffma, &ShaderIR::DecodeFfma}, | 164 | {OpCode::Type::ArithmeticHalfImmediate, &ShaderIR::DecodeArithmeticHalfImmediate}, |
| 165 | {OpCode::Type::Hfma2, &ShaderIR::DecodeHfma2}, | 165 | {OpCode::Type::Ffma, &ShaderIR::DecodeFfma}, |
| 166 | {OpCode::Type::Conversion, &ShaderIR::DecodeConversion}, | 166 | {OpCode::Type::Hfma2, &ShaderIR::DecodeHfma2}, |
| 167 | {OpCode::Type::Memory, &ShaderIR::DecodeMemory}, | 167 | {OpCode::Type::Conversion, &ShaderIR::DecodeConversion}, |
| 168 | {OpCode::Type::FloatSetPredicate, &ShaderIR::DecodeFloatSetPredicate}, | 168 | {OpCode::Type::Memory, &ShaderIR::DecodeMemory}, |
| 169 | {OpCode::Type::IntegerSetPredicate, &ShaderIR::DecodeIntegerSetPredicate}, | 169 | {OpCode::Type::FloatSetPredicate, &ShaderIR::DecodeFloatSetPredicate}, |
| 170 | {OpCode::Type::HalfSetPredicate, &ShaderIR::DecodeHalfSetPredicate}, | 170 | {OpCode::Type::IntegerSetPredicate, &ShaderIR::DecodeIntegerSetPredicate}, |
| 171 | {OpCode::Type::PredicateSetRegister, &ShaderIR::DecodePredicateSetRegister}, | 171 | {OpCode::Type::HalfSetPredicate, &ShaderIR::DecodeHalfSetPredicate}, |
| 172 | {OpCode::Type::PredicateSetPredicate, &ShaderIR::DecodePredicateSetPredicate}, | 172 | {OpCode::Type::PredicateSetRegister, &ShaderIR::DecodePredicateSetRegister}, |
| 173 | {OpCode::Type::RegisterSetPredicate, &ShaderIR::DecodeRegisterSetPredicate}, | 173 | {OpCode::Type::PredicateSetPredicate, &ShaderIR::DecodePredicateSetPredicate}, |
| 174 | {OpCode::Type::FloatSet, &ShaderIR::DecodeFloatSet}, | 174 | {OpCode::Type::RegisterSetPredicate, &ShaderIR::DecodeRegisterSetPredicate}, |
| 175 | {OpCode::Type::IntegerSet, &ShaderIR::DecodeIntegerSet}, | 175 | {OpCode::Type::FloatSet, &ShaderIR::DecodeFloatSet}, |
| 176 | {OpCode::Type::HalfSet, &ShaderIR::DecodeHalfSet}, | 176 | {OpCode::Type::IntegerSet, &ShaderIR::DecodeIntegerSet}, |
| 177 | {OpCode::Type::Video, &ShaderIR::DecodeVideo}, | 177 | {OpCode::Type::HalfSet, &ShaderIR::DecodeHalfSet}, |
| 178 | {OpCode::Type::Xmad, &ShaderIR::DecodeXmad}, | 178 | {OpCode::Type::Video, &ShaderIR::DecodeVideo}, |
| 179 | }; | 179 | {OpCode::Type::Xmad, &ShaderIR::DecodeXmad}, |
| 180 | 180 | }; | |
| 181 | std::vector<Node> code; | 181 | |
| 182 | std::vector<Node> tmp_block; | ||
| 182 | 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()) { |
| 183 | pc = (this->*decoder->second)(code, pc); | 184 | pc = (this->*decoder->second)(tmp_block, bb, pc); |
| 184 | } else { | 185 | } else { |
| 185 | pc = DecodeOther(code, pc); | 186 | pc = DecodeOther(tmp_block, bb, pc); |
| 186 | } | 187 | } |
| 187 | 188 | ||
| 188 | // 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,9 +193,9 @@ u32 ShaderIR::DecodeInstr(BasicBlock& bb, u32 pc) { | |||
| 192 | 193 | ||
| 193 | if (can_be_predicated && pred_index != static_cast<u32>(Pred::UnusedIndex)) { | 194 | if (can_be_predicated && pred_index != static_cast<u32>(Pred::UnusedIndex)) { |
| 194 | bb.push_back( | 195 | bb.push_back( |
| 195 | Conditional(GetPredicate(pred_index, instr.negate_pred != 0), std::move(code))); | 196 | Conditional(GetPredicate(pred_index, instr.negate_pred != 0), std::move(tmp_block))); |
| 196 | } else { | 197 | } else { |
| 197 | for (auto& node : code) { | 198 | for (auto& node : tmp_block) { |
| 198 | bb.push_back(std::move(node)); | 199 | bb.push_back(std::move(node)); |
| 199 | } | 200 | } |
| 200 | } | 201 | } |
diff --git a/src/video_core/shader/decode/arithmetic.cpp b/src/video_core/shader/decode/arithmetic.cpp index 926abcc8e..e7847f614 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, u32 pc) { | 16 | u32 ShaderIR::DecodeArithmetic(BasicBlock& bb, const BasicBlock& code, 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 9547eae5d..a237dcb92 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, u32 pc) { | 15 | u32 ShaderIR::DecodeArithmeticHalf(BasicBlock& bb, const BasicBlock& code, 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 5c280a1a6..7b4f7d284 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, u32 pc) { | 15 | u32 ShaderIR::DecodeArithmeticHalfImmediate(BasicBlock& bb, const BasicBlock& code, 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 1c6da94b4..4fd3db54e 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, u32 pc) { | 15 | u32 ShaderIR::DecodeArithmeticImmediate(BasicBlock& bb, const BasicBlock& code, 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 edd1695f4..4a8cc1a1c 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, u32 pc) { | 18 | u32 ShaderIR::DecodeArithmeticInteger(BasicBlock& bb, const BasicBlock& code, 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 3cbaeeaf5..b26a6e473 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, u32 pc) { | 19 | u32 ShaderIR::DecodeArithmeticIntegerImmediate(BasicBlock& bb, const BasicBlock& code, 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 d3244fd40..0734141b0 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, u32 pc) { | 15 | u32 ShaderIR::DecodeBfe(BasicBlock& bb, const BasicBlock& code, 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 ddb1872c6..942d6729d 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, u32 pc) { | 15 | u32 ShaderIR::DecodeBfi(BasicBlock& bb, const BasicBlock& code, 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 d5c75e8eb..ee18d3a99 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, u32 pc) { | 16 | u32 ShaderIR::DecodeConversion(BasicBlock& bb, const BasicBlock& code, 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 f3ab3d2e8..be8dc2230 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, u32 pc) { | 15 | u32 ShaderIR::DecodeFfma(BasicBlock& bb, const BasicBlock& code, 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 8e266cc4e..ba846f1bd 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, u32 pc) { | 15 | u32 ShaderIR::DecodeFloatSet(BasicBlock& bb, const BasicBlock& code, 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 5dd085fea..e88b04d18 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, u32 pc) { | 16 | u32 ShaderIR::DecodeFloatSetPredicate(BasicBlock& bb, const BasicBlock& code, 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 e34deeff4..dfd7cb98f 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, u32 pc) { | 17 | u32 ShaderIR::DecodeHalfSet(BasicBlock& bb, const BasicBlock& code, 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 72cc3d5c8..53c44ae5a 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, u32 pc) { | 16 | u32 ShaderIR::DecodeHalfSetPredicate(BasicBlock& bb, const BasicBlock& code, 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 bf7491804..4a6b945f9 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, u32 pc) { | 19 | u32 ShaderIR::DecodeHfma2(BasicBlock& bb, const BasicBlock& code, 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 eba1c5123..85e67b03b 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, u32 pc) { | 15 | u32 ShaderIR::DecodeIntegerSet(BasicBlock& bb, const BasicBlock& code, 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 d76b8018c..c8b105a08 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, u32 pc) { | 16 | u32 ShaderIR::DecodeIntegerSetPredicate(BasicBlock& bb, const BasicBlock& code, 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 5ae3f344d..ae71672d6 100644 --- a/src/video_core/shader/decode/memory.cpp +++ b/src/video_core/shader/decode/memory.cpp | |||
| @@ -35,7 +35,7 @@ static std::size_t GetCoordCount(TextureType texture_type) { | |||
| 35 | } | 35 | } |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | u32 ShaderIR::DecodeMemory(BasicBlock& bb, u32 pc) { | 38 | u32 ShaderIR::DecodeMemory(BasicBlock& bb, const BasicBlock& code, u32 pc) { |
| 39 | const Instruction instr = {program_code[pc]}; | 39 | const Instruction instr = {program_code[pc]}; |
| 40 | const auto opcode = OpCode::Decode(instr); | 40 | const auto opcode = OpCode::Decode(instr); |
| 41 | 41 | ||
diff --git a/src/video_core/shader/decode/other.cpp b/src/video_core/shader/decode/other.cpp index 6e6795ba7..c1e5f4efb 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, u32 pc) { | 17 | u32 ShaderIR::DecodeOther(BasicBlock& bb, const BasicBlock& code, 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 6ea6daceb..1717f0653 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, u32 pc) { | 16 | u32 ShaderIR::DecodePredicateSetPredicate(BasicBlock& bb, const BasicBlock& code, 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 58d20ceb5..8bd15fb00 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, u32 pc) { | 15 | u32 ShaderIR::DecodePredicateSetRegister(BasicBlock& bb, const BasicBlock& code, 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 14bce9fa4..bdb4424a6 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, u32 pc) { | 15 | u32 ShaderIR::DecodeRegisterSetPredicate(BasicBlock& bb, const BasicBlock& code, 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 e8ffdb818..85026bb37 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, u32 pc) { | 15 | u32 ShaderIR::DecodeShift(BasicBlock& bb, const BasicBlock& code, 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 609b3a257..c3432356d 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, u32 pc) { | 18 | u32 ShaderIR::DecodeVideo(BasicBlock& bb, const BasicBlock& code, 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 88f1be27d..3ceabecb5 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, u32 pc) { | 15 | u32 ShaderIR::DecodeXmad(BasicBlock& bb, const BasicBlock& code, 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 47f460bcf..96e7df6b6 100644 --- a/src/video_core/shader/shader_ir.h +++ b/src/video_core/shader/shader_ir.h | |||
| @@ -566,31 +566,31 @@ private: | |||
| 566 | */ | 566 | */ |
| 567 | u32 DecodeInstr(BasicBlock& bb, u32 pc); | 567 | u32 DecodeInstr(BasicBlock& bb, u32 pc); |
| 568 | 568 | ||
| 569 | u32 DecodeArithmetic(BasicBlock& bb, u32 pc); | 569 | u32 DecodeArithmetic(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 570 | u32 DecodeArithmeticImmediate(BasicBlock& bb, u32 pc); | 570 | u32 DecodeArithmeticImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 571 | u32 DecodeBfe(BasicBlock& bb, u32 pc); | 571 | u32 DecodeBfe(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 572 | u32 DecodeBfi(BasicBlock& bb, u32 pc); | 572 | u32 DecodeBfi(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 573 | u32 DecodeShift(BasicBlock& bb, u32 pc); | 573 | u32 DecodeShift(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 574 | u32 DecodeArithmeticInteger(BasicBlock& bb, u32 pc); | 574 | u32 DecodeArithmeticInteger(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 575 | u32 DecodeArithmeticIntegerImmediate(BasicBlock& bb, u32 pc); | 575 | u32 DecodeArithmeticIntegerImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 576 | u32 DecodeArithmeticHalf(BasicBlock& bb, u32 pc); | 576 | u32 DecodeArithmeticHalf(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 577 | u32 DecodeArithmeticHalfImmediate(BasicBlock& bb, u32 pc); | 577 | u32 DecodeArithmeticHalfImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 578 | u32 DecodeFfma(BasicBlock& bb, u32 pc); | 578 | u32 DecodeFfma(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 579 | u32 DecodeHfma2(BasicBlock& bb, u32 pc); | 579 | u32 DecodeHfma2(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 580 | u32 DecodeConversion(BasicBlock& bb, u32 pc); | 580 | u32 DecodeConversion(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 581 | u32 DecodeMemory(BasicBlock& bb, u32 pc); | 581 | u32 DecodeMemory(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 582 | u32 DecodeFloatSetPredicate(BasicBlock& bb, u32 pc); | 582 | u32 DecodeFloatSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 583 | u32 DecodeIntegerSetPredicate(BasicBlock& bb, u32 pc); | 583 | u32 DecodeIntegerSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 584 | u32 DecodeHalfSetPredicate(BasicBlock& bb, u32 pc); | 584 | u32 DecodeHalfSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 585 | u32 DecodePredicateSetRegister(BasicBlock& bb, u32 pc); | 585 | u32 DecodePredicateSetRegister(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 586 | u32 DecodePredicateSetPredicate(BasicBlock& bb, u32 pc); | 586 | u32 DecodePredicateSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 587 | u32 DecodeRegisterSetPredicate(BasicBlock& bb, u32 pc); | 587 | u32 DecodeRegisterSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 588 | u32 DecodeFloatSet(BasicBlock& bb, u32 pc); | 588 | u32 DecodeFloatSet(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 589 | u32 DecodeIntegerSet(BasicBlock& bb, u32 pc); | 589 | u32 DecodeIntegerSet(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 590 | u32 DecodeHalfSet(BasicBlock& bb, u32 pc); | 590 | u32 DecodeHalfSet(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 591 | u32 DecodeVideo(BasicBlock& bb, u32 pc); | 591 | u32 DecodeVideo(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 592 | u32 DecodeXmad(BasicBlock& bb, u32 pc); | 592 | u32 DecodeXmad(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 593 | u32 DecodeOther(BasicBlock& bb, u32 pc); | 593 | u32 DecodeOther(BasicBlock& bb, const BasicBlock& code, u32 pc); |
| 594 | 594 | ||
| 595 | /// Internalizes node's data and returns a managed pointer to a clone of that node | 595 | /// Internalizes node's data and returns a managed pointer to a clone of that node |
| 596 | Node StoreNode(NodeData&& node_data); | 596 | Node StoreNode(NodeData&& node_data); |