From 7d1b974bcaf72c32910dcf4ff2d435f91cf40609 Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Wed, 12 Jun 2019 07:52:49 -0400 Subject: GPU: Correct Interrupts to interrupt on syncpt/value instead of event, mirroring hardware --- src/core/hardware_interrupt_manager.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/core/hardware_interrupt_manager.cpp') 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 { InterruptManager::InterruptManager(Core::System& system_in) : system(system_in) { gpu_interrupt_event = - system.CoreTiming().RegisterEvent("GPUInterrupt", [this](u64 event_index, s64) { + system.CoreTiming().RegisterEvent("GPUInterrupt", [this](u64 message, s64) { auto nvdrv = system.ServiceManager().GetService("nvdrv"); - nvdrv->SignalGPUInterrupt(static_cast(event_index)); + const u32 syncpt = static_cast(message >> 32); + const u32 value = static_cast(message & 0x00000000FFFFFFFFULL); + nvdrv->SignalGPUInterruptSyncpt(syncpt, value); }); } -void InterruptManager::InterruptGPU(const u32 event_index) { - system.CoreTiming().ScheduleEvent(10, gpu_interrupt_event, static_cast(event_index)); +void InterruptManager::GPUInterruptSyncpt(const u32 syncpoint_id, const u32 value) { + const u64 msg = (static_cast(syncpoint_id) << 32ULL) | value; + system.CoreTiming().ScheduleEvent(10, gpu_interrupt_event, msg); } } // namespace Core::Hardware -- cgit v1.2.3