diff --git a/rpcs3/Emu/Cell/PPUThread.cpp b/rpcs3/Emu/Cell/PPUThread.cpp index 8c5b3adc9c..5f9425fd41 100644 --- a/rpcs3/Emu/Cell/PPUThread.cpp +++ b/rpcs3/Emu/Cell/PPUThread.cpp @@ -77,7 +77,7 @@ void fmt_class_string::format(std::string& out, u64 arg) { switch (js) { - case ppu_join_status::joinable: return ""; + case ppu_join_status::joinable: return "none"; case ppu_join_status::detached: return "detached"; case ppu_join_status::zombie: return "zombie"; case ppu_join_status::exited: return "exited"; diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.cpp b/rpcs3/Emu/Cell/lv2/sys_spu.cpp index c98cf7d4c3..cf8fb39aaf 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_spu.cpp @@ -25,6 +25,28 @@ LOG_CHANNEL(sys_spu); extern u64 get_timebased_time(); +template <> +void fmt_class_string::format(std::string& out, u64 arg) +{ + format_enum(out, arg, [](spu_group_status value) + { + switch (value) + { + case SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED: return "uninitialized"; + case SPU_THREAD_GROUP_STATUS_INITIALIZED: return "initialized"; + case SPU_THREAD_GROUP_STATUS_READY: return "ready"; + case SPU_THREAD_GROUP_STATUS_WAITING: return "waiting"; + case SPU_THREAD_GROUP_STATUS_SUSPENDED: return "suspended"; + case SPU_THREAD_GROUP_STATUS_WAITING_AND_SUSPENDED: return "waiting and suspended"; + case SPU_THREAD_GROUP_STATUS_RUNNING: return "running"; + case SPU_THREAD_GROUP_STATUS_STOPPED: return "stopped"; + case SPU_THREAD_GROUP_STATUS_UNKNOWN: break; + } + + return unknown; + }); +} + void sys_spu_image::load(const fs::file& stream) { const spu_exec_object obj{stream, 0, elf_opt::no_sections + elf_opt::no_data}; diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.h b/rpcs3/Emu/Cell/lv2/sys_spu.h index 7e1fd0b6f3..2622233885 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.h +++ b/rpcs3/Emu/Cell/lv2/sys_spu.h @@ -48,7 +48,7 @@ enum SYS_SPU_THREAD_GROUP_LOG_GET_STATUS = 0x2, }; -enum : u32 +enum spu_group_status : u32 { SPU_THREAD_GROUP_STATUS_NOT_INITIALIZED, SPU_THREAD_GROUP_STATUS_INITIALIZED, @@ -263,7 +263,7 @@ struct lv2_spu_group atomic_t init; // Initialization Counter atomic_t prio; // SPU Thread Group Priority - atomic_t run_state; // SPU Thread Group State + atomic_t run_state; // SPU Thread Group State atomic_t exit_status; // SPU Thread Group Exit Status atomic_t join_state; // flags used to detect exit cause and signal atomic_t running; // Number of running threads diff --git a/rpcs3/rpcs3qt/kernel_explorer.cpp b/rpcs3/rpcs3qt/kernel_explorer.cpp index e9428a64b0..e4dc6b9e69 100644 --- a/rpcs3/rpcs3qt/kernel_explorer.cpp +++ b/rpcs3/rpcs3qt/kernel_explorer.cpp @@ -282,7 +282,7 @@ void kernel_explorer::Update() idm::select>([&](u32 id, ppu_thread& ppu) { lv2_types.back().count++; - l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"PPU Thread: ID = 0x%08x “%s”", id, *ppu.ppu_tname.load()))); + l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"PPU: ID = 0x%07x “%s”, priority = %d, joiner = %s, state = %s", id, *ppu.ppu_tname.load(), +ppu.prio, ppu.joiner.load(), ppu.state.load()))); }); lv2_types.emplace_back(l_addTreeChild(root, "SPU Threads")); @@ -290,7 +290,7 @@ void kernel_explorer::Update() idm::select>([&](u32 /*id*/, spu_thread& spu) { lv2_types.back().count++; - l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"SPU Thread: ID = 0x%08x “%s”", spu.lv2_id, *spu.spu_tname.load()))); + l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"SPU: ID = 0x%07x “%s”, state = %s", spu.lv2_id, *spu.spu_tname.load(), spu.state.load()))); }); lv2_types.emplace_back(l_addTreeChild(root, "SPU Thread Groups")); @@ -298,7 +298,7 @@ void kernel_explorer::Update() idm::select([&](u32 id, lv2_spu_group& tg) { lv2_types.back().count++; - l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"SPU Thread Group: ID = 0x%08x “%s”", id, tg.name))); + l_addTreeChild(lv2_types.back().node, qstr(fmt::format(u8"SPU Group: ID = 0x%07x “%s”, status = %s, priority = %d, type = 0x%x", id, tg.name, tg.run_state.load(), +tg.prio, tg.type))); }); lv2_types.emplace_back(l_addTreeChild(root, "File Descriptors"));