summaryrefslogtreecommitdiff
path: root/src/video_core/shader/decode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/shader/decode.cpp')
-rw-r--r--src/video_core/shader/decode.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/video_core/shader/decode.cpp b/src/video_core/shader/decode.cpp
index b4a282cbd..15cb33bbf 100644
--- a/src/video_core/shader/decode.cpp
+++ b/src/video_core/shader/decode.cpp
@@ -39,9 +39,9 @@ void ShaderIR::Decode() {
39 std::memcpy(&header, program_code.data(), sizeof(Tegra::Shader::Header)); 39 std::memcpy(&header, program_code.data(), sizeof(Tegra::Shader::Header));
40 40
41 disable_flow_stack = false; 41 disable_flow_stack = false;
42 ShaderCharacteristics shader_info{}; 42 const auto info = ScanFlow(program_code, program_code.size(), main_offset);
43 bool can_proceed = ScanFlow(program_code, program_code.size(), main_offset, shader_info); 43 if (info) {
44 if (can_proceed) { 44 const auto& shader_info = *info;
45 coverage_begin = shader_info.start; 45 coverage_begin = shader_info.start;
46 coverage_end = shader_info.end; 46 coverage_end = shader_info.end;
47 if (shader_info.decompilable) { 47 if (shader_info.decompilable) {
@@ -52,7 +52,7 @@ void ShaderIR::Decode() {
52 } 52 }
53 basic_blocks.insert({label, nodes}); 53 basic_blocks.insert({label, nodes});
54 }); 54 });
55 std::list<ShaderBlock>& blocks = shader_info.blocks; 55 const auto& blocks = shader_info.blocks;
56 NodeBlock current_block; 56 NodeBlock current_block;
57 u32 current_label = exit_branch; 57 u32 current_label = exit_branch;
58 for (auto& block : blocks) { 58 for (auto& block : blocks) {
@@ -82,7 +82,7 @@ void ShaderIR::Decode() {
82 82
83 // Now we need to deal with an undecompilable shader. We need to brute force 83 // Now we need to deal with an undecompilable shader. We need to brute force
84 // a shader that captures every position. 84 // a shader that captures every position.
85 coverage_begin = shader_info.start; 85 coverage_begin = main_offset;
86 const u32 shader_end = static_cast<u32>(program_size / sizeof(u64)); 86 const u32 shader_end = static_cast<u32>(program_size / sizeof(u64));
87 coverage_end = shader_end; 87 coverage_end = shader_end;
88 for (u32 label = main_offset; label < shader_end; label++) { 88 for (u32 label = main_offset; label < shader_end; label++) {