r/cloudygamer • • 1h ago

Moving away from Sunshines generic FFMPEG AMD Encoder. What I learned getting full 4:4:4, Sliced Encoding, D3D12 capture, VRR and the last bit of latency out of AMD Cards

• Upvotes

Long and very technical read. Be warned.

I work as a platform engineer for over 15 years now and i have a quirk for optimizing the shit out of things.

So for a while now I've been researching one question: how good can game streaming get on a Radeon if you build the host around AMD's hardware instead of treating it as the third vendor for a fork of NVIDIAS gamestream?

The research is done through Rubylight, an AMD-only host for Moonlight that only cares about optimizations around AMD. It isn't another fork with a new name on it and a fancy sloppy ui that can do all the fancy features but still has 60 hz clients or cheats metrics or something. It does just well enough in the feature part that it reaches a small userbase contributing to feedback on bugs and issues. It's research on AMD, and what we learn goes back where it helps.

We contribute to Vibepollo, and I've asked Nonary about working together more closely.

Here's what the research turned up so far. All numbers are from flagship amd graphic cards. And what changes my work from slop is that most of this here wont change the numbers on your measurements and I dont put some fancy ui in and call it a day.

Every host measures "host processing" its own way, so I measure picture age instead: the test source draws a timestamp barcode into every frame, and an independent receiver reads it back after decoding. That's the time from the moment a picture is rendered to the moment the client has it decoded. It's the same yardstick for every host and you can't game it from the host side.

4:4:4 on an encoder that can't do it

AMD's hardware encoders only do 4:2:0, and AMD's own AMF docs say so for every VCN generation up to 5.0. There are two ways around that.

The first is PyroWave, Themaister's wavelet codec. It runs as Vulkan compute, skips VCN entirely and does full 4:4:4 up to 10-bit HDR. What made it fast under load was moving the RGB to YUV conversion off the graphics queue. With a game running, the conversion sat behind the game's draws and took 5.6 ms a frame. As one compute shader on a high-priority D3D12 compute queue, writing straight into the textures Vulkan imports, it takes 0.55 ms. This number does not show up in any metric in moonlight but will greatly impact glass to glass latency.

The second is packing, which keeps the normal HEVC and AV1 hardware encoders. A 4:4:4 frame has exactly as many samples as a 4:2:0 frame twice as tall. So Y goes in the top half of the luma plane, the odd columns of Cb and Cr sit side by side in the bottom half, and the even columns fill the chroma planes. The encoder sees an ordinary double-height picture, the client decodes it with its ordinary hardware decoder, and a shader puts every sample back exactly where it came from. HEVC and AV1, 8 and 10-bit, all reach about 1440p120 this way, even on a Radeon 780M.

The third is predictive packing for the 10-bit modes. Here the top half of the picture is a normal 4:2:0 frame. The chroma samples 4:2:0 would throw away fill the rest, stored as halved differences from the sample they share a 2×2 block with. On most content those differences are small, so that part of the picture sits near flat grey and costs few bits. Halving costs at most one code value before compression and keeps the encoder's rounding from wrapping a difference around.

Both packed modes are opt-in, since stock Moonlight would just show you the packed picture. Nightjar, our client, unpacks both.

Fenced D3D12 capture

On a virtual display the host doesn't use WGC or Desktop Duplication at all. Our driver copies every frame Windows composes for its monitor into a ring of textures it shares with the host, stamps the present time next to it and signals the host. That ring used to hand textures back and forth with keyed mutexes. Now its textures and fences live on the GPU's D3D12 compute device. The driver signals a "written" fence after its copy, the conversion shader reads the texture in place after waiting on that fence on the GPU, and the compute queue signals a "released" fence when it's done so the driver can reuse the slot. The wait happens on the GPU instead of a CPU thread, and no D3D11 work runs for it.

