Skip to content

Add Video Super Resolution for Windows x64 (AMD, Intel and NVIDIA), Windows ARM (Snapdragon), Linux and MacOS#1557

Open
linckosz wants to merge 1 commit intomoonlight-stream:masterfrom
linckosz:master
Open

Add Video Super Resolution for Windows x64 (AMD, Intel and NVIDIA), Windows ARM (Snapdragon), Linux and MacOS#1557
linckosz wants to merge 1 commit intomoonlight-stream:masterfrom
linckosz:master

Conversation

@linckosz
Copy link
Copy Markdown

@linckosz linckosz commented Mar 15, 2025

Video Super Resolution (VSR) for Moonlight

Video Super Resolution (VSR) is to video what DLSS is to 3D rendering.
So why not make Moonlight one of the first game streaming solutions to leverage this technology?
AI upscaling significantly reduces bandwidth usage without compromising video quality!

Tested GPUs:

  • Nvidia RTX 4070 Ti (Windows & Linux)
  • Nvidia GTX 1050 (Windows & Linux)
  • AMD RX 7600 (Windows)
  • AMD iGPU 780M (Windows)
  • Intel Arc A380 (Windows)
  • Intel UHD Graphics (16EU) – iGPU from N95 CPU (Windows)
  • Snapdragon Adreno (Windows ARM)
  • Apple M1 Pro (macOS)
  • Apple M3 Pro (macOS)

Context

Video Super Resolution (VSR) is to video what DLSS is to 3D rendering.
So why not make Moonlight one of the first game streaming solutions to integrate this technology?
AI-based upscaling drastically reduces bandwidth usage while maintaining excellent video quality.

NVIDIA, Intel (link in French), and more recently AMD have all started promoting their respective AI-powered video enhancement technologies.


Implementation

Implementing VSR was not straightforward. I had to add a Video Processor component to D3D12VA to offload frame processing from the CPU to the GPU, allowing it to take advantage of additional GPU capabilities.

  • A UI checkbox was added in SettingsView.qml.
  • The core implementation logic is in d3d12va.cpp and d3d12va_shaders.cpp.

Platform-Specific Details:

NVIDIA: Provides VSR, the best overall rendering.
Intel: Is currently using FSR1 Shader, IntelVPL shall be workable but could not make it work yet.
AMD: Released AMF Video Upscaling, a ML model based on FSR1 delivering impressive results.


Additional Development (iOS)

For those interested in VSR for iOS, I have also developed moonlight-ios-MFX, but this is still a work in progress.

On an iPhone 13 Pro, the upscaler works well but is too power-hungry due to the Metal renderer (not the upscaler itself), making it impractical for now.
It may perform better on newer iPhone models, but I haven't tested them yet.
Another approch can be to use a customized shader made to performed on mobile.

I don't have an Apple TV, but it could potentially work with minor adjustments and additional testing.
I won’t be maintaining the iOS version, so feel free to contribute and improve it!


Results & Comparisons

Resolution Test:

Resolution Test

Banding Test:

Banding Test

@linckosz
Copy link
Copy Markdown
Author

linckosz commented Mar 15, 2025

Here is a summary of my observations following many tests conducted with different settings and multiple GPUs. AMD delivers the best results, followed by Nvidia, then Intel. VSR (Video Super Resultion) performs exceptionally well in SDR, but HDR setup (in the code) is challenging, and some specifics feature (like sharpening) aren't yet avaible due to drivers limitation. I would advise using the Video Enhancement feature without HDR.

1) Nvidia RTX 4070 Ti:
I recommend setting the driver setting "Super resolution" quality to at least 3. Below this, it's still good, but you can start to see very small artifacts (white borders) around high-contrast objects. Nvidia has a robust VSR algorithm; the picture reconstruction is very well executed, and the deblocking method is quite efficient. During fast motion (tested on Trackmania) at mid/low bitrate (below 50Mbps), block artifacts due to the picture compression from the host are less noticeable, and some details are reconstructed (but less than a static screen).

2) Intel Arc A380:
Although Intel's VSR feature has been in an experimental stage since 2023, it offers interesting results with a sharp and deblocked picture. Compared to Nvidia, it is quite close to a Quality 1 settings. An advantage of Intel is that no settings have to be activated on the driver's side; another one is that their algorythm works since the 10th generation (Sky lake with iGPU). During fast motion at mid/low bitrate, Intel's solution tends to be pixelized and too sharped.

3) AMD RX 7600:
AMD's solution upscales the picture using the FSR 1.1 algorithm, and is the most efficient one.
Nvidia might have a slightly better reconstruction processfrom static picture, but AMD's rendering looks cleaner and sharper.
The biggest advantage with AMD's FSR method is that in fast-paced movement the picture is very clear and with details reconstructed. At 150 Mbps the rendering result is very close to the source.
But one area AMD is less performant it is in office use at low bitrate (less than 50Mbps) with more static screens. For instance, when switching between two very contrasted pictures, it reveals the picture going from slightly blurred to clear within 1 second, even if if such contrast does not happen often, it could be annoying for office use. A higher bitrate (more than 50Mbps) is recommended.

4) Intel UHD Graphics Xe-LP (iGPU)
This iGPU is from a N95 CPU (12th Gen, Alder Lake), the result is similar as the Arc A380, so I did not add screenshots for it.
But because a N95 is slow, I could only max out at 1440p 60fps 150Mbps, unlike a A380, adding more fps will add a tremendous amount of decoding time probably due to the fact that enhancement computation takes more time than one frame to be rendered.
This Intel VSR feature is available from the 10th Gen (Sky Lake) iGPU.

Does the feature "Video Enhancement" have an impact on the performance?
It is too low to be noticeable.
For a streaming at 1440p 120fps 150 Mbps, an additional latency less than 1ms in most of the cases, at the maximum I observed 2ms. This is true for any dedicated GPU, including entry-level.
As for iGPU, an entry-level like the N95 may reach some computation threshold and the framerate may need to set to 60fps max.

Does HDR work with Video Enhancement?
Yes, it can be activated.
VSR performs exceptionally well in SDR, but HDR setup (in the code) is challenging, and some specifics feature aren't yet available due to drivers limitation.
Intel handles it pretty well.
AMD does a pretty good job too to handle it, but the upscaling feature cannot be used at its full potential, cannot use a sharpening option, and FSR 1.0 needs to be used instead of FSR 1.1.
Nvidia does not support HDR yet so the application automatically disables the enhancement feature. Nvidia is working on it to enable upscaling with HDR (no date anounced yet).

Below are my suggestions for different scenarios with varying settings from host to display (Host->Stream->Display):

My suggestion for Office: 1440->1440->1440
Even though configurations like 1440->1080->1440 or 1080->1080->1440 provide good results with sharp and readable fonts, maintaining a 1:1 pixel ratio in the pipeline helps to achieve the clearest fonts.

My suggestion for Games: 1080->1080->1440
Thanks to the picture reconstruction algorithms in place (especially from Nvidia and AMD), which do an excellent job, the picture rendering quality at an equal video bitrate is actually better (sharper) than a 1440->1080->1440, and very close to a 1440->1440->1440 pipeline. No blur effects are observed due to the upscaling. Nevertheless, using 1080p for the host can help to increase FPS, and streaming at 1080p reduces latency, making it easier to stream at a high framerate than 60fps.


