diff options
Diffstat (limited to 'src/video_core/shader/decode.cpp')
| -rw-r--r-- | src/video_core/shader/decode.cpp | 10 |
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++) { |