mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Serialize kernel/hle/memory
This commit is contained in:
		
							parent
							
								
									050c3bdee5
								
							
						
					
					
						commit
						8c81500dee
					
				
					 4 changed files with 40 additions and 4 deletions
				
			
		
							
								
								
									
										4
									
								
								TODO
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								TODO
									
										
									
									
									
								
							|  | @ -11,7 +11,7 @@ | ||||||
| ✔ HW @done(19-08-13 15:41) | ✔ HW @done(19-08-13 15:41) | ||||||
|     ✔ GPU regs @done(19-08-13 15:41) |     ✔ GPU regs @done(19-08-13 15:41) | ||||||
|     ✔ LCD regs @done(19-08-13 15:41) |     ✔ LCD regs @done(19-08-13 15:41) | ||||||
| ☐ Video core @started(19-08-13 16:43) | ✔ Video core @started(19-08-13 16:43) @done(19-12-22 16:06) | ||||||
|     ✔ Geometry pipeline @done(19-12-22 15:52) |     ✔ Geometry pipeline @done(19-12-22 15:52) | ||||||
|         Required more use of g_state |         Required more use of g_state | ||||||
|     ✔ PICA state @done(19-08-13 15:41) |     ✔ PICA state @done(19-08-13 15:41) | ||||||
|  | @ -28,7 +28,7 @@ | ||||||
|         ✔ Handle table @done(19-08-13 16:42) |         ✔ Handle table @done(19-08-13 16:42) | ||||||
|         ☐ HLE IPC |         ☐ HLE IPC | ||||||
|         ☐ IPC |         ☐ IPC | ||||||
|         ☐ Memory @started(19-08-13 16:43) |         ✔ Memory @started(19-08-13 16:43) @done(19-12-22 18:34) | ||||||
|         ☐ Mutex @started(19-08-13 16:43) |         ☐ Mutex @started(19-08-13 16:43) | ||||||
|         ✔ Object @done(19-08-13 15:41) |         ✔ Object @done(19-08-13 15:41) | ||||||
|         ☐ Process @started(19-08-13 16:43) |         ☐ Process @started(19-08-13 16:43) | ||||||
|  |  | ||||||
							
								
								
									
										33
									
								
								src/common/serialization/boost_discrete_interval.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/common/serialization/boost_discrete_interval.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include "common/common_types.h" | ||||||
|  | #include <boost/icl/discrete_interval.hpp> | ||||||
|  | 
 | ||||||
|  | namespace boost::serialization { | ||||||
|  | 
 | ||||||
|  | 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) | ||||||
|  | { | ||||||
|  |     ar << obj.lower(); | ||||||
|  |     ar << obj.upper(); | ||||||
|  |     ar << obj.bounds()._bits; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | template <class Archive, class DomainT, ICL_COMPARE Compare> | ||||||
|  | void load(Archive& ar, boost::icl::discrete_interval<DomainT, Compare>& obj, const unsigned int file_version) | ||||||
|  | { | ||||||
|  |     DomainT upper, lower; | ||||||
|  |     boost::icl::bound_type bounds; | ||||||
|  |     ar >> upper; | ||||||
|  |     ar >> lower; | ||||||
|  |     ar >> bounds; | ||||||
|  |     obj = boost::icl::discrete_interval(upper, lower, boost::icl::interval_bounds(bounds)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | template <class Archive, class DomainT, ICL_COMPARE Compare> | ||||||
|  | void serialize(Archive& ar, boost::icl::discrete_interval<DomainT, Compare>& obj, const unsigned int file_version) | ||||||
|  | { | ||||||
|  |     boost::serialization::split_free(ar, obj, file_version); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -108,6 +108,7 @@ void KernelSystem::AddNamedPort(std::string name, std::shared_ptr<ClientPort> po | ||||||
| template <class Archive> | template <class Archive> | ||||||
| void KernelSystem::serialize(Archive& ar, const unsigned int file_version) | void KernelSystem::serialize(Archive& ar, const unsigned int file_version) | ||||||
| { | { | ||||||
|  |     ar & memory_regions; | ||||||
|     ar & named_ports; |     ar & named_ports; | ||||||
|     ar & *current_cpu.get(); |     ar & *current_cpu.get(); | ||||||
|     // NB: subsystem references and prepare_reschedule_callback are constant
 |     // NB: subsystem references and prepare_reschedule_callback are constant
 | ||||||
|  | @ -120,7 +121,6 @@ void KernelSystem::serialize(Archive& ar, const unsigned int file_version) | ||||||
|     ar & *thread_manager.get(); |     ar & *thread_manager.get(); | ||||||
|     ar & *config_mem_handler.get(); |     ar & *config_mem_handler.get(); | ||||||
|     // Shared page data is read-only at the moment, so doesn't need serializing
 |     // Shared page data is read-only at the moment, so doesn't need serializing
 | ||||||
|     //ar & *shared_page_handler.get();
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| SERIALIZE_IMPL(KernelSystem) | SERIALIZE_IMPL(KernelSystem) | ||||||
|  |  | ||||||
|  | @ -6,6 +6,8 @@ | ||||||
| 
 | 
 | ||||||
| #include <optional> | #include <optional> | ||||||
| #include <boost/icl/interval_set.hpp> | #include <boost/icl/interval_set.hpp> | ||||||
|  | #include <boost/serialization/set.hpp> | ||||||
|  | #include "common/serialization/boost_discrete_interval.hpp" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| 
 | 
 | ||||||
| namespace Kernel { | namespace Kernel { | ||||||
|  | @ -69,7 +71,8 @@ private: | ||||||
|         ar & base; |         ar & base; | ||||||
|         ar & size; |         ar & size; | ||||||
|         ar & used; |         ar & used; | ||||||
|         // TODO: boost icl / free_blocks
 |         // This works because interval_set has exactly one member of type ImplSetT
 | ||||||
|  |         ar & *(reinterpret_cast<IntervalSet::ImplSetT*>(&free_blocks)); | ||||||
|     } |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue