diff --git a/core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp b/core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp index 38138aee77..f4d6264a1d 100644 --- a/core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp +++ b/core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp @@ -6,6 +6,7 @@ #endif #include #include +#include "prx/libc/include/PrimedSharedMutex.hpp" #include #include #include @@ -47,7 +48,7 @@ public: SnapshotLock TryLockForSnapshot() const { return SnapshotLock(mutex, std::try_to_lock); } private: - mutable std::shared_mutex mutex; + mutable PrimedSharedMutex mutex; }; inline void Require(bool condition, const std::string& reason) { diff --git a/core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp b/core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp index 47ec4b4862..390448fa8a 100644 --- a/core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp +++ b/core/libs/prx/libSceAgcDriver/Graphics/src/DepthSurface.cpp @@ -2,6 +2,7 @@ #include "prx/libSceAgcDriver/Graphics/include/DepthSurface.hpp" #include "prx/libSceAgcDriver/Execution/include/GuestMemory.hpp" #include "prx/libc/include/GuestAllocations.hpp" +#include "prx/libc/include/PrimedSharedMutex.hpp" #include "prx/libSceAgcDriver/Graphics/include/BufferPool.hpp" #include "prx/libSceAgcDriver/Graphics/include/FirstSampleCopy.hpp" #include "prx/libSceAgcDriver/Graphics/include/Recorder.hpp" @@ -85,7 +86,7 @@ struct DepthGuard { }; std::shared_mutex& depthGuardMutex() { - static std::shared_mutex mutex; + static PrimedSharedMutex mutex; return mutex; } diff --git a/core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp b/core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp index f59f72f68d..44f96ea533 100644 --- a/core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp +++ b/core/libs/prx/libSceAgcDriver/Graphics/src/MultisampleTarget.cpp @@ -17,6 +17,7 @@ #include "IntermediateRepresentation/IrMetadata/BufferFormat.hpp" #include "prx/libSceAgcDriver/Execution/include/GuestMemory.hpp" #include "prx/libc/include/GuestAllocations.hpp" +#include "prx/libc/include/PrimedSharedMutex.hpp" #include #include #include @@ -887,14 +888,6 @@ struct GuardedRange { bool fmask = false; }; -class PrimedSharedMutex : public std::shared_mutex { -public: - PrimedSharedMutex() { - lock(); - unlock(); - } -}; - std::shared_mutex& guardedMutex() { static PrimedSharedMutex mutex; return mutex; diff --git a/core/libs/prx/libc/include/PrimedSharedMutex.hpp b/core/libs/prx/libc/include/PrimedSharedMutex.hpp new file mode 100644 index 0000000000..7f6a9d8e7f --- /dev/null +++ b/core/libs/prx/libc/include/PrimedSharedMutex.hpp @@ -0,0 +1,14 @@ +#ifndef CORE_LIBS_PRX_LIBC_INCLUDE_PRIMEDSHAREDMUTEX_HPP +#define CORE_LIBS_PRX_LIBC_INCLUDE_PRIMEDSHAREDMUTEX_HPP + +#include + +class PrimedSharedMutex : public std::shared_mutex { +public: + PrimedSharedMutex() { + lock(); + unlock(); + } +}; + +#endif diff --git a/core/libs/prx/libkernel/EventFlag/src/EventFlag.cpp b/core/libs/prx/libkernel/EventFlag/src/EventFlag.cpp index 65ae972430..4351a30052 100644 --- a/core/libs/prx/libkernel/EventFlag/src/EventFlag.cpp +++ b/core/libs/prx/libkernel/EventFlag/src/EventFlag.cpp @@ -4,6 +4,7 @@ #include #include "SceTypes.hpp" #include "prx/libc/include/General.hpp" +#include "prx/libc/include/PrimedSharedMutex.hpp" #include "prx/libkernel/Time/include/Time.hpp" #include "prx/libkernel/Time/include/TimedWait.hpp" #include @@ -97,7 +98,7 @@ struct EventFlagHandle { bool opened = false; }; -std::shared_mutex eventFlagRegistryMutex; +PrimedSharedMutex eventFlagRegistryMutex; std::unordered_map> eventFlagRegistry; std::shared_ptr ResolveEventFlag(KernelEventFlag handle) {