GPU comparison (1440->720/1080->1440 / 150 Mbps / Static picture):

Comparison


In-motion block artifact comparison at low bitrate (1440->1080->1440 / 20 Mbps):

Block


In-motion GPU comparison:

When upscaling (stream at 720 or 1080 to render on a 1440 display), in all scenarios AMD provides the best result.
Compare to Nvidia, which is already very good, AMD provides slithly sharper picture with a better reconstruction for small details (like tree branches). AMD is also the only solution which applies an Anti-aliased rendering. Surprisingly from AMD, at 150Mbps, an upscaled 1080p resolution provides better rendering than streaming at the native resolution 1440p thanks to the AA feature and a good reconstruction.
Nvidia is slightly below AMD because no AA applied.
As for Intel, we can still see that the solution is a work in progress, in all resolution at any bitrate, the rendering is too sharp and pixelized.
The current version (v5.0.1) is always blured, giving the feeling of a more flattened 3D picture.

When we use native resolution (stream at 1440 to render on a 1440 display), v5.0.1, AMD and Nvidia are all similar, only Intel still give a pixelized picture.

Fast-paced Picture Comparison (720p@150)
Fast-paced Picture Comparison (1080p@40)
Fast-paced Picture Comparison (1080p@80)
Fast-paced Picture Comparison (1080p@150)
Fast-paced Picture Comparison (1440p@150)


Resolution comparison (Nvidia Quality 4):

  • 1440->1440->1440
  • 1080->1080->1440
  • 1440->1080->1440

01_1440_1440
02_1080_1080
03_1440_1080


720p GPU comparison (1440->720->1440 / 150 Mbps):

  • Source
  • Moonlight v5.0.1
  • Nvidia RTX 4070 Ti
  • Intel Arc A380
  • AMD RX 7600

720p - Source
720p - Moonlight v5 0 1
720p - Nvidia RTX 4070 Ti
720p - Intel Arc A380
720p - AMD RX 7600


1080p GPU comparison (1440->1080->1440 / 150 Mbps):

  • Source
  • Moonlight v5.0.1
  • Nvidia RTX 4070 Ti
  • Intel Arc A380
  • AMD RX 7600

1080p - Source
1080p - Moonlight v5 0 1
1080p - Nvidia RTX 4070 Ti
1080p - Intel Arc A380
1080p - AMD RX 7600

@linckosz
Copy link
Copy Markdown
Author

Here is a comparison on a Macbook M1 Pro.

MacOS

@linckosz
Copy link
Copy Markdown
Author

