From f802ee16c95ae03c0114a6bb3e365099f146c54f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Fri, 4 Mar 2022 15:27:55 +0100 Subject: [PATCH] ksys: Add CoreInfo to avoid hardcoding number of cores everywhere --- src/KingSystem/GameData/gdtManager.h | 3 ++- src/KingSystem/GameData/gdtTriggerParam.h | 7 ++++--- src/KingSystem/System/CMakeLists.txt | 1 + src/KingSystem/System/CoreInfo.h | 9 +++++++++ src/KingSystem/System/VFR.h | 3 +-- 5 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 src/KingSystem/System/CoreInfo.h diff --git a/src/KingSystem/GameData/gdtManager.h b/src/KingSystem/GameData/gdtManager.h index cf325162..923cea2d 100644 --- a/src/KingSystem/GameData/gdtManager.h +++ b/src/KingSystem/GameData/gdtManager.h @@ -12,6 +12,7 @@ #include "KingSystem/GameData/gdtFlagHandle.h" #include "KingSystem/GameData/gdtTriggerParam.h" #include "KingSystem/Resource/resHandle.h" +#include "KingSystem/System/CoreInfo.h" #include "KingSystem/System/KingEditor.h" #include "KingSystem/Utils/Byaml/Byaml.h" #include "KingSystem/Utils/Types.h" @@ -565,7 +566,7 @@ private: void addRecord(s32 value, const sead::SafeString& name, s32 sub_idx, bool debug); u64 _0 = 0; - sead::SafeArray, 3> ring_buffers[2]; + sead::SafeArray, NumCores> ring_buffers[2]; sead::SafeArray arrays[2]{}; }; diff --git a/src/KingSystem/GameData/gdtTriggerParam.h b/src/KingSystem/GameData/gdtTriggerParam.h index 77414096..2245e308 100644 --- a/src/KingSystem/GameData/gdtTriggerParam.h +++ b/src/KingSystem/GameData/gdtTriggerParam.h @@ -11,6 +11,7 @@ #include #include #include "KingSystem/GameData/gdtFlag.h" +#include "KingSystem/System/CoreInfo.h" #include "KingSystem/Utils/Types.h" namespace ksys::res { @@ -503,7 +504,7 @@ private: sead::PtrArray> mVector3fArrayFlags; sead::PtrArray> mVector4fArrayFlags; - sead::SafeArray, 3> mFlagChangeRecords; + sead::SafeArray, NumCores> mFlagChangeRecords; sead::ObjArray mCopiedBoolFlags; sead::ObjArray mCopiedS32Flags; @@ -520,10 +521,10 @@ private: sead::Heap* mHeap = nullptr; - std::array mFlagChangeRecordIndices; + std::array mFlagChangeRecordIndices; sead::SafeArray mNumBoolFlagsPerCategory0; sead::SafeArray mNumBoolFlagsPerCategory; - sead::SafeArray mCriticalSections; + sead::SafeArray mCriticalSections; sead::TypedBitFlag mBitFlags; }; KSYS_CHECK_SIZE_NX150(TriggerParam, 0x3f0); diff --git a/src/KingSystem/System/CMakeLists.txt b/src/KingSystem/System/CMakeLists.txt index 82594ea2..0aedc96a 100644 --- a/src/KingSystem/System/CMakeLists.txt +++ b/src/KingSystem/System/CMakeLists.txt @@ -9,6 +9,7 @@ target_sources(uking PRIVATE CameraEditor.h CameraMgr.cpp CameraMgr.h + CoreInfo.h DebugFinder.cpp DebugFinder.h DebugMessage.h diff --git a/src/KingSystem/System/CoreInfo.h b/src/KingSystem/System/CoreInfo.h new file mode 100644 index 00000000..dc784bd2 --- /dev/null +++ b/src/KingSystem/System/CoreInfo.h @@ -0,0 +1,9 @@ +#pragma once + +namespace ksys { + +// Must be a compile-time constant because this value is used as an array size in various places. +// This limitation is why we cannot just use sead::CoreInfo::getNumCores() everywhere. +constexpr int NumCores = 3; + +} // namespace ksys diff --git a/src/KingSystem/System/VFR.h b/src/KingSystem/System/VFR.h index 552d9949..2bdf581e 100644 --- a/src/KingSystem/System/VFR.h +++ b/src/KingSystem/System/VFR.h @@ -8,6 +8,7 @@ #include #include #include +#include "KingSystem/System/CoreInfo.h" #include "KingSystem/Utils/Types.h" namespace ksys { @@ -149,8 +150,6 @@ private: f32 mIntervalRatioA = 1.0; f32 mIntervalRatioB = 1.0; - static constexpr int NumCores = 3; - sead::SafeArray mIntervals; sead::SafeArray mIntervalRatios;