summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2018-12-28 20:00:36 -0300
committerGravatar ReinUsesLisp2019-01-15 17:54:53 -0300
commit170c8212bbb10129dfbaed8eb7ab67138c932af2 (patch)
tree22c061870f548cc06d6bd9225f9850fbe9562be1 /src
parentshader_decode: Improve zero flag implementation (diff)
downloadyuzu-170c8212bbb10129dfbaed8eb7ab67138c932af2.tar.gz
yuzu-170c8212bbb10129dfbaed8eb7ab67138c932af2.tar.xz
yuzu-170c8212bbb10129dfbaed8eb7ab67138c932af2.zip
shader_ir: Pass to decoder functions basic block's code
Diffstat (limited to 'src')
-rw-r--r--src/video_core/shader/decode.cpp65
-rw-r--r--src/video_core/shader/decode/arithmetic.cpp2
-rw-r--r--src/video_core/shader/decode/arithmetic_half.cpp2
-rw-r--r--src/video_core/shader/decode/arithmetic_half_immediate.cpp2
-rw-r--r--src/video_core/shader/decode/arithmetic_immediate.cpp2
-rw-r--r--src/video_core/shader/decode/arithmetic_integer.cpp2
-rw-r--r--src/video_core/shader/decode/arithmetic_integer_immediate.cpp2
-rw-r--r--src/video_core/shader/decode/bfe.cpp2
-rw-r--r--src/video_core/shader/decode/bfi.cpp2
-rw-r--r--src/video_core/shader/decode/conversion.cpp2
-rw-r--r--src/video_core/shader/decode/ffma.cpp2
-rw-r--r--src/video_core/shader/decode/float_set.cpp2
-rw-r--r--src/video_core/shader/decode/float_set_predicate.cpp2
-rw-r--r--src/video_core/shader/decode/half_set.cpp2
-rw-r--r--src/video_core/shader/decode/half_set_predicate.cpp2
-rw-r--r--src/video_core/shader/decode/hfma2.cpp2
-rw-r--r--src/video_core/shader/decode/integer_set.cpp2
-rw-r--r--src/video_core/shader/decode/integer_set_predicate.cpp2
-rw-r--r--src/video_core/shader/decode/memory.cpp2
-rw-r--r--src/video_core/shader/decode/other.cpp2
-rw-r--r--src/video_core/shader/decode/predicate_set_predicate.cpp2
-rw-r--r--src/video_core/shader/decode/predicate_set_register.cpp2
-rw-r--r--src/video_core/shader/decode/register_set_predicate.cpp2
-rw-r--r--src/video_core/shader/decode/shift.cpp2
-rw-r--r--src/video_core/shader/decode/video.cpp2
-rw-r--r--src/video_core/shader/decode/xmad.cpp2
-rw-r--r--src/video_core/shader/shader_ir.h50
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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::SubOp; 14using Tegra::Shader::SubOp;
15 15
16u32 ShaderIR::DecodeArithmetic(BasicBlock& bb, u32 pc) { 16u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeArithmeticHalf(BasicBlock& bb, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeArithmeticHalfImmediate(BasicBlock& bb, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeArithmeticImmediate(BasicBlock& bb, u32 pc) { 15u32 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;
15using Tegra::Shader::Pred; 15using Tegra::Shader::Pred;
16using Tegra::Shader::Register; 16using Tegra::Shader::Register;
17 17
18u32 ShaderIR::DecodeArithmeticInteger(BasicBlock& bb, u32 pc) { 18u32 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;
16using Tegra::Shader::PredicateResultMode; 16using Tegra::Shader::PredicateResultMode;
17using Tegra::Shader::Register; 17using Tegra::Shader::Register;
18 18
19u32 ShaderIR::DecodeArithmeticIntegerImmediate(BasicBlock& bb, u32 pc) { 19u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeBfe(BasicBlock& bb, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeBfi(BasicBlock& bb, u32 pc) { 15u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Register; 14using Tegra::Shader::Register;
15 15
16u32 ShaderIR::DecodeConversion(BasicBlock& bb, u32 pc) { 16u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeFfma(BasicBlock& bb, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeFloatSet(BasicBlock& bb, u32 pc) { 15u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Pred; 14using Tegra::Shader::Pred;
15 15
16u32 ShaderIR::DecodeFloatSetPredicate(BasicBlock& bb, u32 pc) { 16u32 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 {
14using Tegra::Shader::Instruction; 14using Tegra::Shader::Instruction;
15using Tegra::Shader::OpCode; 15using Tegra::Shader::OpCode;
16 16
17u32 ShaderIR::DecodeHalfSet(BasicBlock& bb, u32 pc) { 17u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Pred; 14using Tegra::Shader::Pred;
15 15
16u32 ShaderIR::DecodeHalfSetPredicate(BasicBlock& bb, u32 pc) { 16u32 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;
16using Tegra::Shader::Instruction; 16using Tegra::Shader::Instruction;
17using Tegra::Shader::OpCode; 17using Tegra::Shader::OpCode;
18 18
19u32 ShaderIR::DecodeHfma2(BasicBlock& bb, u32 pc) { 19u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeIntegerSet(BasicBlock& bb, u32 pc) { 15u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Pred; 14using Tegra::Shader::Pred;
15 15
16u32 ShaderIR::DecodeIntegerSetPredicate(BasicBlock& bb, u32 pc) { 16u32 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
38u32 ShaderIR::DecodeMemory(BasicBlock& bb, u32 pc) { 38u32 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;
14using Tegra::Shader::OpCode; 14using Tegra::Shader::OpCode;
15using Tegra::Shader::Register; 15using Tegra::Shader::Register;
16 16
17u32 ShaderIR::DecodeOther(BasicBlock& bb, u32 pc) { 17u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Pred; 14using Tegra::Shader::Pred;
15 15
16u32 ShaderIR::DecodePredicateSetPredicate(BasicBlock& bb, u32 pc) { 16u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodePredicateSetRegister(BasicBlock& bb, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeRegisterSetPredicate(BasicBlock& bb, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeShift(BasicBlock& bb, u32 pc) { 15u32 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;
15using Tegra::Shader::VideoType; 15using Tegra::Shader::VideoType;
16using Tegra::Shader::VmadShr; 16using Tegra::Shader::VmadShr;
17 17
18u32 ShaderIR::DecodeVideo(BasicBlock& bb, u32 pc) { 18u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeXmad(BasicBlock& bb, u32 pc) { 15u32 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);