mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Code review actions (plus hopefully fix the linux CI)
This commit is contained in:
		
							parent
							
								
									9bd189a155
								
							
						
					
					
						commit
						92640fc29c
					
				
					 46 changed files with 155 additions and 109 deletions
				
			
		|  | @ -31,8 +31,10 @@ if (MSVC) | ||||||
|     # /Zc:externConstexpr - Allow extern constexpr variables to have external linkage, like the standard mandates |     # /Zc:externConstexpr - Allow extern constexpr variables to have external linkage, like the standard mandates | ||||||
|     # /Zc:inline          - Let codegen omit inline functions in object files |     # /Zc:inline          - Let codegen omit inline functions in object files | ||||||
|     # /Zc:throwingNew     - Let codegen assume `operator new` (without std::nothrow) will never return null |     # /Zc:throwingNew     - Let codegen assume `operator new` (without std::nothrow) will never return null | ||||||
|  |     # /external:*         - Suppress warnings from external headers | ||||||
|     add_compile_options( |     add_compile_options( | ||||||
|         /W3 |         /W3 | ||||||
|  |         /MP | ||||||
|         /Zi |         /Zi | ||||||
|         /Zo |         /Zo | ||||||
|         /permissive- |         /permissive- | ||||||
|  | @ -40,17 +42,12 @@ if (MSVC) | ||||||
|         /volatile:iso |         /volatile:iso | ||||||
|         /Zc:externConstexpr |         /Zc:externConstexpr | ||||||
|         /Zc:inline |         /Zc:inline | ||||||
|  |         /Zc:throwingNew | ||||||
|  |         /experimental:external | ||||||
|  |         /external:I "${CMAKE_SOURCE_DIR}/externals" | ||||||
|  |         /external:anglebrackets | ||||||
|  |         /external:W0 | ||||||
|     ) |     ) | ||||||
|     if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") |  | ||||||
|         add_compile_options( |  | ||||||
|             /MP |  | ||||||
|             /Zc:throwingNew |  | ||||||
|             /experimental:external |  | ||||||
|             /external:I "${CMAKE_SOURCE_DIR}/externals" |  | ||||||
|             /external:anglebrackets |  | ||||||
|             /external:W0 |  | ||||||
|         ) |  | ||||||
|     endif() |  | ||||||
| 
 | 
 | ||||||
|     # /GS- - No stack buffer overflow checks |     # /GS- - No stack buffer overflow checks | ||||||
|     add_compile_options("$<$<CONFIG:Release>:/GS->") |     add_compile_options("$<$<CONFIG:Release>:/GS->") | ||||||
|  |  | ||||||
|  | @ -45,6 +45,7 @@ void DspHle::serialize(Archive& ar, const unsigned int) { | ||||||
|     ar& boost::serialization::base_object<DspInterface>(*this); |     ar& boost::serialization::base_object<DspInterface>(*this); | ||||||
|     ar&* impl.get(); |     ar&* impl.get(); | ||||||
| } | } | ||||||
|  | SERIALIZE_IMPL(DspHle) | ||||||
| 
 | 
 | ||||||
| static constexpr u64 audio_frame_ticks = 1310252ull; ///< Units: ARM11 cycles
 | static constexpr u64 audio_frame_ticks = 1310252ull; ///< Units: ARM11 cycles
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,8 +5,8 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <boost/archive/binary_iarchive.hpp> | #include <boost/archive/binary_iarchive.hpp> | ||||||
| #include "boost/archive/binary_oarchive.hpp" | #include <boost/archive/binary_oarchive.hpp> | ||||||
| #include "boost/serialization/export.hpp" | #include <boost/serialization/export.hpp> | ||||||
| 
 | 
 | ||||||