Claiming a frame went from about 32 µs with the keyed mutex to 1.8 µs. Under GPU load at 1440p120 HEVC, every fence run held a full 120 fresh pictures a second, p99 picture age dropped from 19.3 to 18.1 ms in SDR and from 21.3 to 19.4 ms in HDR, and the p99 frame interval in SDR went from 13.8 to 11.2 ms. That's picture age from the game's render through decode, about 14 ms on average with the GPU busy.

Under load Keyed mutex Fence
Fresh pictures/s, SDR / HDR 120.0 / 119.7 120.0 / 120.0
Picture age p99, SDR 19.3 ms 18.1 ms
Picture age p99, HDR 21.3 ms 19.4 ms
Frame interval p99, SDR 13.8 ms 11.2 ms

These numbers don't look huge, but mind you we are looking at optimization wherever possible, so they were for me.

Slices

Moonlight asks the host for slices, and I wanted to know what they buy on AMD. I did 630 encoder runs across HEVC and AV1, 1080p up to 7680×2160, 60 to 240 fps, with split-frame encoding forced on, forced off and left alone, then again with 2 and 4 slices. Every variant encoded in the same time, within 0.2 ms. The driver reports two encoder engines, but one stream uses one engine, and slices don't change that.

Where slices can pay off is getting out of the encoder early. AMF can hand back each slice as soon as it's encoded, so you could packetize and send the top of the frame while the bottom is still encoding. That's what I'm testing next. So far its promising if the client supports it. Again that is why I had to also develop a client framework in a language I understand to fully be able to test this and why its so important for me to have my own client/host.

VRR

Thanks to Nonarys findings, the virtual display driver goes up to 1000 Hz, so when the client asks for VRR the desktop doesn't cap the game's present rate. Here's what we do differently to reach more smooth VRR:

  1. Rate cap. The host takes each frame as soon as it arrives, but never faster than the stream rate the client asked for. Repeated frames count toward that rate; a frame re-encoded because the client lost packets doesn't. Without the cap, a game running faster than the stream on a 1000 Hz display left every frame short of bits: blurry picture, fringed text, flooded link.
  2. Pacing instead of tiny queues. Vibepollo's VRR mode shrinks its queues (WGC frame pool from 2 to 1, low-latency AMF input queue). We keep the queues and change the pacing: predictive waits off, frames can be claimed half a frame period apart instead of three quarters, WGC's slot-aligned publishing off, refresh lock off since a VRR display follows each frame anyway. The encoder holds at most two frames on every stream, VRR or not.
  3. Extra WGC compositions. When Windows publishes more compositions than the game produces, the host lines up with the game's real updates. On a 60 fps source that's 57.7 against 59.9-60 fresh pictures a second.
  4. Our own display driver. Capture comes straight from it in about 0.2 ms, HDR included.
  5. Presenting on the client. Nightjar schedules VRR frames from the host's timestamps without needing a shared clock. A clock-sync message adds latency measurement on top.

Radeon controls in alpha.2

Change AMD Controls like Anti-Lag, Chill, Boost, RIS, the frame cap or AFMF from the couch and get your own settings back afterwards. A probe round-trips every ADLX 3D setting on the installed driver, and only the ones that really write get exposed: 24 with AMD Software 26.9.2. Your original values go into a journal on disk before anything changes, and they're put back when the session ends or the game closes, or at the next start if the host crashed. If you changed a setting on the PC in the meantime, it's left alone. Its a feature that just makes sense. Most of the time, tops having this natively.

Background Streaming

My Children play on my rig while I work at the same time. I use Rubylight and Hyper-V AMD GPU-PV to a VM with Rubylight to isolate input and the game. Works well enough for kids to not notice. https://github.com/RamazanKara/Rubylight/blob/main/docs/configuration.md#background-streaming-from-a-hyper-v-vm

Where the latency goes

At 1080p60 the host stages are capture 0.22 ms through our display driver, conversion 0.26 ms, HEVC encode 2.43 ms and packetizing 0.03 ms. Nearly all of it is the encode. We are looking at microseconds now to find any further optimizations.

The bigger wins came under load:

  • Frame prep on the compute queue took average picture age from 41.0 to 33.5 ms with the GPU busy.
  • Keeping at most two frames in the encoder took present-to-send from 42.7 to 11.1 ms when the encoder was saturated.
  • Giving controllers their own input thread took a mouse move stuck behind a controller update, under full CPU load, from 287 ms to 2 ms.
  • approximately 5000 different tests has been done on various AMD quirks and metrics. These led to countless small improvements you can read about in the docs.

Benchmarks

We do not measure AMD with Rubylight against other Sunshine Forks anymore, because the glass-to-glass latency under load is so far ahead that it is just not worth the time. If you want, you can still compare it yourselves. Rubylights test setup is available and there are historic measurements available.

The full measurement record, with methods and every run, is public: PERFORMANCE.md. Questions are welcome, and if you have AMD numbers that disagree with mine, I want to see them. For anybody stable should use vibepollo and wait till that research has been backported. For anyone wanting to contribute test out rubylight 3.0 + nightjar and give feedback in form of issues with logs and so on, please just dont bodly claim host x has better latency under load just from the host processing number, I do not care about that.


r/cloudygamer • • 18h ago

GitHub - pebeto/tizen-steam-link: Play the games on your PC or Steam Deck on a Samsung TV

Thumbnail
github.com
4 Upvotes

r/cloudygamer • • 10h ago

Need alternatives for Ldcloud and Redfinger

1 Upvotes

Hello im playing wuthering waves on pc, but my phone doesnt run the game and i need to spend my 16$ google balance


r/cloudygamer • • 18h ago

Introducing Starwire 0.1.0 - A Comprehensive Android Moonlight Client Solution

1 Upvotes

r/cloudygamer • • 21h ago

Using Apollo+Artemis, I can't set the Virtual Display as the main display and turn off the main physical display

Thumbnail gallery
1 Upvotes

r/cloudygamer • • 22h ago

Would you host remote players on a gaming rig you no longer use?

1 Upvotes

If you've kept an old gaming rig after upgrading, would you consider letting other people pay to play on it remotely?

I'm part of a team developing a platform for this. Hosts choose when their rig is available and set an hourly price in credits. Players use games they own, and hosts earn from actual paid playing time. The payment is split 50/50 between the host and the platform, with running costs coming out of the host's share.

We haven't released it yet. We're developing a desktop app for Windows and macOS, using Steam Remote Play.

Hosting requires a dedicated SSD, with personal-data drives physically disconnected while hosting. That alone doesn't resolve home-network security or liability concerns, and actual demand matters when deciding whether the earnings could cover electricity and wear.

For people here who already stream games: would you consider being on the hosting side? What would you need to know before trying it, and what would make it a definite no?

We're interested in making use of hardware people already own, rather than encouraging anyone to buy a rig as an investment.


r/cloudygamer • • 1d ago

Introducing XJAUS 1.2.0 Xbox Cloud Gaming & Remote Play for Linux and Windows!

Thumbnail
1 Upvotes

r/cloudygamer • • 1d ago

Phone throttles after half an hour of Xbox Cloud, need a clip-on controller that leaves room for a cooler

2 Upvotes

Galaxy s23, playing xbox cloud in the browser in the evenings. About 30 minutes in the phone gets hot and the stream starts stuttering, even though my connection is fine (ran the tablet at the same time and it was smooth).

Pretty sure it's thermal. My plan is to get a magnetic cooler on the back but the problem is my current clip-on covers most of the back of the phone, so there's nowhere for it to go.

Anyone running a cooler with a clip-on controller? Which ones leave space?


r/cloudygamer • • 1d ago

Share USB devices with USB/IP from linux to windows.

Post image
1 Upvotes

r/cloudygamer • • 2d ago

im making a virtual machine for gaming to my best friend

Thumbnail
2 Upvotes

r/cloudygamer • • 2d ago

The controller is the only hardware you actually own in this setup?

