diff options
Diffstat (limited to 'src/core/hardware_interrupt_manager.cpp')
| -rw-r--r-- | src/core/hardware_interrupt_manager.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/core/hardware_interrupt_manager.cpp b/src/core/hardware_interrupt_manager.cpp index 463d2916c..c3fffa894 100644 --- a/src/core/hardware_interrupt_manager.cpp +++ b/src/core/hardware_interrupt_manager.cpp | |||
| @@ -8,14 +8,17 @@ namespace Core::Hardware { | |||
| 8 | 8 | ||
| 9 | InterruptManager::InterruptManager(Core::System& system_in) : system(system_in) { | 9 | InterruptManager::InterruptManager(Core::System& system_in) : system(system_in) { |
| 10 | gpu_interrupt_event = | 10 | gpu_interrupt_event = |
| 11 | system.CoreTiming().RegisterEvent("GPUInterrupt", [this](u64 event_index, s64) { | 11 | system.CoreTiming().RegisterEvent("GPUInterrupt", [this](u64 message, s64) { |
| 12 | auto nvdrv = system.ServiceManager().GetService<Service::Nvidia::NVDRV>("nvdrv"); | 12 | auto nvdrv = system.ServiceManager().GetService<Service::Nvidia::NVDRV>("nvdrv"); |
| 13 | nvdrv->SignalGPUInterrupt(static_cast<u32>(event_index)); | 13 | const u32 syncpt = static_cast<u32>(message >> 32); |
| 14 | const u32 value = static_cast<u32>(message & 0x00000000FFFFFFFFULL); | ||
| 15 | nvdrv->SignalGPUInterruptSyncpt(syncpt, value); | ||
| 14 | }); | 16 | }); |
| 15 | } | 17 | } |
| 16 | 18 | ||
| 17 | void InterruptManager::InterruptGPU(const u32 event_index) { | 19 | void InterruptManager::GPUInterruptSyncpt(const u32 syncpoint_id, const u32 value) { |
| 18 | system.CoreTiming().ScheduleEvent(10, gpu_interrupt_event, static_cast<u64>(event_index)); | 20 | const u64 msg = (static_cast<u64>(syncpoint_id) << 32ULL) | value; |
| 21 | system.CoreTiming().ScheduleEvent(10, gpu_interrupt_event, msg); | ||
| 19 | } | 22 | } |
| 20 | 23 | ||
| 21 | } // namespace Core::Hardware | 24 | } // namespace Core::Hardware |