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/interface.h" | ||||||
| #include "core/hle/service/nvdrv/nvdrv.h" | #include "core/hle/service/nvdrv/nvdrv.h" | ||||||
| #include "core/hle/service/nvdrv/nvmemp.h" | #include "core/hle/service/nvdrv/nvmemp.h" | ||||||
|  | #include "core/hle/service/nvdrv/syncpoint_manager.h" | ||||||
| #include "core/hle/service/nvflinger/nvflinger.h" | #include "core/hle/service/nvflinger/nvflinger.h" | ||||||
| 
 | 
 | ||||||
| namespace Service::Nvidia { | namespace Service::Nvidia { | ||||||
| @ -40,7 +41,7 @@ Module::Module(Core::System& system) : syncpoint_manager{system.GPU()} { | |||||||
|     auto& kernel = system.Kernel(); |     auto& kernel = system.Kernel(); | ||||||
|     for (u32 i = 0; i < MaxNvEvents; i++) { |     for (u32 i = 0; i < MaxNvEvents; i++) { | ||||||
|         std::string event_label = fmt::format("NVDRV::NvEvent_{}", 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.status[i] = EventState::Free; | ||||||
|         events_interface.registered[i] = false; |         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 && |         if (events_interface.assigned_syncpt[i] == syncpoint_id && | ||||||
|             events_interface.assigned_value[i] == value) { |             events_interface.assigned_value[i] == value) { | ||||||
|             events_interface.LiberateEvent(i); |             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 { | 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 { | 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
 | } // namespace Service::Nvidia
 | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ | |||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/hle/kernel/writable_event.h" | #include "core/hle/kernel/writable_event.h" | ||||||
| #include "core/hle/service/nvdrv/nvdata.h" | #include "core/hle/service/nvdrv/nvdata.h" | ||||||
|  | #include "core/hle/service/nvdrv/syncpoint_manager.h" | ||||||
| #include "core/hle/service/service.h" | #include "core/hle/service/service.h" | ||||||
| 
 | 
 | ||||||
| namespace Core { | namespace Core { | ||||||
| @ -22,15 +23,23 @@ class NVFlinger; | |||||||
| 
 | 
 | ||||||
| namespace Service::Nvidia { | namespace Service::Nvidia { | ||||||
| 
 | 
 | ||||||
|  | class SyncpointManager; | ||||||
|  | 
 | ||||||
| namespace Devices { | namespace Devices { | ||||||
| class nvdevice; | class nvdevice; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /// Represents an Nvidia event
 | ||||||
|  | struct NvEvent { | ||||||
|  |     Kernel::EventPair event; | ||||||
|  |     Fence fence{}; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| struct EventInterface { | struct EventInterface { | ||||||
|     // Mask representing currently busy events
 |     // Mask representing currently busy events
 | ||||||
|     u64 events_mask{}; |     u64 events_mask{}; | ||||||
|     // Each kernel event associated to an NV event
 |     // 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
 |     // The status of the current NVEvent
 | ||||||
|     std::array<EventState, MaxNvEvents> status{}; |     std::array<EventState, MaxNvEvents> status{}; | ||||||
|     // Tells if an NVEvent is registered or not
 |     // Tells if an NVEvent is registered or not
 | ||||||
| @ -119,6 +128,9 @@ public: | |||||||
|     std::shared_ptr<Kernel::WritableEvent> GetEventWriteable(u32 event_id) const; |     std::shared_ptr<Kernel::WritableEvent> GetEventWriteable(u32 event_id) const; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|  |     /// Manages syncpoints on the host
 | ||||||
|  |     SyncpointManager syncpoint_manager; | ||||||
|  | 
 | ||||||
|     /// Id to use for the next open file descriptor.
 |     /// Id to use for the next open file descriptor.
 | ||||||
|     u32 next_fd = 1; |     u32 next_fd = 1; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei