Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enabling HDR causes massive display washout #205

Open
kltye opened this issue Jan 6, 2025 · 23 comments
Open

Enabling HDR causes massive display washout #205

kltye opened this issue Jan 6, 2025 · 23 comments

Comments

@kltye
Copy link

kltye commented Jan 6, 2025

I tried enabling HDR on two different clients (Moonlight on Nvidia Shield, and Artemis on my Sony Xperia 1 VI), and here's how it looks like:

image

I recognize this image as looking like enabling HDR and having Windows tonemap it to SDR, but this happens on HDR-capable displays. Any idea what I'm doing wrong? I believe HDR worked on my Android TV client with Sunshine and an older build of MTT's virtual display driver.

@ClassicOldSong
Copy link
Owner

Have you enabled HDR on your client? There's a toggle in Artemis's settings.

@kltye
Copy link
Author

kltye commented Jan 7, 2025

Yup, enabled the toggle in Artemis.

@kltye
Copy link
Author

kltye commented Jan 7, 2025

I should also add that I'm using this inside a Hyper-V machine, with GPU partitioning enabled. I've disabled the "internal" display (aka the Hyper-V console), so only the SudoVDA monitor is active.

@ClassicOldSong
Copy link
Owner

That's strange, does Windows HDR calibration help?

@kltye
Copy link
Author

kltye commented Jan 7, 2025

No, the UI for the calibration app is so blown out that I can barely see/read the instructions. Adjusting it back and forth doesn't seem to do anything either. Is it possible that the advertised HDR brightness for the IddCx display is too high? My displays can barely reach 1000 nits.

@ClassicOldSong
Copy link
Owner

ClassicOldSong commented Jan 7, 2025

hmmmmm, does your TV display some HDR badge when entering HDR mode? It seems that HDR mode isn't actually triggered on your TV. You can find some discussions about HDR in this thread: #164

IIRC MTT's VDD also hardcodes a very high brightness, but calibration usually can get the value ignored.

@kltye
Copy link
Author

kltye commented Jan 7, 2025

Yes, it does enter HDR mode - confirmed by the badging and also the fact that the white parts of the image are extremely bright. I tested this with a laptop with an OLED display as well, and it's clear that the Moonlight app is displaying an extremely bright image, but the rest of the Windows desktop is relatively dark/normal.

I did notice that MTT's driver also hardcodes ~1600 nits for peak brightness; I just tested out plain Sunshine and MTT's driver and the result is the same :/

@ClassicOldSong
Copy link
Owner

Then it's your client's problem for displaying HDR content. I think it's mapping HDR to SDR then back to HDR for some reason.

The inconsistency happening on all kinds of clients is the main reason I don't recommend HDR.

@kltye
Copy link
Author

kltye commented Jan 7, 2025

I agree the client is probably messing things up, but it's weird to me that it's happening across all my devices - from Windows to Android to Android TV. I guess there's always a chance my host OS installation is messed up with all the experimenting I've been doing... 🤷

@droric
Copy link

droric commented Jan 7, 2025

@kltye I have had this happen before when I had forced specific encoders/decoders on Apollo/Moonlight. If you show the statistics for Moonlight (Ctrl-Alt-Shift-S), does it show the stream is 10 bit HDR HEVC or AV1?

In regards to your HDR luminance issue. You need to run the Windows HDR Calibration software. This will create an HDR ICC profile with the correct luminance values. For example on my LG G3 I have set the Windows HDR calibration to 1000.0 on the luminance sliders and 0.0 for black levels, the resulting applied ICC HDR profile changes the Windows 'Advanced Graphics' settings to show the correct maximum luminance of 1000 nits instead of the previous ~1600 nits. I do have issues however with the virtual display driver and Windows reapplying the HDR ICC profile when disconnecting and reconnecting to the host.

@ClassicOldSong
Copy link
Owner

Ah yes, I forgot the decoder selection part

When enabled headless mode, the initial decoder probe is skipped, so the host will report no HEVC/AV1 capability. You can set it to always report HEVC and AV1 10bit capabilities in Advanced tab.

@kltye
Copy link
Author

kltye commented Jan 8, 2025

