mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
HW: Poll system input from system timers
Rather than playing terrible hacks to determine the start of input frames, just update system input periodically. Specifically, every 60th of a second.
This commit is contained in:
@ -61,6 +61,8 @@ IPC_HLE_PERIOD: For the Wiimote this is the call schedule:
|
||||
#include "Core/IPC_HLE/WII_IPC_HLE.h"
|
||||
#include "Core/PowerPC/PowerPC.h"
|
||||
|
||||
#include "InputCommon/ControllerInterface/ControllerInterface.h"
|
||||
|
||||
#include "VideoCommon/CommandProcessor.h"
|
||||
#include "VideoCommon/VideoBackendBase.h"
|
||||
|
||||
@ -79,6 +81,7 @@ static int et_DSP;
|
||||
static int et_IPC_HLE;
|
||||
static int et_PatchEngine; // PatchEngine updates every 1/60th of a second by default
|
||||
static int et_Throttle;
|
||||
static int et_UpdateInput;
|
||||
|
||||
// These are badly educated guesses
|
||||
// Feel free to experiment. Set these in Init below.
|
||||
@ -132,6 +135,14 @@ static void VICallback(u64 userdata, int cyclesLate)
|
||||
CoreTiming::ScheduleEvent(VideoInterface::GetTicksPerLine() - cyclesLate, et_VI);
|
||||
}
|
||||
|
||||
static void UpdateInputCallback(u64 userdata, int cyclesLate)
|
||||
{
|
||||
g_controller_interface.UpdateInput();
|
||||
|
||||
// Poll system input every 1/60th of a second.
|
||||
CoreTiming::ScheduleEvent(SystemTimers::GetTicksPerSecond() / 60 - cyclesLate, et_UpdateInput);
|
||||
}
|
||||
|
||||
static void SICallback(u64 userdata, int cyclesLate)
|
||||
{
|
||||
SerialInterface::UpdateDevices();
|
||||
@ -258,6 +269,7 @@ void Init()
|
||||
et_IPC_HLE = CoreTiming::RegisterEvent("IPC_HLE_UpdateCallback", IPC_HLE_UpdateCallback);
|
||||
et_PatchEngine = CoreTiming::RegisterEvent("PatchEngine", PatchEngineCallback);
|
||||
et_Throttle = CoreTiming::RegisterEvent("Throttle", ThrottleCallback);
|
||||
et_UpdateInput = CoreTiming::RegisterEvent("UpdateInput", UpdateInputCallback);
|
||||
|
||||
CoreTiming::ScheduleEvent(VideoInterface::GetTicksPerLine(), et_VI);
|
||||
CoreTiming::ScheduleEvent(0, et_DSP);
|
||||
@ -271,6 +283,8 @@ void Init()
|
||||
|
||||
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bWii)
|
||||
CoreTiming::ScheduleEvent(IPC_HLE_PERIOD, et_IPC_HLE);
|
||||
|
||||
CoreTiming::ScheduleEvent(0, et_UpdateInput);
|
||||
}
|
||||
|
||||
void Shutdown()
|
||||
|
Reference in New Issue
Block a user