summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/video_core/shader/decode.cpp15
-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.cpp5
-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.h51
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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::SubOp; 14using Tegra::Shader::SubOp;
15 15
16u32 ShaderIR::DecodeArithmetic(BasicBlock& bb, const BasicBlock& code, u32 pc) { 16u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeArithmeticHalf(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeArithmeticHalfImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeArithmeticImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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;
15using Tegra::Shader::Pred; 15using Tegra::Shader::Pred;
16using Tegra::Shader::Register; 16using Tegra::Shader::Register;
17 17
18u32 ShaderIR::DecodeArithmeticInteger(BasicBlock& bb, const BasicBlock& code, u32 pc) { 18u32 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;
16using Tegra::Shader::PredicateResultMode; 16using Tegra::Shader::PredicateResultMode;
17using Tegra::Shader::Register; 17using Tegra::Shader::Register;
18 18
19u32 ShaderIR::DecodeArithmeticIntegerImmediate(BasicBlock& bb, const BasicBlock& code, u32 pc) { 19u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeBfe(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeBfi(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Register; 14using Tegra::Shader::Register;
15 15
16u32 ShaderIR::DecodeConversion(BasicBlock& bb, const BasicBlock& code, u32 pc) { 16u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeFfma(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeFloatSet(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Pred; 14using Tegra::Shader::Pred;
15 15
16u32 ShaderIR::DecodeFloatSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { 16u32 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 {
14using Tegra::Shader::Instruction; 14using Tegra::Shader::Instruction;
15using Tegra::Shader::OpCode; 15using Tegra::Shader::OpCode;
16 16
17u32 ShaderIR::DecodeHalfSet(BasicBlock& bb, const BasicBlock& code, u32 pc) { 17u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Pred; 14using Tegra::Shader::Pred;
15 15
16u32 ShaderIR::DecodeHalfSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { 16u32 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;
16using Tegra::Shader::Instruction; 16using Tegra::Shader::Instruction;
17using Tegra::Shader::OpCode; 17using Tegra::Shader::OpCode;
18 18
19u32 ShaderIR::DecodeHfma2(BasicBlock& bb, const BasicBlock& code, u32 pc) { 19u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeIntegerSet(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Pred; 14using Tegra::Shader::Pred;
15 15
16u32 ShaderIR::DecodeIntegerSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { 16u32 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
39u32 ShaderIR::DecodeMemory(BasicBlock& bb, const BasicBlock& code, u32 pc) { 39u32 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;
14using Tegra::Shader::OpCode; 14using Tegra::Shader::OpCode;
15using Tegra::Shader::Register; 15using Tegra::Shader::Register;
16 16
17u32 ShaderIR::DecodeOther(BasicBlock& bb, const BasicBlock& code, u32 pc) { 17u32 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;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14using Tegra::Shader::Pred; 14using Tegra::Shader::Pred;
15 15
16u32 ShaderIR::DecodePredicateSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { 16u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodePredicateSetRegister(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeRegisterSetPredicate(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeShift(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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;
15using Tegra::Shader::VideoType; 15using Tegra::Shader::VideoType;
16using Tegra::Shader::VmadShr; 16using Tegra::Shader::VmadShr;
17 17
18u32 ShaderIR::DecodeVideo(BasicBlock& bb, const BasicBlock& code, u32 pc) { 18u32 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 {
12using Tegra::Shader::Instruction; 12using Tegra::Shader::Instruction;
13using Tegra::Shader::OpCode; 13using Tegra::Shader::OpCode;
14 14
15u32 ShaderIR::DecodeXmad(BasicBlock& bb, const BasicBlock& code, u32 pc) { 15u32 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