diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-01-28 23:48:13 +0100 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-02-09 09:04:24 +0100 |
commit | f241bb72f5b6b0b213053e000051bf3b7e6b4bb0 (patch) | |
tree | 8e5b02afe942842d4e86b420dfc4474224bbe114 | |
parent | VideoCore: Use union to index into Regs struct (diff) | |
download | yuzu-f241bb72f5b6b0b213053e000051bf3b7e6b4bb0.tar yuzu-f241bb72f5b6b0b213053e000051bf3b7e6b4bb0.tar.gz yuzu-f241bb72f5b6b0b213053e000051bf3b7e6b4bb0.tar.bz2 yuzu-f241bb72f5b6b0b213053e000051bf3b7e6b4bb0.tar.lz yuzu-f241bb72f5b6b0b213053e000051bf3b7e6b4bb0.tar.xz yuzu-f241bb72f5b6b0b213053e000051bf3b7e6b4bb0.tar.zst yuzu-f241bb72f5b6b0b213053e000051bf3b7e6b4bb0.zip |
-rw-r--r-- | src/citra_qt/debugger/graphics/graphics_cmdlists.cpp | 2 | ||||
-rw-r--r-- | src/video_core/regs.cpp | 21 | ||||
-rw-r--r-- | src/video_core/regs.h | 4 |
3 files changed, 11 insertions, 16 deletions
diff --git a/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp b/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp index 536548f36..c68fe753b 100644 --- a/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp +++ b/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp @@ -72,7 +72,7 @@ QVariant GPUCommandListModel::data(const QModelIndex& index, int role) const { if (role == Qt::DisplayRole) { switch (index.column()) { case 0: - return QString::fromLatin1(Pica::Regs::GetCommandName(write.cmd_id).c_str()); + return QString::fromLatin1(Pica::Regs::GetRegisterName(write.cmd_id)); case 1: return QString("%1").arg(write.cmd_id, 3, 16, QLatin1Char('0')); case 2: diff --git a/src/video_core/regs.cpp b/src/video_core/regs.cpp index f47e9e763..2699e710a 100644 --- a/src/video_core/regs.cpp +++ b/src/video_core/regs.cpp @@ -2,8 +2,8 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include <algorithm> #include <iterator> -#include <unordered_map> #include <utility> #include "common/common_types.h" @@ -474,19 +474,14 @@ static const std::pair<u16, const char*> register_names[] = { {0x2DD, "GPUREG_VSH_OPDESCS_DATA7"}, }; -std::string Regs::GetCommandName(int index) { - static std::unordered_map<u32, const char*> map; - - if (map.empty()) { - map.insert(std::begin(register_names), std::end(register_names)); - } - - // Return empty string if no match is found - auto it = map.find(index); - if (it != map.end()) { - return it->second; +const char* Regs::GetRegisterName(u16 index) { + auto found = std::lower_bound(std::begin(register_names), std::end(register_names), index, + [](auto p, auto i) { return p.first < i; }); + if (found->first == index) { + return found->second; } else { - return std::string(); + // Return empty string if no match is found + return ""; } } diff --git a/src/video_core/regs.h b/src/video_core/regs.h index e38ab4333..86826088b 100644 --- a/src/video_core/regs.h +++ b/src/video_core/regs.h @@ -64,8 +64,8 @@ struct Regs { std::array<u32, NUM_REGS> reg_array; }; - // Map register indices to names readable by humans - static std::string GetCommandName(int index); + /// Map register indices to names readable by humans + static const char* GetRegisterName(u16 index); }; static_assert(sizeof(Regs) == Regs::NUM_REGS * sizeof(u32), "Regs struct has wrong size"); |