@cgutman ,
I cleaned my original branch, but the previous pull request (#1180) closed automatically, so I had to create a new PR.
For the new branch, I used the Rebase method instead of Merge, which should be easier for you to implement it.

@andygrundman
Copy link
Copy Markdown
Contributor

There is a lot of reformatting going on and it makes it difficult to review the changes. Can you disable whatever auto-formatting it is that you're running? Removing trailing spaces if there are any is OK though.

@linckosz
Copy link
Copy Markdown
Author

@andygrundman ,
Sure, I can do fix it.
Can you point out few lines as example to make sure I understand what you are expecting?

@andygrundman
Copy link
Copy Markdown
Contributor

Sure, stuff like this, where there is no actual change, just reformatting. It looks like it's trying to line things up to the brace for some reason. The only time you want to auto-format existing code is is if a project is already using a tool and there is a config file in the repo (like Sunshine which has a .clang-format). And the one exception of trailing spaces which should be fixed (that comes from the olden days when you might send a patch via email where trailing spaces would get lost and cause annoying conflicts).

Screenshot 2025-03-19 at 16 28 25

@linckosz
Copy link
Copy Markdown
Author

@andygrundman ,
The formatting issues are fixed

@fidoboy
Copy link
Copy Markdown

fidoboy commented Mar 27, 2025

Is there any test build with this feature available for Windows platform? Where can I download it?

@moi952
Copy link
Copy Markdown

moi952 commented Mar 27, 2025

Is there any test build with this feature available for Windows platform? Where can I download it?

Here
https://ci.appveyor.com/project/cgutman/moonlight-qt/builds/51731322/job/fntsewbjxekye2v2/artifacts

@fidoboy
Copy link
Copy Markdown

fidoboy commented Mar 27, 2025

Is there any test build with this feature available for Windows platform? Where can I download it?

Here https://ci.appveyor.com/project/cgutman/moonlight-qt/builds/51731322/job/fntsewbjxekye2v2/artifacts

Thanks a lot. I'll check it :)

@fidoboy
Copy link
Copy Markdown

fidoboy commented Mar 27, 2025

After downloading the Windows build I've done some rapid tests and it doesn't seems to be working at all in my case. My setup is as follows:

Host machine: Running at 1440p HDR (AMD Radeon Adrenaline driver)
Moonlight setup to stream at 1080p HDR 60FPS
Client machine on Windows desktop at 1440p on Intel integrated GPU (Intel UHD graphics)

First I've enabled the new check box to activate the Upscaler enhancer. Connected to host with no issues but however the overlay info doesn't reflect any upscaler feature (pressing CTRL + ALT + SHIFT + S)

Then to compare, i've deactivated the checkbox so the stream should be pure 1080p without any enhancement. To my eyes the image quality is identical, there is no difference. So I believe that I must be doing something wrong or the feature is not working. It could be helpful if, at least, the streaming overlay info could display something to know if the enhancer is being used or not.

I've also tried lowering the host machine to 1080p while keeping the client working on 1440p and always selecting 1080p in Moonlight settings, but no difference. May be I'm missing something or may be the Intel GPU is not compatible with this experimental feature.

@fidoboy
Copy link
Copy Markdown

fidoboy commented Mar 28, 2025

Can't get this working. Is this feature using this library: https://github.com/OpenVisualCloud/Video-Super-Resolution-Library ? or it's only enabling some features already present into the GPU drivers? If this depends of the installed drivers then it should detect it before displaying the checkbox or at least display any warning, because right now I can just enable or disable it and the image quality is the same, it's just identical, no changes.

@linckosz
Copy link
Copy Markdown
Author

Can't get this working. Is this feature using this library: https://github.com/OpenVisualCloud/Video-Super-Resolution-Library ? or it's only enabling some features already present into the GPU drivers? If this depends of the installed drivers then it should detect it before displaying the checkbox or at least display any warning, because right now I can just enable or disable it and the image quality is the same, it's just identical, no changes.

Hi @fidoboy ,
Which CPU are you using?
I don't have my Intel N95 CPU to test it until end of may, but at least I will try with the Arc.
For reference, here is a test I've done last year with a N95:
#1180 (comment)

If you are able to check the box, it means that your iGPU has this feature capability, otherwise it will be greyed out.
This is not using this library (https://github.com/OpenVisualCloud/Video-Super-Resolution-Library) as this is a CPU feature leveraging AVX-512 tech, not a GPU's feature, it's good for video conversion but not for real time streaming. I am using IntelVpSuperResolution which can be found in chromium code and testable using Chrome here (https://www.clubic.com/pro/entreprises/google/actualite-460350-video-super-resolution-au-tour-d-intel-d-ameliorer-nos-videos-sur-chrome.html). You can try a youtube video with IntelVpSuperResolution enabled, if you can make it work with Chrome, it should also work for moonlight as I am using exactly the same method.

When you stream at a lower resolution than your screen, make sure you use borderless fullscreen or fullscreen, select hardware acceleration and that the overlay stats is displaying "AI-enhanced" like below while streaming.
image

@fidoboy
Copy link
Copy Markdown

fidoboy commented Mar 30, 2025

Can't get this working. Is this feature using this library: https://github.com/OpenVisualCloud/Video-Super-Resolution-Library ? or it's only enabling some features already present into the GPU drivers? If this depends of the installed drivers then it should detect it before displaying the checkbox or at least display any warning, because right now I can just enable or disable it and the image quality is the same, it's just identical, no changes.

Hi @fidoboy , Which CPU are you using? I don't have my Intel N95 CPU to test it until end of may, but at least I will try with the Arc. For reference, here is a test I've done last year with a N95: #1180 (comment)

If you are able to check the box, it means that your iGPU has this feature capability, otherwise it will be greyed out. This is not using this library (https://github.com/OpenVisualCloud/Video-Super-Resolution-Library) as this is a CPU feature leveraging AVX-512 tech, not a GPU's feature, it's good for video conversion but not for real time streaming. I am using IntelVpSuperResolution which can be found in chromium code and testable using Chrome here (https://www.clubic.com/pro/entreprises/google/actualite-460350-video-super-resolution-au-tour-d-intel-d-ameliorer-nos-videos-sur-chrome.html). You can try a youtube video with IntelVpSuperResolution enabled, if you can make it work with Chrome, it should also work for moonlight as I am using exactly the same method.

When you stream at a lower resolution than your screen, make sure you use borderless fullscreen or fullscreen, select hardware acceleration and that the overlay stats is displaying "AI-enhanced" like below while streaming. image

The CPU is Intel Celeron N4500 and I can check or uncheck the checkbox, it's not grayed out. But It doesn't display that overlayed info like yours. Mine shows HEVC 10bit only but there is not "AI Enhanced" text when the feature is enabled. What else can I try?

@fidoboy
Copy link
Copy Markdown

fidoboy commented Mar 30, 2025

I'm using this build: https://ci.appveyor.com/api/buildjobs/fntsewbjxekye2v2/artifacts/MoonlightPortable-x64-r2725.zip

The new checkbox is being displayed, it's not grayed out but I does nothing. The image quality is identical when the feature is activated or when it's not and the overlay stats does display nothing about "AI-Enhanced"

I've done my tests with 1440 -> 1080 -> 1440 and also 1080 -> 1080 -> 1440. There is no changes when the feature is activated, image is exactly the same

I'm sorry but I doesn't have Chrome to test. I never use that browser

@linckosz
Copy link
Copy Markdown
Author

I'm using this build: https://ci.appveyor.com/api/buildjobs/fntsewbjxekye2v2/artifacts/MoonlightPortable-x64-r2725.zip

The new checkbox is being displayed, it's not grayed out but I does nothing. The image quality is identical when the feature is activated or when it's not and the overlay stats does display nothing about "AI-Enhanced"

I've done my tests with 1440 -> 1080 -> 1440 and also 1080 -> 1080 -> 1440. There is no changes when the feature is activated, image is exactly the same

I'm sorry but I doesn't have Chrome to test. I never use that browser

Yes, that the correct version.
Apparently you have HDR enabled (it says 10bit), can you try without HDR? As VSR still at experimental stage for Intel, maybe it doesn’t work yet with HDR enabled.

@fidoboy
Copy link
Copy Markdown

fidoboy commented Mar 30, 2025

I'm using this build: https://ci.appveyor.com/api/buildjobs/fntsewbjxekye2v2/artifacts/MoonlightPortable-x64-r2725.zip
The new checkbox is being displayed, it's not grayed out but I does nothing. The image quality is identical when the feature is activated or when it's not and the overlay stats does display nothing about "AI-Enhanced"
I've done my tests with 1440 -> 1080 -> 1440 and also 1080 -> 1080 -> 1440. There is no changes when the feature is activated, image is exactly the same
I'm sorry but I doesn't have Chrome to test. I never use that browser

Yes, that the correct version. Apparently you have HDR enabled (it says 10bit), can you try without HDR? As VSR still at experimental stage for Intel, maybe it doesn’t work yet with HDR enabled.

I forgot to say that I've also tried without HDR enabled in moonlight settings. The result is the same. There is no "AI-Enhanced" text in the overlay info.

@fidoboy
Copy link
Copy Markdown

fidoboy commented Mar 30, 2025

This is with HDR enabled:

222327

and this is with HDR disabled:

222228

in both cases the AI Enhacer is checked but it seems that it's not being used

@jasperaelvoet
Copy link
Copy Markdown

Works on macOS 15.4 with m3 cpu.

Tested with 1080p host → 1080p stream → 1080p display, at 150mbps.

It would be great to have a slider to select how much the image is sharpened, it looks over sharpened right now imo.

Default:
Screenshot 2025-04-05 at 23 15 29

AI-enhanced:
Screenshot 2025-04-05 at 23 15 01

The added latency might be an issue on fast-paced games.

@linckosz
Copy link
Copy Markdown
Author

linckosz commented Apr 6, 2025

Works on macOS 15.4 with m3 cpu.

Tested with 1080p host → 1080p stream → 1080p display, at 150mbps.

It would be great to have a slider to select how much the image is sharpened, it looks over sharpened right now imo.

Default: Screenshot 2025-04-05 at 23 15 29

AI-enhanced: Screenshot 2025-04-05 at 23 15 01

The added latency might be an issue on fast-paced games.

Hi @jasperaelvoet ,
Here is the code for Mac to enable video super resolution, unfortunatly there is no option available to set the sharpening in the code.

MTLFXSpatialScalerDescriptor* Cdescriptor = [MTLFXSpatialScalerDescriptor new];

MTLFXSpatialScalerDescriptor documentation
https://developer.apple.com/documentation/metalfx/mtlfxspatialscalerdescriptor

@linckosz
Copy link
Copy Markdown
Author

linckosz commented Apr 7, 2025

Hi @fidoboy ,
Bug fixed, you can now download the new artifact (r2743) to try.
I finally could reproduce the issue with my Intel A380, it was conflicting with another fix (#1304).

A380 without enhancement (r2743):
A380 normal

A380 with enhancement (r2743):
A380 enhanced

@moi952
Copy link
Copy Markdown

moi952 commented Apr 7, 2025

This feature is awesome!
@cgutman , are there any plans to integrate it into the project? 😍

@fidoboy
Copy link
Copy Markdown

fidoboy commented Apr 7, 2025

Hi @fidoboy , Bug fixed, you can now download the new artifact (r2743) to try. I finally could reproduce the issue with my Intel A380, it was conflicting with another fix (#1304).

A380 without enhancement (r2743): A380 normal

A380 with enhancement (r2743): A380 enhanced

Great! I'm impatient to test it. I'll report back my findings.

@fidoboy
Copy link
Copy Markdown

fidoboy commented Apr 7, 2025

Well, I spent some time doing new tests with this feature and, in short terms, this is a placebo. There is no difference between the image quality when it's enabled or disabled. I've tried the following setups:

  • 1080 (host) -> 1080 (stream) -> 1440 (moonlight client)
  • 1440 (host) -> 1080 (stream) -> 1440 (moonlight client)

In both cases HDR was always enabled and in both cases I've compared between the video upscaler enabled and disabled. I have verified it because the text "AI Enhanced" was being displayed into the overlay stats. There was no any difference between them in the terms of image quality, the clarity, sharpness, etc. are exactly the same. And then I've tried the setup 1440 -> 1440 -> 1440 and the difference is very noticeable.

So, in short, now the text is being displayed into the overlayed info but THERE IS NO ANY CHANGE IN IMAGE QUALITY. The image is the same if the feature is activated or not. There is no difference.

@fidoboy
Copy link
Copy Markdown

fidoboy commented Apr 7, 2025

Works on macOS 15.4 with m3 cpu.

Tested with 1080p host → 1080p stream → 1080p display, at 150mbps.

It would be great to have a slider to select how much the image is sharpened, it looks over sharpened right now imo.

Default: Screenshot 2025-04-05 at 23 15 29

AI-enhanced: Screenshot 2025-04-05 at 23 15 01

The added latency might be an issue on fast-paced games.

I'm already laughing because your post is a real nonsense. What's the point to use this feature if you are streaming with the same resolution than your display? If the device where moonlight is running already uses 1080p and the host and also the stream is 1080p, where is the purppose for a video upscaler? This only have some sense if the stream is a lower resolution than the display, but it doesn't do anything if the resolution is the same.

@micdah
Copy link
Copy Markdown

micdah commented Apr 7, 2025

Well, I spent some time doing new tests with this feature and, in short terms, this is a placebo. There is no difference between the image quality when it's enabled or disabled. I've tried the following setups:

  • 1080 (host) -> 1080 (stream) -> 1440 (moonlight client)
  • 1440 (host) -> 1080 (stream) -> 1440 (moonlight client)

In both cases HDR was always enabled and in both cases I've compared between the video upscaler enabled and disabled. I have verified it because the text "AI Enhanced" was being displayed into the overlay stats. There was no any difference between them in the terms of image quality, the clarity, sharpness, etc. are exactly the same. And then I've tried the setup 1440 -> 1440 -> 1440 and the difference are very noticeable.

So, in short, now the text is being displayed into the overlayed info but THERE IS NO ANY CHANGE IN IMAGE QUALITY. The image is the same if the feature is activated or not. There is no difference.

I think it would be beneficial if you substantiated your observations with screenshots on vs off so contributors can see what exactly you see.

In the other comparison screenshots there are discernible differences. But whether you notice can be quite subjective.

@linckosz linckosz force-pushed the master branch 9 times, most recently from 57d8c70 to 09c3dec Compare February 24, 2026 01:53
@linckosz
Copy link
Copy Markdown
Author

@andygrundman ,
To help with the PR review, I created a series of videos (about 5 hours in total) explaining the architecture, key technical choices, how the DX12 pipeline works, how to maintain it, and so on. I hope this will be useful.

https://www.youtube.com/watch?v=SSlJy0rwpkM&list=PLP_dd27EzwEgdjja5eAHBYtivM6hcG111
Moonlight Video Super Resolution

@nhths
Copy link
Copy Markdown

nhths commented Mar 4, 2026

Trying your latest AppImage artifact on my laptop. Don't working(

Moonlight log

$ ./Moonlight-09c3de-x86_64.AppImage
00:00:00 - Qt Warning: Could not find the Qt platform plugin "wayland" in ""
00:00:00 - SDL Info (0): Compiled with SDL 2.32.64
00:00:00 - SDL Info (0): Running with SDL 2.32.64
00:00:00 - Qt Info: No translation available for "en_US"
00:00:00 - Qt Warning: qrc:/gui/main.qml:13:1: QML ApplicationWindow: ToolTip must be attached to an Item
00:00:00 - Qt Info: Found "gamecontrollerdb.txt" at "/home/nkoshin/.cache/Moonlight Game Streaming Project/Moonlight/gamecontrollerdb.txt"
00:00:00 - SDL Info (0): Loaded 449 new gamepad mappings
00:00:00 - SDL Info (0): V-sync disabled
libva info: VA-API version 1.23.0
libva info: Trying to open /usr/local/lib/dri/iHD_drv_video.so
libva info: va_openDriver() returns -1
libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so
libva info: va_openDriver() returns -1
00:00:00 - SDL Info (0): Skipping VAAPI fallback driver names on libva 2.20+
00:00:00 - SDL Info (0): Trying fallback VAAPI driver paths
libva info: VA-API version 1.23.0
libva info: Trying to open /usr/lib64/dri-nonfree/iHD_drv_video.so
libva info: Trying to open /usr/lib64/dri-freeworld/iHD_drv_video.so
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
00:00:00 - SDL Info (0): Initialized VAAPI 1.23
00:00:00 - SDL Info (0): Driver: Intel iHD driver for Intel(R) Gen Graphics - 25.4.6 ()
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x41524742 -> bgra.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x41424752 -> rgba.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x58524742 -> bgr0.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x58424752 -> rgb0.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x30335241 -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x30334241 -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x30335258 -> x2rgb10le.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x30334258 -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x36314752 -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x50424752 -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x50524742 -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x56555941 -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x30303859 -> gray.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x3231564e -> nv12.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x3132564e -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x32595559 -> yuyv422.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x59565955 -> uyvy422.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x32315659 -> yuv420p.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x30323449 -> yuv420p.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x50313134 -> yuv411p.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x48323234 -> yuv422p.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x56323234 -> yuv440p.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x50343434 -> yuv444p.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x33434d49 -> unknown.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Format 0x30313050 -> p010le.
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 25.4.6 ().
00:00:00 - FFmpeg: [VAAPI @ 0x7efd3c103e40] Driver not found in known nonstandard list, using standard behaviour.
00:00:00 - SDL Warn (0): Vulkan device 'Intel(R) UHD Graphics (CML GT2)' does not support HDR10 (ST.2084 PQ)
00:00:00 - SDL Error (0): No suitable HDR-capable Vulkan devices found!
00:00:00 - SDL Info (0): Vulkan rendering device chosen: Intel(R) UHD Graphics (CML GT2)
00:00:00 - SDL Info (0): Using Immediate present mode with V-Sync disabled
00:00:00 - SDL Info (0): Using VAAPI accelerated renderer on x11
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] nal_unit_type: 21(CRA_NUT), nuh_layer_id: 0, temporal_id: 0
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] nal_unit_type: 21(CRA_NUT), nuh_layer_id: 0, temporal_id: 0
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] nal_unit_type: 21(CRA_NUT), nuh_layer_id: 0, temporal_id: 0
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] nal_unit_type: 21(CRA_NUT), nuh_layer_id: 0, temporal_id: 0
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Decoding VPS
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Main 10 profile bitstream
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Decoding SPS
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Main 10 profile bitstream
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Decoding VUI
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Decoding PPS
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Format vaapi chosen by get_format().
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Format vaapi requires hwaccel hevc_vaapi initialisation.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Considering format 0x30313050 -> p010le.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Picked p010le (0x30313050) as best match for yuv420p10le.
00:00:00 - FFmpeg: [AVHWFramesContext @ 0x7efd3c19c280] Created surface 0.
00:00:00 - FFmpeg: [AVHWFramesContext @ 0x7efd3c19c280] Direct mapping possible.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Decode context initialised: 0x16/0x10000000.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Output frame with POC 0/3.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Param buffer (type 0, 604 bytes) is 0.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Slice 0 param buffer (264 bytes) is 0x1.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Slice 0 data buffer (77 bytes) is 0x2.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Slice 1 param buffer (264 bytes) is 0x3.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Slice 1 data buffer (87 bytes) is 0x4.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Slice 2 param buffer (264 bytes) is 0x5.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Slice 2 data buffer (96 bytes) is 0x6.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Slice 3 param buffer (264 bytes) is 0x7.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Slice 3 data buffer (77 bytes) is 0x8.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Decode to surface 0.
00:00:00 - FFmpeg: [hevc @ 0x7efd3c18eec0] Decoded frame with POC 0/3.
00:00:00 - SDL Info (0): FFmpeg-based video decoder chosen
00:00:00 - Qt Info: Found "gamecontrollerdb.txt" at "/home/---------/.cache/Moonlight Game Streaming Project/Moonlight/gamecontrollerdb.txt"
00:00:00 - SDL Info (0): Loaded 449 new gamepad mappings
00:00:00 - Qt Warning: QQmlEngine::setContextForObject(): Object already has a QQmlContext
00:00:00 - Qt Debug: Current Moonlight version: "6.1.0"
00:00:00 - Qt Info: Gamepad mappings are up to date
00:00:00 - Qt Info: "Wolf" is now online at "192.168.31.100:47989"
00:00:00 - Qt Info: Latest supported GFE server: "99.99.99.99"
00:00:00 - Qt Debug: Found update manifest match for current platform
00:00:00 - Qt Debug: Latest version of Moonlight for this platform is: "6.1.0"
00:00:00 - Qt Debug: Update manifest version equal to current version
00:00:43 - Qt Info: Executing request: "https://--------/appasset?uniqueid=------------&uuid=-------f&appid=------------&AssetType=2&AssetIdx=0"
00:00:43 - Qt Warning: "appasset" request failed with error: QNetworkReply::ContentNotFoundError
00:00:43 - Qt Info: Executing request: "https://---------:47984/appasset?uniqueid=---------&uuid=--------&appid=-------&AssetType=2&AssetIdx=0"
00:00:43 - Qt Warning: "appasset" request failed with error: QNetworkReply::ContentNotFoundError
00:00:44 - Qt Info: Found "ModeSeven.ttf" at ":/data/ModeSeven.ttf"
00:00:44 - SDL Info (0): Qt UI screen is at (0,407)
00:00:44 - SDL Info (0): SDL found matching display 1
00:00:44 - Qt Info: Server GPU: ""
00:00:44 - Qt Info: Server GFE version: "3.23.0.74"
00:00:44 - SDL Info (0): Video bitrate: 10000 kbps
00:00:44 - SDL Info (0): Audio channel count: 2
00:00:44 - SDL Info (0): Audio channel mask: 3
00:00:44 - SDL Info (0): V-sync disabled
libva info: VA-API version 1.23.0
libva info: Trying to open /usr/lib64/dri-nonfree/iHD_drv_video.so
libva info: Trying to open /usr/lib64/dri-freeworld/iHD_drv_video.so
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
00:00:44 - SDL Info (0): Initialized VAAPI 1.23
00:00:44 - SDL Info (0): Driver: Intel iHD driver for Intel(R) Gen Graphics - 25.4.6 ()
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x41524742 -> bgra.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x41424752 -> rgba.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x58524742 -> bgr0.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x58424752 -> rgb0.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x30335241 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x30334241 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x30335258 -> x2rgb10le.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x30334258 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x36314752 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x50424752 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x50524742 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x56555941 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x30303859 -> gray.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x3231564e -> nv12.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x3132564e -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x32595559 -> yuyv422.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x59565955 -> uyvy422.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x32315659 -> yuv420p.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x30323449 -> yuv420p.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x50313134 -> yuv411p.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x48323234 -> yuv422p.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x56323234 -> yuv440p.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x50343434 -> yuv444p.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x33434d49 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Format 0x30313050 -> p010le.
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 25.4.6 ().
00:00:44 - FFmpeg: [VAAPI @ 0x55e566d8e040] Driver not found in known nonstandard list, using standard behaviour.
00:00:44 - SDL Info (0): VAAPI driver supports exporting DRM PRIME surface handles with composed layers
00:00:44 - SDL Info (0): Color buffer is: R8G8B8A0
00:00:44 - SDL Info (0): VAAPI driver supports exporting DRM PRIME surface handles with composed layers
00:00:44 - SDL Info (0): Exporting composed layers with format and modifier: NV12 0100000000000002
00:00:44 - SDL Info (0): Using VAAPI accelerated renderer on x11
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 21(CRA_NUT), nuh_layer_id: 0, temporal_id: 0
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding VPS
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Main profile bitstream
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding SPS
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Main profile bitstream
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding VUI
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding PPS
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Format vaapi chosen by get_format().
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Format vaapi requires hwaccel hevc_vaapi initialisation.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Considering format 0x3231564e -> nv12.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Picked nv12 (0x3231564e) as best match for yuv420p.
00:00:44 - FFmpeg: [AVHWFramesContext @ 0x55e567d1d240] Created surface 0.
00:00:44 - FFmpeg: [AVHWFramesContext @ 0x55e567d1d240] Direct mapping possible.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decode context initialised: 0x12/0x10000000.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Output frame with POC 0/3.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Param buffer (type 0, 604 bytes) is 0.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Slice 0 param buffer (264 bytes) is 0x1.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Slice 0 data buffer (237 bytes) is 0x2.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decode to surface 0.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoded frame with POC 0/3.
00:00:44 - SDL Info (0): FFmpeg-based video decoder chosen
00:00:44 - SDL Info (0): Desired audio buffer: 720 samples (5760 bytes)
00:00:44 - SDL Info (0): Obtained audio buffer: 720 samples (5760 bytes)
00:00:44 - SDL Info (0): SDL audio driver: pipewire
00:00:44 - Qt Info: Found "gamecontrollerdb.txt" at "/home/-------/.cache/Moonlight Game Streaming Project/Moonlight/gamecontrollerdb.txt"
00:00:44 - SDL Info (0): Loaded 449 new gamepad mappings
00:00:44 - SDL Info (0): V-sync disabled
libva info: VA-API version 1.23.0
libva info: Trying to open /usr/lib64/dri-nonfree/iHD_drv_video.so
libva info: Trying to open /usr/lib64/dri-freeworld/iHD_drv_video.so
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
00:00:44 - SDL Info (0): Initialized VAAPI 1.23
00:00:44 - SDL Info (0): Driver: Intel iHD driver for Intel(R) Gen Graphics - 25.4.6 ()
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x41524742 -> bgra.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x41424752 -> rgba.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x58524742 -> bgr0.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x58424752 -> rgb0.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x30335241 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x30334241 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x30335258 -> x2rgb10le.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x30334258 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x36314752 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x50424752 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x50524742 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x56555941 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x30303859 -> gray.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x3231564e -> nv12.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x3132564e -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x32595559 -> yuyv422.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x59565955 -> uyvy422.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x32315659 -> yuv420p.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x30323449 -> yuv420p.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x50313134 -> yuv411p.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x48323234 -> yuv422p.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x56323234 -> yuv440p.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x50343434 -> yuv444p.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x33434d49 -> unknown.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Format 0x30313050 -> p010le.
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 25.4.6 ().
00:00:44 - FFmpeg: [VAAPI @ 0x7efcec001940] Driver not found in known nonstandard list, using standard behaviour.
00:00:44 - SDL Info (0): VAAPI driver supports exporting DRM PRIME surface handles with composed layers
00:00:44 - SDL Info (0): Color buffer is: R8G8B8A0
00:00:44 - SDL Info (0): VAAPI driver supports exporting DRM PRIME surface handles with composed layers
00:00:44 - SDL Info (0): Exporting composed layers with format and modifier: NV12 0100000000000002
00:00:44 - SDL Info (0): Using VAAPI accelerated renderer on x11
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 21(CRA_NUT), nuh_layer_id: 0, temporal_id: 0
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding VPS
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Main profile bitstream
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding SPS
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Main profile bitstream
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding VUI
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding PPS
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Format vaapi chosen by get_format().
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Format vaapi requires hwaccel hevc_vaapi initialisation.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Considering format 0x3231564e -> nv12.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Picked nv12 (0x3231564e) as best match for yuv420p.
00:00:44 - FFmpeg: [AVHWFramesContext @ 0x55e56797e2c0] Created surface 0.
00:00:44 - FFmpeg: [AVHWFramesContext @ 0x55e56797e2c0] Direct mapping possible.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decode context initialised: 0x12/0x10000000.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Output frame with POC 0/3.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Param buffer (type 0, 604 bytes) is 0.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Slice 0 param buffer (264 bytes) is 0x1.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Slice 0 data buffer (237 bytes) is 0x2.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decode to surface 0.
00:00:44 - FFmpeg: [hevc @ 0x55e5679407c0] Decoded frame with POC 0/3.
00:00:44 - SDL Info (0): FFmpeg-based video decoder chosen
00:00:44 - Qt Info: Found "gamecontrollerdb.txt" at "/home/--------/.cache/Moonlight Game Streaming Project/Moonlight/gamecontrollerdb.txt"
00:00:44 - SDL Info (0): Loaded 449 new gamepad mappings
00:00:44 - Qt Info: Executing request: "https://--------47984/launch?uniqueid=------&uuid=------&appid=134906179&mode=1280x720x60&additionalStates=1&sops=1&rikey=REDACTED&rikeyid=REDACTED&localAudioPlayMode=0&surroundAudioInfo=196610&remoteControllersBitmap=0&gcmap=0&gcpersist=0&corever=1"
00:00:44 - Qt Info: Launch response: "\n<root status_code="200">rtsp://----------:480101"
00:00:44 - Qt Info: Found matching interface: "---------" "" QFlagsQNetworkInterface::InterfaceFlag(IsUp|IsRunning|IsPointToPoint)
00:00:44 - Qt Info: Interface Type: QNetworkInterface::Virtual
00:00:44 - Qt Info: Interface MTU: 1420
00:00:44 - SDL Info (0): RTSP port: 48010
00:00:44 - SDL Info (0): Initializing platform...
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Resolving host name...
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Initializing audio stream...
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Starting RTSP handshake...
00:00:44 - SDL Info (0): Reference frame invalidation is not supported by this host
00:00:44 - SDL Info (0): Audio port: 48200
00:00:44 - SDL Info (0): Video port: 48100
00:00:44 - SDL Info (0): Control port: 47999
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Initializing control stream...
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Initializing video stream...
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Initializing input stream...
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Starting control stream...
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Starting video stream...
00:00:44 - SDL Info (0): Video stream is 1280x720x60 (format 0x100)
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Starting audio stream...
00:00:44 - SDL Info (0): Received first video packet after 0 ms
00:00:44 - SDL Info (0): Waiting for IDR frame
00:00:44 - SDL Info (0): Waiting for IDR frame
00:00:44 - SDL Info (0): Desired audio buffer: 720 samples (5760 bytes)
00:00:44 - SDL Info (0): Obtained audio buffer: 720 samples (5760 bytes)
00:00:44 - SDL Info (0): SDL audio driver: pipewire
00:00:44 - SDL Info (0): Audio stream has 2 channels
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Starting input stream...
00:00:44 - SDL Info (0): done
00:00:44 - SDL Info (0): Waiting for IDR frame
00:00:44 - SDL Info (0): Waiting for IDR frame
00:00:44 - SDL Info (0): Qt UI screen is at (0,407)
00:00:44 - SDL Info (0): SDL found matching display 1
00:00:44 - SDL Info (0): Waiting for IDR frame
00:00:44 - SDL Info (0): Waiting for IDR frame
00:00:45 - SDL Info (0): Found display mode with desktop resolution: 2560x1440x60
00:00:45 - SDL Info (0): Waiting for IDR frame
00:00:45 - SDL Info (0): Recreating renderer for window event: 1 (0 0)
00:00:45 - SDL Info (0): V-sync disabled
libva info: VA-API version 1.23.0
libva info: Trying to open /usr/lib64/dri-nonfree/iHD_drv_video.so
libva info: Trying to open /usr/lib64/dri-freeworld/iHD_drv_video.so
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
00:00:45 - SDL Info (0): Initialized VAAPI 1.23
00:00:45 - SDL Info (0): Driver: Intel iHD driver for Intel(R) Gen Graphics - 25.4.6 ()
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x41524742 -> bgra.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x41424752 -> rgba.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x58524742 -> bgr0.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x58424752 -> rgb0.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x30335241 -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x30334241 -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x30335258 -> x2rgb10le.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x30334258 -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x36314752 -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x50424752 -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x50524742 -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x56555941 -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x30303859 -> gray.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x3231564e -> nv12.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x3132564e -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x32595559 -> yuyv422.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x59565955 -> uyvy422.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x32315659 -> yuv420p.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x30323449 -> yuv420p.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x50313134 -> yuv411p.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x48323234 -> yuv422p.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x56323234 -> yuv440p.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x50343434 -> yuv444p.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x33434d49 -> unknown.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Format 0x30313050 -> p010le.
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 25.4.6 ().
00:00:45 - FFmpeg: [VAAPI @ 0x55e566e2d580] Driver not found in known nonstandard list, using standard behaviour.
00:00:45 - SDL Info (0): VAAPI driver supports exporting DRM PRIME surface handles with composed layers
00:00:45 - SDL Info (0): Waiting for IDR frame
00:00:45 - SDL Info (0): Waiting for IDR frame
00:00:45 - SDL Info (0): Waiting for IDR frame
00:00:45 - SDL Info (0): Color buffer is: R8G8B8A0
00:00:45 - SDL Info (0): VAAPI driver supports exporting DRM PRIME surface handles with composed layers
00:00:45 - SDL Info (0): Exporting composed layers with format and modifier: NV12 0100000000000002
00:00:45 - SDL Info (0): Waiting for IDR frame
00:00:45 - SDL Info (0): Frame pacing disabled: target 60 Hz with 60 FPS stream
00:00:45 - SDL Info (0): Using VAAPI accelerated renderer on x11
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 21(CRA_NUT), nuh_layer_id: 0, temporal_id: 0
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding VPS
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Main profile bitstream
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding SPS
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Main profile bitstream
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding VUI
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding PPS
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Format vaapi chosen by get_format().
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Format vaapi requires hwaccel hevc_vaapi initialisation.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Considering format 0x3231564e -> nv12.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Picked nv12 (0x3231564e) as best match for yuv420p.
00:00:45 - FFmpeg: [AVHWFramesContext @ 0x55e5679ea200] Created surface 0.
00:00:45 - FFmpeg: [AVHWFramesContext @ 0x55e5679ea200] Direct mapping possible.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decode context initialised: 0x12/0x10000000.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Output frame with POC 0/3.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Param buffer (type 0, 604 bytes) is 0.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Slice 0 param buffer (264 bytes) is 0x1.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Slice 0 data buffer (237 bytes) is 0x2.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decode to surface 0.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoded frame with POC 0/3.
00:00:45 - SDL Info (0): Test decode successful
00:00:45 - SDL Info (0): Renderer 'EGL/GLES' with 'VAAPI' backend chosen
00:00:45 - SDL Info (0): FFmpeg-based video decoder chosen
00:00:45 - SDL Info (0): Dropping window event during flush: 6 (1280 720)
00:00:45 - SDL Info (0): IDR frame request sent
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] nal_unit_type: 19(IDR_W_RADL), nuh_layer_id: 0, temporal_id: 0
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding VPS
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Main profile bitstream
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding SPS
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Main profile bitstream
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding VUI
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoding PPS
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Format vaapi chosen by get_format().
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Format vaapi requires hwaccel hevc_vaapi initialisation.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Considering format 0x3231564e -> nv12.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Picked nv12 (0x3231564e) as best match for yuv420p.
00:00:45 - FFmpeg: [AVHWFramesContext @ 0x55e5679ea200] Created surface 0.
00:00:45 - FFmpeg: [AVHWFramesContext @ 0x55e5679ea200] Direct mapping possible.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decode context initialised: 0x12/0x10000000.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Output frame with POC 0/0.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Param buffer (type 0, 604 bytes) is 0x2.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Slice 0 param buffer (264 bytes) is 0x1.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Slice 0 data buffer (905 bytes) is 0.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decode to surface 0.
00:00:45 - FFmpeg: [hevc @ 0x55e5679407c0] Decoded frame with POC 0/0.
00:00:45 - SDL Info (0): EGLRenderer: EGLImage pixel format: 178
00:00:45 - Qt Info: Found "egl.vert" at ":/data/egl.vert"
00:00:45 - Qt Info: Found "egl_opaque.frag" at ":/data/egl_opaque.frag"
00:00:45 - Qt Info: Found "egl.vert" at ":/data/egl.vert"
00:00:45 - Qt Info: Found "egl_overlay.frag" at ":/data/egl_overlay.frag"
00:00:46 - SDL Info (0): Received first audio packet after 1700 ms
00:00:46 - SDL Info (0): Initial audio resync period: 500 milliseconds
00:00:46 - SDL Info (0): Audio packet queue overflow
00:00:46 - SDL Info (0): Audio packet queue overflow
00:00:46 - SDL Info (0): Audio packet queue overflow
00:00:46 - SDL Info (0): Audio packet queue overflow
00:00:46 - SDL Info (0): Audio packet queue overflow
00:00:46 - SDL Info (0): Audio packet queue overflow
00:00:46 - SDL Info (0): Network dropped audio data (expected 101, but received 281)
00:01:04 - SDL Info (0): Unrecoverable frame 1173 (block 3 of 3): 32+0=32 received < 34 needed
00:01:04 - SDL Info (0): Network dropped 1 frame (frame 1173)
00:01:04 - SDL Info (0): Waiting for IDR frame
00:01:04 - SDL Info (0): IDR frame request sent
00:01:04 - SDL Info (0): Leaving speculative RFI mode after OOS video data at frame 1175
00:01:20 - SDL Info (0): Quit event received
00:01:20 - SDL Info (0):
Global video stats