Thanks for the suggestions - but I've already forced the encoder in the settings, and the HDR calibration doesn't work. Moving the slider does nothing, and the "correct" and "wrong" examples have no difference:

Screenshot_20250108-103302

I've run the calibration locally on an HDR-capable display, so I know how the app should look like normally. I've managed to get HDR working after toggling HDR off and on in Windows, but only on a physical machine, not the Hyper-V GPU partitioned machine. (I've also created a new VM from scratch and the problem persists, so it's not the fault of old drivers or software)

@ClassicOldSong
Copy link
Owner

@kltye can you try a different host and see if the problem persists?

@kltye
Copy link
Author

kltye commented Jan 14, 2025

@kltye can you try a different host and see if the problem persists?

Sorry for not replying sooner. Using it on a brand new VM (on the same host) has the same issue, but using it bare metal on the same host is fine - I just have to toggle HDR off/on in Windows sometimes to fix the issue.

Obviously the issue lies with running it inside Hyper-V, but I understand that's beyond the scope of this bug report. (As an aside, Moonlight in Hyper-V is unable to do YUV 4:4:4 encoding, but bare metal is fine as well - so there must be some differences with how GPU partitioning works vs bare metal)

EDIT: Just realized you wanted me to try on a different host entirely even for Hyper-V. I don't have an identical machine, but the closest I have is a home server with an RTX A4000 running Windows Server 2025. I'll spin up a VM and see how that goes.

@ClassicOldSong
Copy link
Owner

Nvidia doesn't allow virtualizing consumer grade cards, all available methods are hacks that remove the check in their VGABios. So weird problems can happen if using virtual machines.

IDK if A4000 count as consumer cards but are they primary used for AI?

@kltye
Copy link
Author

kltye commented Jan 14, 2025

I haven't had to hack anything to enable virtualization of my 3090; I simply used Parsec's GPU-P scripts.

The A4000 is a Quadro-level card, so I don't think it's consumer-grade, but it's also not datacenter grade.

@ClassicOldSong
Copy link
Owner

Didn't know how Hyper-V works, but it requires hacks to work with KVM, so I guess there're still limitations.

@kltye
Copy link
Author

kltye commented Jan 14, 2025

I was trying to get the Apollo/Sunshine working in a VM with a Windows Server host (I've been unsuccessful; says access denied to the NVAPI), but I stumbled upon this setting in the latest Sunshine release:

image

Interestingly they seem to be aware of the issue. Unfortunately that checkbox doesn't work for me in my existing VM, but I'm glad I'm not the only one with the issue!

@ClassicOldSong
Copy link
Owner

Just merged the latest upstream: https://github.com/ClassicOldSong/Apollo/releases/tag/v0.2.8-alpha.1

@sofakng
Copy link

sofakng commented Jan 16, 2025

I came here to write about this same issue. The older versions of Sunshine (w/o the toggle) seem to work fine. However, when I tried Apollo it was completely washed out.

Regardless, Apollo 0.2.8-alpha1 enabling the toggle fixed my problem.

RTX 4090 + Steam Deck

EDIT: Ahhh, I might have been using my physical screen with Sunshine which explains the difference.
EDIT2: Now it stopped working. It sounds like an issue with the virtual display driver and HDR brightness levels?

@ClassicOldSong
Copy link
Owner

Pre 0.2.8 used a workaround written by me. 0.2.8 merges the latest upstream and they have a much "fancier" solution to this problem, as I've tested it seems fine on my system so I changed to their method.

Maybe toggle it manually several times it'll stablize?

@ClassicOldSong
Copy link
Owner

@sofakng I've reverted the workaround to my previous implementation, could you try again?

https://github.com/ClassicOldSong/Apollo/releases/tag/v0.2.8-alpha.2

@sofakng
Copy link

sofakng commented Jan 17, 2025

@sofakng I've reverted the workaround to my previous implementation, could you try again?

https://github.com/ClassicOldSong/Apollo/releases/tag/v0.2.8-alpha.2

Looks good! I've installed the new version and disabled the checkbox and tried connecting/reconnecting a few times and everything appears to be working. Thanks!

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

No branches or pull requests

4 participants