-
Notifications
You must be signed in to change notification settings - Fork 383
Commit
By putting the throttle step after the render step, the screen will be updated with the emulated frame's video output immediately instead of having to wait for the throttle sleep to complete. In scenarios where running the core is relatively cheap (<< 1 / fps), this should noticably improve visual latency while playing. For example, assuming a 60fps game (~16.7ms per frame), 5ms core update and 1ms render time, there will be a 10-11ms earlier render.
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -880,9 +880,8 @@ public int ProgramRunLoop() | |
} | ||
|
||
StepRunLoop_Core(); | ||
StepRunLoop_Throttle(); | ||
|
||
Render(); | ||
StepRunLoop_Throttle(); | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
Morilli
Author
Collaborator
|
||
|
||
// HACK: RAIntegration might peek at memory during messages | ||
// we need this to allow memory access here, otherwise it will deadlock | ||
|
Doing this seems incorrect by a consistency perspective. You'd want to render at consistent intervals in order to have consistent frame presentation (i.e. minimal judder) and it's probably important for VRR monitors to properly understand the core's actual FPS. Core update time could potentially be fairly variable (albeit probably consistent mostly), the throtte step would ensure rendering is done at a consistent time. Doing this could be fine if VSync is enabled, which implicitly adds a wait within Render() (although it isn't enabled by default), or possibly when in Turbo/Fast Forward where we implicitly don't particularly care about consistency.