Emulator Issues #12852
openSupport Asynchronous Presentation
0%
Description
We need to support Asynchronous Presentation. It isn't that hard (so I'm told by a graphics dev) and it has a very long list of benefits that it would provide for Dolphin.
- Resolves frame pacing issues for non-60 hertz titles.
- Resolves presentation issues and our bad frame pacing on non-60hz panels.
- Improves frame time consistency.
- Improves accuracy by no longer blocking the rendering thread while presentation is waiting on vsync, which is closer to how VI actually works.
- Improves performance by not stalling the GPU as much, as presentation is no longer blocking the render thread. This is a minor benefit for PC but HUGE for mobile.
- Improves fluidity of interacting with onscreen rendering elements, such as the fps counter, netplay chat, and upcoming projects.
- Allows us to decouple post-processing and compositing from EFB/XFB, allowing for more post processing options and flexibility.
- Allows for interacting with onscreen rendering elements without requiring a game to be running.
- Allows us to know when the rendering thread is going to give us a frame, and we can calculate when the host compositor will consume the frame. This lets us optimize the crap out of frame timing and frame pacing. For example, we could delay giving the compositor the frame up until the last moment within jitter period to actually consume at the absolute optimal time for pristine frame pacing.
Updated by MayImilae almost 3 years ago
- Relates to performance changed from No to Yes
Updated by pneumatic almost 3 years ago
- Resolves frame pacing issues for non-60 hertz titles.
- Resolves presentation issues and our bad frame pacing on non-60hz panels.
- Improves frame time consistency.
Might it be possible to achieve the above 3 items by forcing a certain number of prerendered frames through the graphics API? eg. 1, 2 or 3 prerendered frames. Increasing it would result in input latency, but at least should provide smooth frame pacing if there are always some prerendered frames in the queue.
Nvidia used to have a "max prerendered frames" setting, but I believe that doesn't actually force the value, rather it just allows that many if the application wants it. What I'm suggesting is a forced value to always ensure there are n frames in the queue.
In my experience I can never get smooth frame pacing unless Dolphin is presenting 60fps and the monitor is 60hz. Note that "presenting" isn't what Dolphin reports in its fps meter -- to see "presented" fps requires some third party tool like RTSS. For 30fps titles you can force 60fps presentation by unticking "skip presenting duplicate frames" and "immediately present XFB". Then you should see 60fps in RTSS and have smooth pacing, however input latency will probably be noticeably highter. The NVidia driver has an "ultra low latency" setting in its driver which may help reduce that. Limiting fps to 60 with RTSS may keep latency as low as possible, but I suspect it affects audio quality due to it slowing down the entire emulation pipeline.
Updated by JMC4789 about 2 years ago
- Related to Emulator Issues #13084: Presentation Megathread - Vsync/ScreenTearing/Framepacing Issue added
Updated by JMC4789 about 2 years ago
- Has duplicate Emulator Issues #12761: Black flashing when pressing or releasing turbo button with Vulkan in Exclusive Fullscreen in my laptop's 120hz screen added
Updated by JMC4789 about 2 years ago
- Has duplicate Emulator Issues #11883: Corruption while using VSync in exclusive fullscreen (Vulkan) added
Updated by JMC4789 about 2 years ago
- Has duplicate Emulator Issues #10652: Full-screen Vulkan swapchains screen bugs at 4K resolution added
Updated by JMC4789 about 2 years ago
- Has duplicate Emulator Issues #10237: Vulkan + fullscreen + vsync = system freeze added