Incoming frame rate from network: 59,93 FPS
Decoding frame rate: 59,93 FPS
Rendering frame rate: 59,93 FPS
Frames dropped by your network connection: 0,10%
Frames dropped due to network jitter: 0,00%
Average network latency: 5 ms (variance: 4 ms)
Average decoding time: 0,61 ms
Average frame queue delay: 0,10 ms
Average rendering time (including monitor V-sync latency): 1,51 ms
00:01:20 - SDL Info (0): Stopping input stream...
00:01:20 - SDL Info (0): done
00:01:20 - SDL Info (0): Stopping audio stream...
00:01:20 - SDL Info (0): done
00:01:20 - SDL Info (0): Stopping video stream...
00:01:20 - SDL Info (0): ENet wait interrupted
00:01:20 - SDL Info (0): Control stream connection failed: 4
00:01:20 - SDL Info (0): done
00:01:20 - SDL Info (0): Stopping control stream...
00:01:20 - SDL Info (0): ENet peer acknowledged disconnection
00:01:20 - SDL Info (0): done
00:01:20 - SDL Info (0): Cleaning up input stream...
00:01:20 - SDL Info (0): done
00:01:20 - SDL Info (0): Cleaning up video stream...
00:01:20 - SDL Info (0): done
00:01:20 - SDL Info (0): Cleaning up control stream...
00:01:20 - SDL Info (0): done
00:01:20 - SDL Info (0): Cleaning up audio stream...
00:01:20 - Qt Info: Found "gamecontrollerdb.txt" at "/home/---------/.cache/Moonlight Game Streaming Project/Moonlight/gamecontrollerdb.txt"
00:01:20 - SDL Info (0): Loaded 449 new gamepad mappings
00:01:20 - SDL Info (0): done
00:01:20 - SDL Info (0): Cleaning up platform...
00:01:20 - SDL Info (0): done
^C00:01:57 - SDL Info (0): Received signal: 2

