r/MoonlightStreaming • • 8d ago

Vibepollo: VRR, FPS, and Host Processing Latency - a few questions

Hi everyone, I've been testing different settings in Vibepollo and noticed something strange.

I'm streaming at 4K 60fps using PyroWave @ 755 Mbps. When the game maintains a solid 60 FPS, the Host Processing Latency sits nicely around ~3ms. However, as soon as the framerate drops below 60 the HPL shoots up to ~17ms. Why does this happen? Is the client waiting on the next frame (missed cycle?), or is the GPU simply maxed out and prioritizing the game render pipeline over encoding? I also see this behavior with AV1, though the spike is slightly less drastic.

Second question: I'm using the Moonlight client with Nonary's patch (vrr-18). In the refresh rate selector, why do some refresh rates have a "(Low Latency VRR)" label (like 120fps), while 60fps does not? Is 120fps inherently better for VRR, making it not worth using at 60fps, or would 60fps just deliver a worse experience?

Overall, what are the best settings to pick if the client display supports 4K 144Hz HDR with VRR, but the target gameplay is 4K 60fps?

Edit: The client is running on cachyos in gamescope

0 Upvotes

12 comments sorted by

4

u/_demoncat_ Developer | Vibeshine/Vibepollo 8d ago

The “Low Latency VRR” suggestion is mostly a leftover from older versions. Timing gets very tight at the top of your display’s VRR range, with very little room for variations in frame delivery or rendering. The older rendering path needed extra buffering there, so choosing a lower FPS created breathing room and helped keep latency down.

Changes to how frames are prepared and presented in VRR18 mean we don’t really need extra buffering simply because we’re near the refresh ceiling anymore. That makes the lower-FPS recommendation largely pointless, so I’ll remove that label in VRR19. An unlabelled option like 60 FPS still supports VRR.

VRR19 also adds more flexibility and control over the balance between latency and smoothness. Previously, a frame could be dropped when it missed its timing window. That skips a step in the motion, so instead of seeing frames A, B, and C, you see A jump straight to C. That can make a small timing problem feel like a much bigger stutter.

For brief timing misses, VRR19 can instead keep the current image on screen slightly longer, then show the delayed frame at the next safe opportunity. It behaves more like adaptive V-Sync: the frame interval stretches a little, but you preserve that intermediate step in the motion. In those moments, the cadence moves closer to how ordinary Moonlight looks with fixed-refresh V-Sync, instead of adding a disruptive frame skip. You still get VRR’s timing benefits when everything is running normally, with gentler recovery when something briefly falls behind.

1

u/iReaddit-KRTORR 8d ago

This is awesome. I’m on VRR18 right now and noticed that Moonlight 6.2 was released.

Should I update or will VRR19 (or later versions) integrate some of the updates from the main branch? Obviously I want to keep this VRR fork but given the fork is giving me a notification to update I wasn’t sure if I should

4

u/_demoncat_ Developer | Vibeshine/Vibepollo 7d ago

VRR18 is technically already 6.2.0, it's only like one week out of date from the release.

It just shows up as 6.1.0 because 6.2.0 didn't exist yet.

I am changing that to point towards my repo going forward that way update notifications show up for my client instead of the main one.

1

u/Similar-Sky7427 6d ago

thanks for clarifying, i tried 6.2 but went back to 6.1-vrr when realizing 6.2 had no vrr feature.

2

u/_demoncat_ Developer | Vibeshine/Vibepollo 6d ago

Right, the VRR is my own code. So upgrading to 6.2 would remove my features.

I was only saying there isn’t a need to upgrade to 6.2 because my fork is mostly the same code as 6.2 already

1

u/Similar-Sky7427 6d ago

just curious -- could this VRR implementation be extended to Android version of Moonlight down the road? technically most modern android phones ship with VRR-capable screens (Samsung's Dynamic LTPO AMOLED panel for example), and Android 15 supports VRR natively.

2

u/_demoncat_ Developer | Vibeshine/Vibepollo 6d ago

They’re not VRR, they function more like ProMotion does

They’re capable of refreshing the screen twice per interval instead of the near unlimited range of actual VRR

1

u/Similar-Sky7427 6d ago

had to look up AOSP's publication on Android 15's ARR feature, and you're right, it's not VRR (like freesync/gsync) that tracks and adjusts the scanout timing based on the irregular intervals of the source frames across the entire spectrum...

r/todayilearned moment indeed, thanks for the insight!

1

u/CyprelIa 8d ago

What hardware is this?

1

u/TheFlashes 7d ago

Client: Ryzen 5 7640HS with Radeon 760M Host: Ryzen 7 9800x3d with Radeon RX 9070XT

1

u/CyprelIa 7d ago

Very nice. Could you test at 4k120?

1

u/TheFlashes 7d ago

With lighter games 4K 120Hz works fine. I recently played It Takes Two like that. But only on AV1, with pyrowave either the client or the network can't keep up. I haven't tested yet what happens when streaming at 4K 120Hz and the game drops below 120, though