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