mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-05 13:20:11 +00:00
sceVideoOutSubmitFlip went through queue 0 as a one-packet command buffer, so every CPU flip waited until the queue worker had translated all command buffers submitted before it. The PS5 RADV WSI flips from its own thread once the frame's fence has signaled. vkQuake keeps two frames in flight, so by then the next frame's command buffer is already queued, and the flip waited about 10 ms for the worker to translate it. Presents came in pairs, about 4.7 ms and 29 ms apart. Meanwhile the title waited in acquire for the flip to be shown, leaving the worker idle for about 7.5 ms per pair. A CPU flip from a thread that has never submitted queue-0 work now goes to the presenter at once, unless a command-buffer or EOP flip ahead of it has not been reached yet. Such a thread can only know that its frame is done by waiting for it. A flip from a thread that submits its own frames still waits for the work submitted ahead of it, because a title that flips without waiting for its frame relies on that order. APS5_CPU_FLIP_IN_ORDER=1 orders every CPU flip. vkQuake (PPSA99010) on an RTX 4060: 60 -> 72-74 presents per second, present-interval standard deviation 12.2 -> 2.1 ms, and intervals over 25 ms 40% -> 1%.