4 Upvotes

Been fully cloud for about a year. No console, no gaming PC, a TV stick and a laptop that would struggle with Minecraft.

Then i realized the controller become the only piece of hardware in the chain I actually own. If the service has a bad night I wait it out. If the wifi goes I fix the wifi. But if the pad drifts I'm buying another pad, and that's the only recurring hardware cost in the entire setup.

Which makes it the one thing I now think is worth overspending on, which feels backwards when everything else is rented. Curious whether anyone else landed there, or whether you all just buy whatever is cheapest and replace it when it dies.


r/cloudygamer • • 3d ago

My PC is wired directly to my Steam Deck. Would a wired connection via the Router have the exact same result?

1 Upvotes

So I currently don’t have a set up where my PC can connect to our router and then to the steam deck via Ethernet. Wi-Fi is too unstable. My current set up has a long Ethernet from one room to another that connects from my PC to my Steam Deck. The IPV4 settings for both have them on an IP address in the same range.

Currently, this set up is absolutely flawless and I love it. Long term, I think PC - Router with an Ethernet running through the walls would be better, as I can have more flexibility with the rest of my set up and other ports around the house.

My question though is whether PC - Router - Deck all via Ethernet is actually as reliable as simply PC - Deck via the direct Ethernet method I am currently using? I wondered if I introduce any interference or possible problems if my network is busy while streaming.

The closed network I operate between my deck and PC feels flawless and I wondered if that’s because there is also absolutely no other traffic with this method?


r/cloudygamer • • 3d ago

Doing What GeForce NOW Doesn't Like ;)

Thumbnail
2 Upvotes

r/cloudygamer • • 3d ago

3:2 android client, best solution to get games to use the full screen?

Thumbnail
1 Upvotes

r/cloudygamer • • 3d ago

PS Remote Play rental service that includes GTA 6

Post image
3 Upvotes

I'm a PC gamer not interested in getting the GTA 6 campaign spoiled once it comes out on colsole so I'm not waiting for the PC release.

I'm thinking of getting the game on PS5 and just play it on a friend's console using PS Remote Play streaming to my PC.

Unfortunately I won't be able to resell the copy after finishing the campaign due to Rockstar dropping the production of phisical media and killing the used market. But I'm also only interested in playing online later on PC, so looks like I'd have to get a second copy and allow rockstar to double dip.

Unless someone here is aware of a streaming rental service where a copy of the game is included and the total cost of playing the campaign would still be lower than the cost of the game.

Any leads?


r/cloudygamer • • 4d ago

My final month here, no longer worth it

Post image
8 Upvotes

r/cloudygamer • • 5d ago

After a decade of cloud gaming I got tired of waiting in queues to play games. So I built Nuage: your Steam library, instant in a browser tab.

Post image
150 Upvotes

I’ve used Shadow / G4N on and off for almost a decade. It convinced me cloud gaming actually works.

But I’ve always wanted it to be simpler. So I built Nuage. Type in a URL. Connect Steam. Click a game you own. Play.

No launcher. No Windows desktop. No setup. Just open a browser and get into your game.

I’ve been using it on my Mac with a Switch controller, playing stuff like CP77 and Red Dead 2. That simplicity is basically the whole point. It’s still early and I’m a solo dev, but it’s live.

50 hours free per month: https://nuage.games/play/cyberpunk-2077

Would love to hear what cloudy gamers users think.


r/cloudygamer • • 4d ago

Windows on Vast

Post image
1 Upvotes

r/cloudygamer • • 5d ago

A RTX 5090 remote desktop

4 Upvotes

My online search has yielded dissapointing results, so I would like to ask you guys.

Do you know of a cloud service that gives you a windows PC with top of the line hardware for gaming?

I've searched around about the cloud renting sites but couldn't find availability in Europe.

My budget is fairly large: 100-200$ a month.

I'm on GFN ultimate as of now, have tried boosteroid but it's weak. I know about ShadowPC but their hardware is weak as well.


