diff options
| author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2019-07-05 14:13:14 -0400 | 
|---|---|---|
| committer | FernandoS27 <fsahmkow27@gmail.com> | 2019-07-09 17:15:45 -0400 | 
| commit | f2549739d1166d9177bfff3a6af150266ba5309f (patch) | |
| tree | 606e744b19db98c940b9cde236ad062afb678bb1 | |
| parent | 2de764931141314357944627524767476d6d2cf9 (diff) | |
shader_ir: Add comments on missing instruction.
Also shows Nvidia's address space on comments.
| -rw-r--r-- | src/video_core/shader/decode.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/shader/shader_ir.h | 4 | 
2 files changed, 9 insertions, 2 deletions
| diff --git a/src/video_core/shader/decode.cpp b/src/video_core/shader/decode.cpp index b0bd6630f..29c8895c5 100644 --- a/src/video_core/shader/decode.cpp +++ b/src/video_core/shader/decode.cpp @@ -146,15 +146,18 @@ u32 ShaderIR::DecodeInstr(NodeBlock& bb, u32 pc) {      const Instruction instr = {program_code[pc]};      const auto opcode = OpCode::Decode(instr); +    const u32 nv_address = ConvertAddressToNvidiaSpace(pc);      // Decoding failure      if (!opcode) {          UNIMPLEMENTED_MSG("Unhandled instruction: {0:x}", instr.value); +        bb.push_back(Comment(fmt::format("{:05x} Unimplemented Shader instruction (0x{:016x})", +                                         nv_address, instr.value)));          return pc + 1;      } -    bb.push_back( -        Comment(fmt::format("{}: {} (0x{:016x})", pc, opcode->get().GetName(), instr.value))); +    bb.push_back(Comment( +        fmt::format("{:05x} {} (0x{:016x})", nv_address, opcode->get().GetName(), instr.value)));      using Tegra::Shader::Pred;      UNIMPLEMENTED_IF_MSG(instr.pred.full_pred == Pred::NeverExecute, diff --git a/src/video_core/shader/shader_ir.h b/src/video_core/shader/shader_ir.h index 928ac7cb5..6145f0a70 100644 --- a/src/video_core/shader/shader_ir.h +++ b/src/video_core/shader/shader_ir.h @@ -127,6 +127,10 @@ public:          return disable_flow_stack;      } +    u32 ConvertAddressToNvidiaSpace(const u32 address) const { +        return (address - main_offset) * sizeof(Tegra::Shader::Instruction); +    } +  private:      void Decode(); | 