Options:
image

laptop conf:

OS: EndeavourOS x86_64
Host: 20T3A (ThinkPad X13 Gen 1)
Kernel: Linux 6.18.13-arch1-1
Display (BOE07EB): 1920x1080 in 13", 60 Hz [Built-in]
Display (CB273U): 2560x1440 in 27", 60 Hz [External]
Display (ASUS PB278): 1440x2560 in 27", 60 Hz [External]
WM: Sway 1.11 (Wayland)
CPU: Intel(R) Core(TM) i5-10210U (8) @ 4.20 GHz
GPU: Intel UHD Graphics @ 1.10 GHz [Integrated]
Memory: 3.88 GiB / 7.42 GiB (52%)
 Swap: 0 B / 16.00 GiB (0%)
Disk (/): 94.19 GiB / 155.76 GiB (60%) - btrfs
Locale: en_US.UTF-8

As stream server I using Wolf (Sunshine)

@nhths
Copy link
Copy Markdown

nhths commented Mar 4, 2026

I reread the discussion and realized that Linux support isn't intended. But why?

@linckosz
Copy link
Copy Markdown
Author

linckosz commented Mar 4, 2026

I reread the discussion and realized that Linux support isn't intended. But why?

@nhths Thanks for your feedback. You are right, Linux is not yet supported, it is just a matter of time for me to get familiar with Vulkan and the way to use shaders. So far, only FSR1 (Shader version) seems to work for Linux. During weekends I try to progress on it, no deadline in sight for the moment, but I know I'll make it work.