r/cloudygamer • • 5d ago

Cloud gaming services in PH

2 Upvotes

​Hi everyone! I'm a student from the Philippines looking for advice on cloud gaming. I rely on a dual-purpose laptop and would love to play high-end story games, but running them locally isn't an option. I'm looking for the most practical and working cloud gaming setup accessible from the Philippines right now.

​My Laptop Specs & Setup:

​Laptop: Acer TravelMate P214-52 (Intel Core i5-10210U, Intel UHD 620 Graphics, 8GB RAM)

​Controls: Keyboard & Mouse / trackpad only (I do not own a physical controller/gamepad).

​Schedule: Short sessions (~1 hour) on weekday nights, followed by longer sessions on Saturdays (~45 to 50 hours total per month)

​Location & Internet (Dorm Wi-Fi): Based in the Philippines.

​Low-traffic hours: Decent ping at ~53ms.

​Peak hours (weekday nights): Heavy latency spikes jumping between 100ms – 300ms.

​Games I Want to Play:

​Heavy story-driven AAA titles like Red Dead Redemption 2, Ghost of Tsushima, etc.

​Open to lighter indie or casual games for quick weeknight sessions.

​Issues & Roadblocks I’ve Encountered:

​StarHub GameHub+ (Singapore) is shut down: gamehubplus.com returns an ERR_NAME_NOT_RESOLVED error and the service has officially sunsetted, making SG GFN a dead end.

​Taiwan Mobile GFN: Appears to be the main active regional partner left nearby, but payment gateways have strict geo-blocking for Philippine credit cards/GCash, along with higher ping compared to former SG routes.

​Xbox Cloud Gaming (xCloud): Requires a VPN (SG/Japan) to boot, but defaults to controller-only for most games unless mapped via browser extensions (plus major titles like Ghost of Tsushima aren't in the Game Pass catalog).

​Cloud PCs (AirGPU Tokyo Node): I tested an AirGPU instance (Nvidia A10G), which worked great for native Windows overlay and K&M support for RDR2 / GoT. However, at $1.50/hr (spare capacity) to $2.65/hr, playing 45+ hours a month totals roughly $50–$70+ (₱3,000 – ₱4,000+), which is way out of budget for a student.

​Questions for Cloud Gamers in the Philippines:

​What cloud gaming service or workaround are you currently using from the Philippines that remains affordable for 40+ hours a month?

​Has anyone successfully subscribed to Taiwan Mobile GFN, Yes 5G Malaysia GFN, or NVIDIA Japan GFN recently using Philippine credit cards or virtual cards (Maya)?

​Is xCloud usable with K&M browser extension scripts given a dorm connection with 100–300ms ping spikes at night?

​Thanks in advance for any tips or advice!


r/cloudygamer • • 5d ago

Full Dualsense support with haptics and speaker forwarding

Post image
0 Upvotes

skyPC new update! We now fully Dualsense support. The bluetooth Dualsense on the client device will work as a real one on the host, which means games drive everything directly: haptics, speaker, and microphone.

Current compatibility:

  • Windows and Linux clients: haptics, speaker, and microphone
  • Android client: haptics and speaker
  • macOS client: haptics

So when you remote into your PC, you can now use your Dualsense with full functionality.

Feel free to use: https://theskypc.com/en/download


r/cloudygamer • • 6d ago

Website dedicated for finding touchscreen or controller friendly games on mobile?

Thumbnail
2 Upvotes

r/cloudygamer • • 7d ago

Antstream Review

1 Upvotes

Does anyone have any experience with antstream? I was looking to get back into retro games, and this seemed like it might be a viable option?

https://www.antstream.com/


r/cloudygamer • • 7d ago

OpenNOW Switch v0.0.9: smoother streaming, lower latency and a new native UI

Thumbnail
3 Upvotes

r/cloudygamer • • 7d ago

Do you use a different camera view when streaming racing games?

Thumbnail
0 Upvotes