mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	hle service: nvdrv: Update to instantiate SyncpointManager.
This commit is contained in:
		
							parent
							
								
									d567b7e841
								
							
						
					
					
						commit
						4a3fd97e48
					
				| @ -21,6 +21,7 @@ | ||||
| #include "core/hle/service/nvdrv/interface.h" | ||||
| #include "core/hle/service/nvdrv/nvdrv.h" | ||||
| #include "core/hle/service/nvdrv/nvmemp.h" | ||||
| #include "core/hle/service/nvdrv/syncpoint_manager.h" | ||||
| #include "core/hle/service/nvflinger/nvflinger.h" | ||||
| 
 | ||||
| namespace Service::Nvidia { | ||||
| @ -40,7 +41,7 @@ Module::Module(Core::System& system) : syncpoint_manager{system.GPU()} { | ||||
|     auto& kernel = system.Kernel(); | ||||
|     for (u32 i = 0; i < MaxNvEvents; i++) { | ||||
|         std::string event_label = fmt::format("NVDRV::NvEvent_{}", i); | ||||
|         events_interface.events[i] = Kernel::WritableEvent::CreateEventPair(kernel, event_label); | ||||
|         events_interface.events[i] = {Kernel::WritableEvent::CreateEventPair(kernel, event_label)}; | ||||
|         events_interface.status[i] = EventState::Free; | ||||
|         events_interface.registered[i] = false; | ||||
|     } | ||||
| @ -95,17 +96,17 @@ void Module::SignalSyncpt(const u32 syncpoint_id, const u32 value) { | ||||
|         if (events_interface.assigned_syncpt[i] == syncpoint_id && | ||||
|             events_interface.assigned_value[i] == value) { | ||||
|             events_interface.LiberateEvent(i); | ||||
|             events_interface.events[i].writable->Signal(); | ||||
|             events_interface.events[i].event.writable->Signal(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| std::shared_ptr<Kernel::ReadableEvent> Module::GetEvent(const u32 event_id) const { | ||||
|     return events_interface.events[event_id].readable; | ||||
|     return events_interface.events[event_id].event.readable; | ||||
| } | ||||
| 
 | ||||
| std::shared_ptr<Kernel::WritableEvent> Module::GetEventWriteable(const u32 event_id) const { | ||||
|     return events_interface.events[event_id].writable; | ||||
|     return events_interface.events[event_id].event.writable; | ||||
| } | ||||
| 
 | ||||
| } // namespace Service::Nvidia
 | ||||
|  | ||||
| @ -10,6 +10,7 @@ | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/writable_event.h" | ||||
| #include "core/hle/service/nvdrv/nvdata.h" | ||||
| #include "core/hle/service/nvdrv/syncpoint_manager.h" | ||||
| #include "core/hle/service/service.h" | ||||
| 
 | ||||
| namespace Core { | ||||
| @ -22,15 +23,23 @@ class NVFlinger; | ||||
| 
 | ||||
| namespace Service::Nvidia { | ||||
| 
 | ||||
| class SyncpointManager; | ||||
| 
 | ||||
| namespace Devices { | ||||
| class nvdevice; | ||||
| } | ||||
| 
 | ||||
| /// Represents an Nvidia event
 | ||||
| struct NvEvent { | ||||
|     Kernel::EventPair event; | ||||
|     Fence fence{}; | ||||
| }; | ||||
| 
 | ||||
| struct EventInterface { | ||||
|     // Mask representing currently busy events
 | ||||
|     u64 events_mask{}; | ||||
|     // Each kernel event associated to an NV event
 | ||||
|     std::array<Kernel::EventPair, MaxNvEvents> events; | ||||
|     std::array<NvEvent, MaxNvEvents> events; | ||||
|     // The status of the current NVEvent
 | ||||
|     std::array<EventState, MaxNvEvents> status{}; | ||||
|     // Tells if an NVEvent is registered or not
 | ||||
| @ -119,6 +128,9 @@ public: | ||||
|     std::shared_ptr<Kernel::WritableEvent> GetEventWriteable(u32 event_id) const; | ||||
| 
 | ||||
| private: | ||||
|     /// Manages syncpoints on the host
 | ||||
|     SyncpointManager syncpoint_manager; | ||||
| 
 | ||||
|     /// Id to use for the next open file descriptor.
 | ||||
|     u32 next_fd = 1; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei