diff options
| author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2019-06-12 07:52:49 -0400 |
|---|---|---|
| committer | FernandoS27 <fsahmkow27@gmail.com> | 2019-07-05 15:49:26 -0400 |
| commit | 7d1b974bcaf72c32910dcf4ff2d435f91cf40609 (patch) | |
| tree | 64c69a14a9135b0027dea0d7e832e52710d7d8a8 /src/core/hle/service/nvdrv/nvdrv.cpp | |
| parent | 61697864c3c8abc35ce957f5f0a0dacd7a8e96f9 (diff) | |
GPU: Correct Interrupts to interrupt on syncpt/value instead of event, mirroring hardware
Diffstat (limited to 'src/core/hle/service/nvdrv/nvdrv.cpp')
| -rw-r--r-- | src/core/hle/service/nvdrv/nvdrv.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/core/hle/service/nvdrv/nvdrv.cpp b/src/core/hle/service/nvdrv/nvdrv.cpp index c68d29177..b87c228bd 100644 --- a/src/core/hle/service/nvdrv/nvdrv.cpp +++ b/src/core/hle/service/nvdrv/nvdrv.cpp @@ -89,13 +89,14 @@ ResultCode Module::Close(u32 fd) { return RESULT_SUCCESS; } -void Module::SignalEvent(const u32 event_id) { - if (event_id >= 64) { - LOG_ERROR(Service_NVDRV, "Unexpected Event signalled!"); - return; +void Module::SignalSyncpt(const u32 syncpoint_id, const u32 value) { + for (u32 i = 0; i < MaxNvEvents; i++) { + 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.LiberateEvent(event_id); - events_interface.events[event_id].writable->Signal(); } Kernel::SharedPtr<Kernel::ReadableEvent> Module::GetEvent(const u32 event_id) { |