@linckosz linckosz changed the title Add Video Super Resolution for Windows (AMD, Intel and NVIDIA) and MacOS Add Video Super Resolution for Windows (AMD, Intel and NVIDIA), Linux and MacOS Mar 19, 2026
@Tiikara
Copy link
Copy Markdown

Tiikara commented Mar 20, 2026

linckosz#4

@linckosz
Copy link
Copy Markdown
Author

linckosz commented Mar 20, 2026

Good news, the Linux version with Video Super Resolution is ready! 🎉

Artifacts link

Thanks to Vulkan and pl_mpv_user_shader_parse, integrating the FSR1 shader turned out to be surprisingly straightforward on Linux.
I think I've done everything I could with this PR. 🙂

Below are screenshots of a 720p stream upscaled to a 1440p display:

Linux (original)
01_Linux_720p_1440p_Original

Linux (with FSR1)
02_Linux_720p_1440p_FSR1

/cc @nhths @ajunca

@nhths
Copy link
Copy Markdown

nhths commented Mar 21, 2026

Thank you for your significant and valuable work on Moonlight and implementing FSR support on Linux! The image quality does look noticeably better. I tested with a 720p host resolution and 1080p client, and details definitely appear sharper. But I do not observe any anti-aliasing being applied. Would it be possible to implement it? Also, I hope AMD opens up FSR 3/4 in the future - it would be great to achieve even better results.

Tested on Laptop:

██████████████████  ████████ 
██████████████████  ████████   ------------------ 
██████████████████  ████████   OS: Manjaro Linux x86_64 
██████████████████  ████████   Host: HP Pavilion Laptop 15-eh1xxx 
████████            ████████   Kernel: 6.18.12-1-MANJARO 
████████  ████████  ████████   Uptime: 20 hours, 37 mins 
████████  ████████  ████████   Packages: 1943 (pacman), 25 (flatpak) 
████████  ████████  ████████   Shell: zsh 5.9 
████████  ████████  ████████   Resolution: 1920x1080 
████████  ████████  ████████   DE: GNOME 49.4 
████████  ████████  ████████   WM: Mutter 
████████  ████████  ████████   WM Theme: Adwaita 
████████  ████████  ████████   Theme: adw-gtk3-dark [GTK2/3] 
████████  ████████  ████████   Icons: Papirus-Dark [GTK2/3] 
                               Terminal: gnome-terminal 
                               CPU: AMD Ryzen 5 5500U with Radeon Graphics (12) @ 4.056GHz 
                               GPU: AMD ATI 04:00.0 Lucienne (VEGA 6)
                               Memory: 7496MiB / 15305MiB 
Screenshot From 2026-03-21 17-39-12 Screenshot From 2026-03-21 17-37-22 Screenshot From 2026-03-21 17-21-02 Screenshot From 2026-03-21 17-20-40 Screenshot From 2026-03-21 17-18-45 Screenshot From 2026-03-21 17-17-51

@linckosz
Copy link
Copy Markdown
Author

linckosz commented Mar 22, 2026

@nhths ,
Thanks for sharing those screenshots, we can see the improvement with FSR1.

For Linux, that will be the most I can do.
For better quality, AMD, Intel and NVIDIA provide their machine learning solutions, respectively AMF, IntelVPL and RTX VSR, but only on Windows, and for RDNA, Arc and RTX architectures. Your GPU is a Vega 6, which is not an RDNA architecture, so even on Windows the code would still fall back to FSR1, the result will be the same.

As for FSR2 (and beyond), the technology is completely different from FSR1. FSR1 is a spatial upscaler, meaning it works on a per-frame basis, which makes it well suited for video streaming. FSR2 is a temporal upscaler, which is far more complex: it requires per-pixel motion vectors and depth buffer information that are generated during the game's rendering pass on the host. Such data is not transmitted over the stream, and I don't think that will be possible anytime soon, this kind of data is significantly heavier than a compressed video frame.

@linckosz linckosz changed the title Add Video Super Resolution for Windows (AMD, Intel and NVIDIA), Linux and MacOS Add Video Super Resolution for Windows x64 (AMD, Intel and NVIDIA), Windows ARM (Snapdragon), Linux and MacOS Mar 27, 2026
@YakovAU
Copy link
Copy Markdown

YakovAU commented Mar 28, 2026

While i love the quality of this feature, there is a significant performance loss when using it with my setup. I multibox a game with 3 PCs, two moonlight sessions i alt tab between.
With standard, i get no FPS loss. if i use the RTX version, only one instance drops FPS of the main PC game from 220 down to 150. Is this just a limitation of using RTX/tensor cores, since the game might already be using them?

@linckosz
Copy link
Copy Markdown
Author

While i love the quality of this feature, there is a significant performance loss when using it with my setup. I multibox a game with 3 PCs, two moonlight sessions i alt tab between. With standard, i get no FPS loss. if i use the RTX version, only one instance drops FPS of the main PC game from 220 down to 150. Is this just a limitation of using RTX/tensor cores, since the game might already be using them?

@YakovAU
I am glad you love this feature! 😎

RTX VSR relies on machine learning with an AI model, so it does consume GPU resources.
If you are running a 3D game on the same machine as Moonlight with VSR enabled, GPU resources will indeed be shared, which can impact performance. However, this is not the typical use case, as Moonlight is usually running on a client machine while the game runs on a separate host machine.
image

You can try the following instance.
This feature is not intended for production use, but here is a debug build of Moonlight VSR where you can manually select the upscaling algorithm.
Download Moonlight VSR in Debug mode
By default, NVIDIA uses RTX VSR, but you can try other algorithms, some are less resource-intensive, although they may not provide the same quality as VSR.

image image

@linckosz linckosz force-pushed the master branch 2 times, most recently from 4b98aa1 to c3c2ccf Compare April 9, 2026 19:25
This commit introduces video super-resolution and upscaling support across Windows, Linux and macOS platforms.

DirectX 12 Upscaling Pipeline
- Added a full D3D12 renderer to enable advanced GPU upscaling features.
- Works on Windows for AMD, NVIDIA, and Intel GPUs, and on macOS (ARM) using Metal.
- Supports SDR, HDR, and YUV 4:4:4 pipelines.
- Uses vendor-specific driver upscalers by default (e.g., AMD AMF), with automatic fallback to a shader-based solution (typically FSR1) when unsupported or unreliable on older hardware (e.g., NVIDIA GTX).
- Automatic algorithm selection based on vendor, GPU model, and available features.
- Optimized for low-end GPUs (such as Intel UHD) by combining GPU upscaling with RCAS shader operations.
- Uses FFmpeg DX12 hardware decoding by default; includes fallback to DX11 decoding with DX11–DX12 interop in cases where DX12 decoding causes stutters on some AMD GPUs. Rendering remains fully D3D12.
- Added detailed upscaler information to the on-screen statistics overlay.
- Add Shader FSR1 for Linux

macOS Upscaling
- Integrated MetalFX upscaler for macOS platforms.

Tested Hardware
- NVIDIA RTX 4070 Ti (Windows & Linux)
- NVIDIA GTX 1050 (Windows & Linux)
- AMD Radeon RX 7600 (Windows)
- AMD Ryzen 7 780M iGPU (Windows)
- Intel Arc A380 (Windows)
- Intel UHD Graphics (16 EU, N95 CPU) (Windows)
- Snapdragon 7c (Windows ARM)
- Apple M1 Pro (macOS)
- Apple M3 (macOS)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.