Просмотр исходного кода

shader_ir: Add comments on missing instruction.

Also shows Nvidia's address space on comments.
Fernando Sahmkow 7 лет назад
Родитель
Сommit
f2549739d1
2 измененных файлов с 9 добавлено и 2 удалено
  1. 5 2
      src/video_core/shader/decode.cpp
  2. 4 0
      src/video_core/shader/shader_ir.h

+ 5 - 2
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,

+ 4 - 0
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();