| using iarchive = boost::archive::binary_iarchive; | using iarchive = boost::archive::binary_iarchive; | ||||||
| using oarchive = boost::archive::binary_oarchive; | using oarchive = boost::archive::binary_oarchive; | ||||||
|  |  | ||||||
|  | @ -41,13 +41,17 @@ public: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::size_t GetSize() const override { |     std::size_t GetSize() const override { | ||||||
|         return static_cast<u32>(data.size()); |         return data.size(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     std::vector<u8>& Vector() { |     std::vector<u8>& Vector() { | ||||||
|         return data; |         return data; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     const std::vector<u8>& Vector() const { | ||||||
|  |         return data; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|     std::vector<u8> data; |     std::vector<u8> data; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,3 +1,7 @@ | ||||||
|  | // Copyright 2020 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <atomic> | #include <atomic> | ||||||
|  |  | ||||||
|  | @ -1,33 +1,37 @@ | ||||||
|  | // Copyright 2020 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include "common/common_types.h" |  | ||||||
| #include <boost/icl/discrete_interval.hpp> | #include <boost/icl/discrete_interval.hpp> | ||||||
|  | #include "common/common_types.h" | ||||||
| 
 | 
 | ||||||
| namespace boost::serialization { | namespace boost::serialization { | ||||||
| 
 | 
 | ||||||
| template <class Archive, class DomainT, ICL_COMPARE Compare> | template <class Archive, class DomainT, ICL_COMPARE Compare> | ||||||
| void save(Archive& ar, const boost::icl::discrete_interval<DomainT, Compare>& obj, const unsigned int file_version) | void save(Archive& ar, const boost::icl::discrete_interval<DomainT, Compare>& obj, | ||||||
| { |           const unsigned int file_version) { | ||||||
|     ar << obj.lower(); |     ar << obj.lower(); | ||||||
|     ar << obj.upper(); |     ar << obj.upper(); | ||||||
|     ar << obj.bounds()._bits; |     ar << obj.bounds()._bits; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <class Archive, class DomainT, ICL_COMPARE Compare> | template <class Archive, class DomainT, ICL_COMPARE Compare> | ||||||
| void load(Archive& ar, boost::icl::discrete_interval<DomainT, Compare>& obj, const unsigned int file_version) | void load(Archive& ar, boost::icl::discrete_interval<DomainT, Compare>& obj, | ||||||
| { |           const unsigned int file_version) { | ||||||
|     DomainT upper, lower; |     DomainT upper, lower; | ||||||
|     boost::icl::bound_type bounds; |     boost::icl::bound_type bounds; | ||||||
|     ar >> upper; |  | ||||||
|     ar >> lower; |     ar >> lower; | ||||||
|  |     ar >> upper; | ||||||
|     ar >> bounds; |     ar >> bounds; | ||||||
|     obj = boost::icl::discrete_interval(upper, lower, boost::icl::interval_bounds(bounds)); |     obj = boost::icl::discrete_interval(upper, lower, boost::icl::interval_bounds(bounds)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <class Archive, class DomainT, ICL_COMPARE Compare> | template <class Archive, class DomainT, ICL_COMPARE Compare> | ||||||
| void serialize(Archive& ar, boost::icl::discrete_interval<DomainT, Compare>& obj, const unsigned int file_version) | void serialize(Archive& ar, boost::icl::discrete_interval<DomainT, Compare>& obj, | ||||||
| { |                const unsigned int file_version) { | ||||||
|     boost::serialization::split_free(ar, obj, file_version); |     boost::serialization::split_free(ar, obj, file_version); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } | } // namespace boost::serialization
 | ||||||
|  |  | ||||||
|  | @ -1,3 +1,7 @@ | ||||||
|  | // Copyright 2020 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <boost/container/flat_set.hpp> | #include <boost/container/flat_set.hpp> | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								src/common/serialization/boost_interval_set.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/common/serialization/boost_interval_set.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | // Copyright 2020 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <boost/icl/interval_set.hpp> | ||||||
|  | #include "common/serialization/boost_discrete_interval.hpp" | ||||||
|  | 
 | ||||||
|  | namespace boost::serialization { | ||||||
|  | 
 | ||||||
|  | template <class Archive, class T> | ||||||
|  | void serialize(Archive& ar, boost::icl::interval_set<T>& obj, const unsigned int file_version) { | ||||||
|  |     using IntervalSet = boost::icl::interval_set<T>; | ||||||
|  |     // This works because interval_set has exactly one member of type ImplSetT
 | ||||||
|  |     static_assert(std::is_standard_layout_v<IntervalSet>); | ||||||
|  |     ar&*(reinterpret_cast<typename IntervalSet::ImplSetT*>(&obj)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } // namespace boost::serialization
 | ||||||
|  | @ -186,7 +186,7 @@ private: | ||||||
|     void save(Archive& ar, const unsigned int file_version) const { |     void save(Archive& ar, const unsigned int file_version) const { | ||||||
|         const s64 idx = ToIndex(first); |         const s64 idx = ToIndex(first); | ||||||
|         ar << idx; |         ar << idx; | ||||||
|         for (size_t i = 0; i < NUM_QUEUES; i++) { |         for (std::size_t i = 0; i < NUM_QUEUES; i++) { | ||||||
|             const s64 idx1 = ToIndex(queues[i].next_nonempty); |             const s64 idx1 = ToIndex(queues[i].next_nonempty); | ||||||
|             ar << idx1; |             ar << idx1; | ||||||
|             ar << queues[i].data; |             ar << queues[i].data; | ||||||
|  | @ -198,7 +198,7 @@ private: | ||||||
|         s64 idx; |         s64 idx; | ||||||
|         ar >> idx; |         ar >> idx; | ||||||
|         first = ToPointer(idx); |         first = ToPointer(idx); | ||||||
|         for (auto i = 0; i < NUM_QUEUES; i++) { |         for (std::size_t i = 0; i < NUM_QUEUES; i++) { | ||||||
|             ar >> idx; |             ar >> idx; | ||||||
|             queues[i].next_nonempty = ToPointer(idx); |             queues[i].next_nonempty = ToPointer(idx); | ||||||
|             ar >> queues[i].data; |             ar >> queues[i].data; | ||||||
|  |  | ||||||
|  | @ -6,15 +6,13 @@ | ||||||
| 
 | 
 | ||||||
| #include <cstddef> | #include <cstddef> | ||||||
| #include <memory> | #include <memory> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
| #include <boost/serialization/split_member.hpp> | #include <boost/serialization/split_member.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/arm/skyeye_common/arm_regformat.h" | #include "core/arm/skyeye_common/arm_regformat.h" | ||||||
| #include "core/arm/skyeye_common/vfp/asm_vfp.h" | #include "core/arm/skyeye_common/vfp/asm_vfp.h" | ||||||
| #include "core/core_timing.h" | #include "core/core_timing.h" | ||||||
| 
 | #include "core/memory.h" | ||||||
| namespace Memory { |  | ||||||
| struct PageTable; |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| /// Generic ARM11 CPU interface
 | /// Generic ARM11 CPU interface
 | ||||||
| class ARM_Interface : NonCopyable { | class ARM_Interface : NonCopyable { | ||||||
|  | @ -28,11 +26,11 @@ public: | ||||||
| 
 | 
 | ||||||
|         template <class Archive> |         template <class Archive> | ||||||
|         void save(Archive& ar, const unsigned int file_version) const { |         void save(Archive& ar, const unsigned int file_version) const { | ||||||
|             for (size_t i = 0; i < 16; i++) { |             for (std::size_t i = 0; i < 16; i++) { | ||||||
|                 const auto r = GetCpuRegister(i); |                 const auto r = GetCpuRegister(i); | ||||||
|                 ar << r; |                 ar << r; | ||||||
|             } |             } | ||||||
|             for (size_t i = 0; i < 16; i++) { |             for (std::size_t i = 0; i < 16; i++) { | ||||||
|                 const auto r = GetFpuRegister(i); |                 const auto r = GetFpuRegister(i); | ||||||
|                 ar << r; |                 ar << r; | ||||||
|             } |             } | ||||||
|  | @ -47,11 +45,11 @@ public: | ||||||
|         template <class Archive> |         template <class Archive> | ||||||
|         void load(Archive& ar, const unsigned int file_version) { |         void load(Archive& ar, const unsigned int file_version) { | ||||||
|             u32 r; |             u32 r; | ||||||
|             for (size_t i = 0; i < 16; i++) { |             for (std::size_t i = 0; i < 16; i++) { | ||||||
|                 ar >> r; |                 ar >> r; | ||||||
|                 SetCpuRegister(i, r); |                 SetCpuRegister(i, r); | ||||||
|             } |             } | ||||||
|             for (size_t i = 0; i < 16; i++) { |             for (std::size_t i = 0; i < 16; i++) { | ||||||
|                 ar >> r; |                 ar >> r; | ||||||
|                 SetFpuRegister(i, r); |                 SetFpuRegister(i, r); | ||||||
|             } |             } | ||||||
|  | @ -120,8 +118,6 @@ public: | ||||||
|     /// Notify CPU emulation that page tables have changed
 |     /// Notify CPU emulation that page tables have changed
 | ||||||
|     virtual void SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) = 0; |     virtual void SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) = 0; | ||||||
| 
 | 
 | ||||||
|     virtual std::shared_ptr<Memory::PageTable> GetPageTable() const = 0; |  | ||||||
| 
 |  | ||||||
|     /**
 |     /**
 | ||||||
|      * Set the Program Counter to an address |      * Set the Program Counter to an address | ||||||
|      * @param addr Address to set PC to |      * @param addr Address to set PC to | ||||||
|  | @ -234,6 +230,9 @@ public: | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| protected: | protected: | ||||||
|  |     // This us used for serialization. Returning nullptr is valid if page tables are not used.
 | ||||||
|  |     virtual std::shared_ptr<Memory::PageTable> GetPageTable() const = 0; | ||||||
|  | 
 | ||||||
|     std::shared_ptr<Core::Timing::Timer> timer; |     std::shared_ptr<Core::Timing::Timer> timer; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|  | @ -259,11 +258,11 @@ private: | ||||||
|             const auto r = GetVFPReg(i); |             const auto r = GetVFPReg(i); | ||||||
|             ar << r; |             ar << r; | ||||||
|         } |         } | ||||||
|         for (size_t i = 0; i < VFPSystemRegister::VFP_SYSTEM_REGISTER_COUNT; i++) { |         for (std::size_t i = 0; i < VFPSystemRegister::VFP_SYSTEM_REGISTER_COUNT; i++) { | ||||||
|             const auto r = GetVFPSystemReg(static_cast<VFPSystemRegister>(i)); |             const auto r = GetVFPSystemReg(static_cast<VFPSystemRegister>(i)); | ||||||
|             ar << r; |             ar << r; | ||||||
|         } |         } | ||||||
|         for (size_t i = 0; i < CP15Register::CP15_REGISTER_COUNT; i++) { |         for (std::size_t i = 0; i < CP15Register::CP15_REGISTER_COUNT; i++) { | ||||||
|             const auto r = GetCP15Register(static_cast<CP15Register>(i)); |             const auto r = GetCP15Register(static_cast<CP15Register>(i)); | ||||||
|             ar << r; |             ar << r; | ||||||
|         } |         } | ||||||
|  | @ -290,11 +289,11 @@ private: | ||||||
|             ar >> r; |             ar >> r; | ||||||
|             SetVFPReg(i, r); |             SetVFPReg(i, r); | ||||||
|         } |         } | ||||||
|         for (size_t i = 0; i < VFPSystemRegister::VFP_SYSTEM_REGISTER_COUNT; i++) { |         for (std::size_t i = 0; i < VFPSystemRegister::VFP_SYSTEM_REGISTER_COUNT; i++) { | ||||||
|             ar >> r; |             ar >> r; | ||||||
|             SetVFPSystemReg(static_cast<VFPSystemRegister>(i), r); |             SetVFPSystemReg(static_cast<VFPSystemRegister>(i), r); | ||||||
|         } |         } | ||||||
|         for (size_t i = 0; i < CP15Register::CP15_REGISTER_COUNT; i++) { |         for (std::size_t i = 0; i < CP15Register::CP15_REGISTER_COUNT; i++) { | ||||||
|             ar >> r; |             ar >> r; | ||||||
|             SetCP15Register(static_cast<CP15Register>(i), r); |             SetCP15Register(static_cast<CP15Register>(i), r); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -53,9 +53,11 @@ public: | ||||||
|     void ClearInstructionCache() override; |     void ClearInstructionCache() override; | ||||||
|     void InvalidateCacheRange(u32 start_address, std::size_t length) override; |     void InvalidateCacheRange(u32 start_address, std::size_t length) override; | ||||||
|     void SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) override; |     void SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) override; | ||||||
|     std::shared_ptr<Memory::PageTable> GetPageTable() const override; |  | ||||||
|     void PurgeState() override; |     void PurgeState() override; | ||||||
| 
 | 
 | ||||||
|  | protected: | ||||||
|  |     std::shared_ptr<Memory::PageTable> GetPageTable() const override; | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|     friend class DynarmicUserCallbacks; |     friend class DynarmicUserCallbacks; | ||||||
|     Core::System& system; |     Core::System& system; | ||||||
|  |  | ||||||
|  | @ -49,10 +49,12 @@ public: | ||||||
|     void LoadContext(const std::unique_ptr<ThreadContext>& arg) override; |     void LoadContext(const std::unique_ptr<ThreadContext>& arg) override; | ||||||
| 
 | 
 | ||||||
|     void SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) override; |     void SetPageTable(const std::shared_ptr<Memory::PageTable>& page_table) override; | ||||||
|     std::shared_ptr<Memory::PageTable> GetPageTable() const override; |  | ||||||
|     void PrepareReschedule() override; |     void PrepareReschedule() override; | ||||||
|     void PurgeState() override; |     void PurgeState() override; | ||||||
| 
 | 
 | ||||||
|  | protected: | ||||||
|  |     std::shared_ptr<Memory::PageTable> GetPageTable() const override; | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|     void ExecuteInstructions(u64 num_instructions); |     void ExecuteInstructions(u64 num_instructions); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,3 @@ | ||||||
| #pragma optimize("", off) |  | ||||||
| // Copyright 2014 Citra Emulator Project
 | // Copyright 2014 Citra Emulator Project
 | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
|  | @ -184,12 +183,14 @@ System::ResultStatus System::RunLoop(bool tight_loop) { | ||||||
|         LOG_INFO(Core, "Begin load"); |         LOG_INFO(Core, "Begin load"); | ||||||
|         System::LoadState(param); |         System::LoadState(param); | ||||||
|         LOG_INFO(Core, "Load completed"); |         LOG_INFO(Core, "Load completed"); | ||||||
|     } break; |         break; | ||||||
|  |     } | ||||||
|     case Signal::Save: { |     case Signal::Save: { | ||||||
|         LOG_INFO(Core, "Begin save"); |         LOG_INFO(Core, "Begin save"); | ||||||
|         System::SaveState(param); |         System::SaveState(param); | ||||||
|         LOG_INFO(Core, "Save completed"); |         LOG_INFO(Core, "Save completed"); | ||||||
|     } break; |         break; | ||||||
|  |     } | ||||||
|     default: |     default: | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|  | @ -551,19 +552,11 @@ void System::serialize(Archive& ar, const unsigned int file_version) { | ||||||
| 
 | 
 | ||||||
|     // NOTE: DSP doesn't like being destroyed and recreated. So instead we do an inline
 |     // NOTE: DSP doesn't like being destroyed and recreated. So instead we do an inline
 | ||||||
|     // serialization; this means that the DSP Settings need to match for loading to work.
 |     // serialization; this means that the DSP Settings need to match for loading to work.
 | ||||||
|     bool dsp_type = Settings::values.enable_dsp_lle; |  | ||||||
|     ar& dsp_type; |  | ||||||
|     if (dsp_type != Settings::values.enable_dsp_lle) { |  | ||||||
|         throw std::runtime_error( |  | ||||||
|             "Incorrect DSP type - please change this in Settings before loading"); |  | ||||||
|     } |  | ||||||
|     auto dsp_hle = dynamic_cast<AudioCore::DspHle*>(dsp_core.get()); |     auto dsp_hle = dynamic_cast<AudioCore::DspHle*>(dsp_core.get()); | ||||||
|     if (dsp_hle) { |     if (dsp_hle) { | ||||||
|         ar&* dsp_hle; |         ar&* dsp_hle; | ||||||
|     } |     } else { | ||||||
|     auto dsp_lle = dynamic_cast<AudioCore::DspLle*>(dsp_core.get()); |         throw std::runtime_error("LLE audio not supported for save states"); | ||||||
|     if (dsp_lle) { |  | ||||||
|         ar&* dsp_lle; |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ar&* memory.get(); |     ar&* memory.get(); | ||||||
|  |  | ||||||
|  | @ -7,7 +7,6 @@ | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <mutex> | #include <mutex> | ||||||
| #include <string> | #include <string> | ||||||
| #include "boost/serialization/access.hpp" |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/custom_tex_cache.h" | #include "core/custom_tex_cache.h" | ||||||
| #include "core/frontend/applets/mii_selector.h" | #include "core/frontend/applets/mii_selector.h" | ||||||
|  |  | ||||||
|  | @ -183,11 +183,10 @@ void Timing::Timer::Advance(s64 max_slice_length) { | ||||||
|         Event evt = std::move(event_queue.front()); |         Event evt = std::move(event_queue.front()); | ||||||
|         std::pop_heap(event_queue.begin(), event_queue.end(), std::greater<>()); |         std::pop_heap(event_queue.begin(), event_queue.end(), std::greater<>()); | ||||||
|         event_queue.pop_back(); |         event_queue.pop_back(); | ||||||
|         if (evt.type->callback == nullptr) { |  | ||||||
|             LOG_ERROR(Core, "Event '{}' has no callback", *evt.type->name); |  | ||||||
|         } |  | ||||||
|         if (evt.type->callback != nullptr) { |         if (evt.type->callback != nullptr) { | ||||||
|             evt.type->callback(evt.userdata, executed_ticks - evt.time); |             evt.type->callback(evt.userdata, executed_ticks - evt.time); | ||||||
|  |         } else { | ||||||
|  |             LOG_ERROR(Core, "Event '{}' has no callback", *evt.type->name); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ | ||||||
| #include <boost/serialization/base_object.hpp> | #include <boost/serialization/base_object.hpp> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
| #include <boost/serialization/shared_ptr.hpp> | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include <boost/serialization/vector.hpp> | #include <boost/serialization/vector.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
|  |  | ||||||
|  | @ -7,6 +7,8 @@ | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| #include "core/hle/kernel/server_port.h" | #include "core/hle/kernel/server_port.h" | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ | ||||||
| #include <boost/serialization/base_object.hpp> | #include <boost/serialization/base_object.hpp> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
| #include <boost/serialization/shared_ptr.hpp> | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
|  |  | ||||||
|  | @ -4,7 +4,9 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| #include "core/hle/kernel/wait_object.h" | #include "core/hle/kernel/wait_object.h" | ||||||
|  |  | ||||||
|  | @ -2,6 +2,9 @@ | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/unordered_map.hpp> | ||||||
|  | #include <boost/serialization/vector.hpp> | ||||||
| #include "common/archives.h" | #include "common/archives.h" | ||||||
| #include "common/serialization/atomic.h" | #include "common/serialization/atomic.h" | ||||||
| #include "core/hle/kernel/client_port.h" | #include "core/hle/kernel/client_port.h" | ||||||
|  |  | ||||||
|  | @ -11,9 +11,6 @@ | ||||||
| #include <string> | #include <string> | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/serialization/shared_ptr.hpp> |  | ||||||
| #include <boost/serialization/unordered_map.hpp> |  | ||||||
| #include <boost/serialization/vector.hpp> |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/memory.h" | #include "core/hle/kernel/memory.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
|  |  | ||||||
|  | @ -5,10 +5,11 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <optional> | #include <optional> | ||||||
|  | #include <type_traits> | ||||||
| #include <boost/icl/interval_set.hpp> | #include <boost/icl/interval_set.hpp> | ||||||
| #include <boost/serialization/set.hpp> | #include <boost/serialization/set.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/serialization/boost_discrete_interval.hpp" | #include "common/serialization/boost_interval_set.hpp" | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
|  | @ -70,8 +71,7 @@ private: | ||||||
|         ar& base; |         ar& base; | ||||||
|         ar& size; |         ar& size; | ||||||
|         ar& used; |         ar& used; | ||||||
|         // This works because interval_set has exactly one member of type ImplSetT
 |         ar& free_blocks; | ||||||
|         ar&*(reinterpret_cast<IntervalSet::ImplSetT*>(&free_blocks)); |  | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -7,6 +7,9 @@ | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/kernel.h" | #include "core/hle/kernel/kernel.h" | ||||||
| #include "core/hle/kernel/wait_object.h" | #include "core/hle/kernel/wait_object.h" | ||||||
|  |  | ||||||
|  | @ -104,7 +104,7 @@ BOOST_SERIALIZATION_ASSUME_ABSTRACT(Kernel::Object) | ||||||
| #define CONSTRUCT_KERNEL_OBJECT(T)                                                                 \ | #define CONSTRUCT_KERNEL_OBJECT(T)                                                                 \ | ||||||
|     namespace boost::serialization {                                                               \ |     namespace boost::serialization {                                                               \ | ||||||
|     template <class Archive>                                                                       \ |     template <class Archive>                                                                       \ | ||||||
|     inline void load_construct_data(Archive& ar, T* t, const unsigned int file_version) {          \ |     void load_construct_data(Archive& ar, T* t, const unsigned int file_version) {                 \ | ||||||
|         ::new (t) T(Core::Global<Kernel::KernelSystem>());                                         \ |         ::new (t) T(Core::Global<Kernel::KernelSystem>());                                         \ | ||||||
|     }                                                                                              \ |     }                                                                                              \ | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -7,7 +7,9 @@ | ||||||
| #include <array> | #include <array> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <boost/serialization/array.hpp> | #include <boost/serialization/array.hpp> | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
| #include <boost/serialization/shared_ptr.hpp> | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,9 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <string> | #include <string> | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include <queue> | #include <queue> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
|  |  | ||||||
|  | @ -3,6 +3,10 @@ | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <tuple> | #include <tuple> | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/vector.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include "common/archives.h" | #include "common/archives.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "core/hle/kernel/client_port.h" | #include "core/hle/kernel/client_port.h" | ||||||
|  |  | ||||||
|  | @ -7,10 +7,7 @@ | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
| #include <tuple> | #include <tuple> | ||||||
| #include <boost/serialization/base_object.hpp> |  | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
| #include <boost/serialization/shared_ptr.hpp> |  | ||||||
| #include <boost/serialization/vector.hpp> |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| #include "core/hle/kernel/server_session.h" | #include "core/hle/kernel/server_session.h" | ||||||
|  |  | ||||||
|  | @ -3,8 +3,10 @@ | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <tuple> | #include <tuple> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
|  | #include <boost/serialization/vector.hpp> | ||||||
| #include "common/archives.h" | #include "common/archives.h" | ||||||
| #include "core/global.h" |  | ||||||
| #include "core/hle/kernel/client_port.h" | #include "core/hle/kernel/client_port.h" | ||||||
| #include "core/hle/kernel/client_session.h" | #include "core/hle/kernel/client_session.h" | ||||||
| #include "core/hle/kernel/hle_ipc.h" | #include "core/hle/kernel/hle_ipc.h" | ||||||
|  | @ -16,6 +18,18 @@ SERIALIZE_EXPORT_IMPL(Kernel::ServerSession) | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
|  | template <class Archive> | ||||||
|  | void ServerSession::serialize(Archive& ar, const unsigned int file_version) { | ||||||
|  |     ar& boost::serialization::base_object<WaitObject>(*this); | ||||||
|  |     ar& name; | ||||||
|  |     ar& parent; | ||||||
|  |     ar& hle_handler; | ||||||
|  |     ar& pending_requesting_threads; | ||||||
|  |     ar& currently_handling; | ||||||
|  |     ar& mapped_buffer_context; | ||||||
|  | } | ||||||
|  | SERIALIZE_IMPL(ServerSession) | ||||||
|  | 
 | ||||||
| ServerSession::ServerSession(KernelSystem& kernel) : WaitObject(kernel), kernel(kernel) {} | ServerSession::ServerSession(KernelSystem& kernel) : WaitObject(kernel), kernel(kernel) {} | ||||||
| ServerSession::~ServerSession() { | ServerSession::~ServerSession() { | ||||||
|     // This destructor will be called automatically when the last ServerSession handle is closed by
 |     // This destructor will be called automatically when the last ServerSession handle is closed by
 | ||||||
|  |  | ||||||
|  | @ -7,8 +7,6 @@ | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
| #include <boost/serialization/shared_ptr.hpp> |  | ||||||
| #include <boost/serialization/vector.hpp> |  | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/ipc.h" | #include "core/hle/kernel/ipc.h" | ||||||
|  | @ -110,15 +108,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     friend class boost::serialization::access; |     friend class boost::serialization::access; | ||||||
|     template <class Archive> |     template <class Archive> | ||||||
|     void serialize(Archive& ar, const unsigned int file_version) { |     void serialize(Archive& ar, const unsigned int file_version); | ||||||
|         ar& boost::serialization::base_object<WaitObject>(*this); |  | ||||||
|         ar& name; |  | ||||||
|         ar& parent; |  | ||||||
|         ar& hle_handler; |  | ||||||
|         ar& pending_requesting_threads; |  | ||||||
|         ar& currently_handling; |  | ||||||
|         ar& mapped_buffer_context; |  | ||||||
|     } |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } // namespace Kernel
 | } // namespace Kernel
 | ||||||
|  |  | ||||||
|  | @ -6,7 +6,6 @@ | ||||||
| #include "common/archives.h" | #include "common/archives.h" | ||||||
| #include "core/hle/kernel/client_port.h" | #include "core/hle/kernel/client_port.h" | ||||||
| #include "core/hle/kernel/client_session.h" | #include "core/hle/kernel/client_session.h" | ||||||
| #include "core/hle/kernel/hle_ipc.h" |  | ||||||
| #include "core/hle/kernel/server_session.h" | #include "core/hle/kernel/server_session.h" | ||||||
| #include "core/hle/kernel/session.h" | #include "core/hle/kernel/session.h" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -5,7 +5,6 @@ | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include "common/archives.h" | #include "common/archives.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "core/global.h" |  | ||||||
| #include "core/hle/kernel/errors.h" | #include "core/hle/kernel/errors.h" | ||||||
| #include "core/hle/kernel/memory.h" | #include "core/hle/kernel/memory.h" | ||||||
| #include "core/hle/kernel/shared_memory.h" | #include "core/hle/kernel/shared_memory.h" | ||||||
|  |  | ||||||
|  | @ -6,7 +6,9 @@ | ||||||
| 
 | 
 | ||||||
| #include <string> | #include <string> | ||||||
| #include <utility> | #include <utility> | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/memory_ref.h" | #include "common/memory_ref.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
|  | @ -118,7 +120,7 @@ private: | ||||||
|         ar& owner_process; |         ar& owner_process; | ||||||
|         ar& base_address; |         ar& base_address; | ||||||
|         ar& name; |         ar& name; | ||||||
|         ar&*(reinterpret_cast<MemoryRegionInfo::IntervalSet::ImplSetT*>(&holding_memory)); |         ar& holding_memory; | ||||||
|     } |     } | ||||||
|     friend class boost::serialization::access; |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ | ||||||
| #include <chrono> | #include <chrono> | ||||||
| #include <ctime> | #include <ctime> | ||||||
| #include <memory> | #include <memory> | ||||||
|  | #include <boost/serialization/base_object.hpp> | ||||||
| #include <boost/serialization/binary_object.hpp> | #include <boost/serialization/binary_object.hpp> | ||||||
| #include <boost/serialization/export.hpp> | #include <boost/serialization/export.hpp> | ||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
| #include <list> | #include <list> | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| #include <vector> | #include <vector> | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include "common/archives.h" | #include "common/archives.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | @ -15,7 +16,6 @@ | ||||||
| #include "core/arm/arm_interface.h" | #include "core/arm/arm_interface.h" | ||||||
| #include "core/arm/skyeye_common/armstate.h" | #include "core/arm/skyeye_common/armstate.h" | ||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "core/global.h" |  | ||||||
| #include "core/hle/kernel/errors.h" | #include "core/hle/kernel/errors.h" | ||||||
| #include "core/hle/kernel/handle_table.h" | #include "core/hle/kernel/handle_table.h" | ||||||
| #include "core/hle/kernel/kernel.h" | #include "core/hle/kernel/kernel.h" | ||||||
|  |  | ||||||
|  | @ -8,7 +8,6 @@ | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "core/global.h" |  | ||||||
| #include "core/hle/kernel/handle_table.h" | #include "core/hle/kernel/handle_table.h" | ||||||
| #include "core/hle/kernel/object.h" | #include "core/hle/kernel/object.h" | ||||||
| #include "core/hle/kernel/thread.h" | #include "core/hle/kernel/thread.h" | ||||||
|  |  | ||||||
|  | @ -4,6 +4,7 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include <boost/serialization/string.hpp> | ||||||
| #include <boost/serialization/unordered_map.hpp> | #include <boost/serialization/unordered_map.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/core_timing.h" | #include "core/core_timing.h" | ||||||
|  |  | ||||||
|  | @ -9,6 +9,7 @@ | ||||||
| #include <utility> | #include <utility> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/serialization/map.hpp> | #include <boost/serialization/map.hpp> | ||||||
|  | #include <boost/serialization/shared_ptr.hpp> | ||||||
| #include <boost/serialization/split_member.hpp> | #include <boost/serialization/split_member.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/memory_ref.h" | #include "common/memory_ref.h" | ||||||
|  |  | ||||||
|  | @ -4,6 +4,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <utility> | #include <utility> | ||||||
|  | #include "common/archives.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "core/hle/kernel/errors.h" | #include "core/hle/kernel/errors.h" | ||||||
|  | @ -16,6 +17,15 @@ | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
| 
 | 
 | ||||||
|  | template <class Archive> | ||||||
|  | void WaitObject::serialize(Archive& ar, const unsigned int file_version) { | ||||||
|  |     ar& boost::serialization::base_object<Object>(*this); | ||||||
|  |     ar& waiting_threads; | ||||||
|  |     // NB: hle_notifier *not* serialized since it's a callback!
 | ||||||
|  |     // Fortunately it's only used in one place (DSP) so we can reconstruct it there
 | ||||||
|  | } | ||||||
|  | SERIALIZE_IMPL(WaitObject) | ||||||
|  | 
 | ||||||
| void WaitObject::AddWaitingThread(std::shared_ptr<Thread> thread) { | void WaitObject::AddWaitingThread(std::shared_ptr<Thread> thread) { | ||||||
|     auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread); |     auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread); | ||||||
|     if (itr == waiting_threads.end()) |     if (itr == waiting_threads.end()) | ||||||
|  |  | ||||||
|  | @ -69,12 +69,7 @@ private: | ||||||
| private: | private: | ||||||
|     friend class boost::serialization::access; |     friend class boost::serialization::access; | ||||||
|     template <class Archive> |     template <class Archive> | ||||||
|     void serialize(Archive& ar, const unsigned int file_version) { |     void serialize(Archive& ar, const unsigned int file_version); | ||||||
|         ar& boost::serialization::base_object<Object>(*this); |  | ||||||
|         ar& waiting_threads; |  | ||||||
|         // NB: hle_notifier *not* serialized since it's a callback!
 |  | ||||||
|         // Fortunately it's only used in one place (DSP) so we can reconstruct it there
 |  | ||||||
|     } |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // Specialization of DynamicObjectCast for WaitObjects
 | // Specialization of DynamicObjectCast for WaitObjects
 | ||||||
|  |  | ||||||
|  | @ -210,10 +210,6 @@ void Module::UpdateAccelerometerCallback(u64 userdata, s64 cycles_late) { | ||||||
|     next_accelerometer_index = (next_accelerometer_index + 1) % mem->accelerometer.entries.size(); |     next_accelerometer_index = (next_accelerometer_index + 1) % mem->accelerometer.entries.size(); | ||||||
| 
 | 
 | ||||||
|     Common::Vec3<float> accel; |     Common::Vec3<float> accel; | ||||||
|     if (!motion_device) { |  | ||||||
|         is_device_reload_pending.store(true); |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
|     std::tie(accel, std::ignore) = motion_device->GetStatus(); |     std::tie(accel, std::ignore) = motion_device->GetStatus(); | ||||||
|     accel *= accelerometer_coef; |     accel *= accelerometer_coef; | ||||||
|     // TODO(wwylele): do a time stretch like the one in UpdateGyroscopeCallback
 |     // TODO(wwylele): do a time stretch like the one in UpdateGyroscopeCallback
 | ||||||
|  | @ -261,10 +257,6 @@ void Module::UpdateGyroscopeCallback(u64 userdata, s64 cycles_late) { | ||||||
|     GyroscopeDataEntry& gyroscope_entry = mem->gyroscope.entries[mem->gyroscope.index]; |     GyroscopeDataEntry& gyroscope_entry = mem->gyroscope.entries[mem->gyroscope.index]; | ||||||
| 
 | 
 | ||||||
|     Common::Vec3<float> gyro; |     Common::Vec3<float> gyro; | ||||||
|     if (!motion_device) { |  | ||||||
|         is_device_reload_pending.store(true); |  | ||||||
|         return; |  | ||||||
|     } |  | ||||||
|     std::tie(std::ignore, gyro) = motion_device->GetStatus(); |     std::tie(std::ignore, gyro) = motion_device->GetStatus(); | ||||||
|     double stretch = system.perf_stats->GetLastFrameTimeScale(); |     double stretch = system.perf_stats->GetLastFrameTimeScale(); | ||||||
|     gyro *= gyroscope_coef * static_cast<float>(stretch); |     gyro *= gyroscope_coef * static_cast<float>(stretch); | ||||||
|  |  | ||||||
|  | @ -71,7 +71,9 @@ private: | ||||||
|     void serialize(Archive& ar, const unsigned int) { |     void serialize(Archive& ar, const unsigned int) { | ||||||
|         ar& hid_period; |         ar& hid_period; | ||||||
|         ar& calibration_data;        // This isn't writeable for now, but might be in future
 |         ar& calibration_data;        // This isn't writeable for now, but might be in future
 | ||||||
|         RequestInputDevicesReload(); // zl, zr, c_stick are loaded here
 |         if (Archive::is_loading::value) { | ||||||
|  |             LoadInputDevices(); // zl, zr, c_stick are loaded here
 | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     friend class boost::serialization::access; |     friend class boost::serialization::access; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -4,9 +4,9 @@ | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
| #include <cstring> | #include <cstring> | ||||||
|  | #include <boost/serialization/array.hpp> | ||||||
|  | #include <boost/serialization/binary_object.hpp> | ||||||
| #include "audio_core/dsp_interface.h" | #include "audio_core/dsp_interface.h" | ||||||
| #include "boost/serialization/array.hpp" |  | ||||||
| #include "boost/serialization/binary_object.hpp" |  | ||||||
| #include "common/archives.h" | #include "common/archives.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  |  | ||||||
|  | @ -9,7 +9,6 @@ | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <string> | #include <string> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/serialization/access.hpp> |  | ||||||
| #include <boost/serialization/array.hpp> | #include <boost/serialization/array.hpp> | ||||||
| #include <boost/serialization/vector.hpp> | #include <boost/serialization/vector.hpp> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | @ -86,12 +85,12 @@ struct PageTable { | ||||||
|         struct Entry { |         struct Entry { | ||||||
|             Entry(Pointers& pointers_, VAddr idx_) : pointers(pointers_), idx(idx_) {} |             Entry(Pointers& pointers_, VAddr idx_) : pointers(pointers_), idx(idx_) {} | ||||||
| 
 | 
 | ||||||
|             inline void operator=(MemoryRef value) { |             void operator=(MemoryRef value) { | ||||||
|                 pointers.refs[idx] = value; |                 pointers.refs[idx] = value; | ||||||
|                 pointers.raw[idx] = value.GetPtr(); |                 pointers.raw[idx] = value.GetPtr(); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             inline operator u8*() { |             operator u8*() { | ||||||
|                 return pointers.raw[idx]; |                 return pointers.raw[idx]; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  | @ -100,15 +99,15 @@ struct PageTable { | ||||||
|             VAddr idx; |             VAddr idx; | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         inline Entry operator[](VAddr idx) { |         Entry operator[](VAddr idx) { | ||||||
|             return Entry(*this, idx); |             return Entry(*this, idx); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         inline u8* operator[](VAddr idx) const { |         u8* operator[](VAddr idx) const { | ||||||
|             return raw[idx]; |             return raw[idx]; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         inline Entry operator[](std::size_t idx) { |         Entry operator[](std::size_t idx) { | ||||||
|             return Entry(*this, static_cast<VAddr>(idx)); |             return Entry(*this, static_cast<VAddr>(idx)); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -133,7 +132,7 @@ struct PageTable { | ||||||
|      */ |      */ | ||||||
|     std::array<PageType, PAGE_TABLE_NUM_ENTRIES> attributes; |     std::array<PageType, PAGE_TABLE_NUM_ENTRIES> attributes; | ||||||
| 
 | 
 | ||||||
|     inline std::array<u8*, PAGE_TABLE_NUM_ENTRIES>& GetPointerArray() { |     std::array<u8*, PAGE_TABLE_NUM_ENTRIES>& GetPointerArray() { | ||||||
|         return pointers.raw; |         return pointers.raw; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -385,7 +385,6 @@ void GeometryPipeline::serialize(Archive& ar, const unsigned int version) { | ||||||
| 
 | 
 | ||||||
| } // namespace Pica
 | } // namespace Pica
 | ||||||
| 
 | 
 | ||||||
| BOOST_SERIALIZATION_ASSUME_ABSTRACT(Pica::GeometryPipelineBackend) |  | ||||||
| SERIALIZE_EXPORT_IMPL(Pica::GeometryPipeline_Point) | SERIALIZE_EXPORT_IMPL(Pica::GeometryPipeline_Point) | ||||||
| SERIALIZE_EXPORT_IMPL(Pica::GeometryPipeline_VariablePrimitive) | SERIALIZE_EXPORT_IMPL(Pica::GeometryPipeline_VariablePrimitive) | ||||||
| SERIALIZE_EXPORT_IMPL(Pica::GeometryPipeline_FixedPrimitive) | SERIALIZE_EXPORT_IMPL(Pica::GeometryPipeline_FixedPrimitive) | ||||||
|  |  | ||||||
|  | @ -5,6 +5,7 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
|  | #include <boost/serialization/array.hpp> | ||||||
| #include <boost/serialization/split_member.hpp> | #include <boost/serialization/split_member.hpp> | ||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue