Open magcilyl opened 2 years ago
did you try to set HDR off/on in display settings in windows before launching the game? also changing the resolution inside the game sometimes help to trigger hdr when it's not automatically triggered
I have the same issue with the current build where the TV (or tvOS) doesn't switch to HDR mode, and stays in my original (SDR) mode. With the tvOS app, I request HDR, use moonlight_hdr_launcher with Steam BP, launch Elden Ring, and turn the in-game HDR setting on. Changing resolution inside the game doesn't make a difference. The debug info overlay however shows that HEVC Main 10 is the codec.
When turning on HDR content in something like Netflix on tvOS, I would see the HDR popup appear in the corner of my LG TV to signify a switch to HDR content. With this Moonlight client this doesn't happen at any step in the aforementioned process .
Please upload your logs from C:\ProgramData\NVIDIA Corporation\NvStream
after trying to stream in HDR. I can take a look and see if the correct message is being sent to tell Moonlight to enter HDR.
Please upload your logs from
C:\ProgramData\NVIDIA Corporation\NvStream
after trying to stream in HDR. I can take a look and see if the correct message is being sent to tell Moonlight to enter HDR.
Please upload your logs from
C:\ProgramData\NVIDIA Corporation\NvStream
after trying to stream in HDR. I can take a look and see if the correct message is being sent to tell Moonlight to enter HDR.
My TV is sony Z9d. I lanuch several game supporting HDR, Final Fantasy VII Remaster, Elden Ring. But when I switch the HDR in Game settings, the color changed, but the TV mode don't change, the NvStream file shows it is still SDR.
Please upload your logs from
C:\ProgramData\NVIDIA Corporation\NvStream
after trying to stream in HDR. I can take a look and see if the correct message is being sent to tell Moonlight to enter HDR.
Hi, do you need more files to confirm the sitation? Thank you.
According to the logs, it appears that the host PC isn't switching to HDR mode and that's why Moonlight doesn't change to HDR mode. For newer games, you need to enable the HDR option in Windows on your host.
#2(I)[2022-04-22 07:23:36,483]=15:23:36={24680}<NvscStreamingSes> Sent HDR info: hdrMode 0 for stream 0
#3(I)[2022-04-22 07:23:36,483]=15:23:36={24680}<VideoStreamer> stream:0 capture frame state is SDR
According to the logs, it appears that the host PC isn't switching to HDR mode and that's why Moonlight doesn't change to HDR mode. For newer games, you need to enable the HDR option in Windows on your host.
#2(I)[2022-04-22 07:23:36,483]=15:23:36={24680}<NvscStreamingSes> Sent HDR info: hdrMode 0 for stream 0 #3(I)[2022-04-22 07:23:36,483]=15:23:36={24680}<VideoStreamer> stream:0 capture frame state is SDR
I have a question. The game is Elden Ring and it seems support the stream HDR without OS HDR enabled. I am sure that my television is HDR supported and I turned on HDR in Elden Ring game option.
I know the HDR support for Cyberpunk 2077 calls for OS HDR enabled, which means both the PC monitor and television must be HDR supported if I want to achieve the Moonlight stream HDR.
In Reference ( https://github.com/lyckantropen/moonlight_hdr_launcher ). It seems that the Game-independent HDR streaming don't ask for a HDR PC monitor. Because in this link there is a option for HDTV owners withouth HDR monitor.
Do you mean that no matter what kinds of HDR is the game using (OS HDR or Game-independent HDR), if I want to successfully stream the game with HDR mode, I must buy a HDR monitor even I own a HDR TV?
Thank you very much.
Do you mean that no matter what kinds of HDR is the game using (OS HDR or Game-independent HDR), if I want to successfully stream the game with HDR mode, I must buy a HDR monitor even I own a HDR TV?
No, that's not correct. Not all HDR games require an HDR display on the host.
There are 2 main ways that games can render in HDR on your host PC:
NVAPI HDR is what many early HDR games used (Shadow Warrior 2, Resident Evil Biohazard, Assassin's Creed Odyssey). DXGI HDR is what most modern games use (Horizon Zero Dawn, Shadow of the Tomb Raider). You can find a longer list here: https://www.nvidia.com/en-us/geforce/forums/gamestream/19/295074/gamestream-hdr-support-list/
It can be difficult to tell which one your game uses without testing. One way to tell is checking if the game supports HDR on Windows 7 or Windows 8.1. If that is the case, the game almost certainly uses NVAPI HDR, since DXGI HDR was introduced in Windows 10. If it's a DirectX 12 game, it almost certainly uses DXGI HDR.
If your game uses NVAPI HDR, it is compatible with GameStream HDR without requiring an HDR-compatible monitor on your host PC.
If your game uses DXGI HDR, it will require an HDR-compatible monitor or EDID emulator dongle on your host PC for the game to be able to enable HDR. In most games, the HDR toggle will be greyed out or missing if you don't have an HDR display on the host.
I can confirm I see the same log entries as @magcilyl, though we are apparently trying to do exactly the same thing (moonlight_hdr_launcher, no connected HDR monitors, Elden Ring).
Thanks for the education @cgutman. I'll try to gather more data when I come to own a game that is known to use NVAPI HDR. Maybe Sekiro?
Do you mean that no matter what kinds of HDR is the game using (OS HDR or Game-independent HDR), if I want to successfully stream the game with HDR mode, I must buy a HDR monitor even I own a HDR TV?
No, that's not correct. Not all HDR games require an HDR display on the host.
There are 2 main ways that games can render in HDR on your host PC:
NVAPI HDR is what many early HDR games used (Shadow Warrior 2, Resident Evil Biohazard, Assassin's Creed Odyssey). DXGI HDR is what most modern games use (Horizon Zero Dawn, Shadow of the Tomb Raider). You can find a longer list here: https://www.nvidia.com/en-us/geforce/forums/gamestream/19/295074/gamestream-hdr-support-list/
It can be difficult to tell which one your game uses without testing. One way to tell is checking if the game supports HDR on Windows 7 or Windows 8.1. If that is the case, the game almost certainly uses NVAPI HDR, since DXGI HDR was introduced in Windows 10. If it's a DirectX 12 game, it almost certainly uses DXGI HDR.
If your game uses NVAPI HDR, it is compatible with GameStream HDR without requiring an HDR-compatible monitor on your host PC.
If your game uses DXGI HDR, it will require an HDR-compatible monitor or EDID emulator dongle on your host PC for the game to be able to enable HDR. In most games, the HDR toggle will be greyed out or missing if you don't have an HDR display on the host.
This is my new Nvstream file. I run the Devil may cry 5 ( supported in NVAPI HDR https://www.nvidia.com/en-us/geforce/forums/gamestream/19/295074/gamestream-hdr-support-list/). Still nothing happened.
I can confirm I see the same log entries as @magcilyl, though we are apparently trying to do exactly the same thing (moonlight_hdr_launcher, no connected HDR monitors, Elden Ring).
Thanks for the education @cgutman. I'll try to gather more data when I come to own a game that is known to use NVAPI HDR. Maybe Sekiro?
I failed. What is the result of your try?
I just tried with Shadow Warrior 2 on a system without an HDR display and it worked correctly for me. It starts in SDR, then the game opens and switches the display to HDR.
Here is the relevant portion of the log:
#2(I)[2022-05-07 01:39:42,837]=20:39:42={13524}<VideoFrameProvid> Reallocating frame to 1920 x 1080 ABGR10.
#3(I)[2022-05-07 01:39:42,837]=20:39:42={13524}<VideoFrameResour> Allocating 1920 x 1080 frame with pitch 7680 and ABGR10 format (8100 KiB).
#4(I)[2022-05-07 01:39:42,837]=20:39:42={13524}<VideoFrameResour> Reserving 34816 KiB of memory.
#5(I)[2022-05-07 01:39:42,841]=20:39:42={15352}<VideoStreamer> Stream:0 Frame 1 is an I-Frame.
#6(I)[2022-05-07 01:39:42,842]=20:39:42={15352}<VideoStreamer> Obtained SPS/PPS header for stream:0 frame:1 length 95
#7(I)[2022-05-07 01:39:42,842]=20:39:42={15352}<VideoStreamer> Server sent the first video frame to client for stream:0
#8(I)[2022-05-07 01:39:42,842]=20:39:42={15352}<NvscStreamingSes> Sent HDR info: hdrMode 0 for stream 0
#9(I)[2022-05-07 01:39:42,842]=20:39:42={15352}<VideoStreamer> stream:0 capture frame state is SDR
#0(I)[2022-05-07 01:39:42,844]=20:39:42={5156}<StreamSdkEvents> Enqueuing event for stream of type NVST_MT_VIDEO_INTERNAL: NvstEventDetail::NVST_ED_FIRST_FRAME_SENT, message = ''
#1(I)[2022-05-07 01:39:42,844]=20:39:42={10016}<StreamSdkEvents> Invoking event for stream of type NVST_MT_VIDEO_INTERNAL: NvstEventDetail::NVST_ED_FIRST_FRAME_SENT, message = ''
#2(I)[2022-05-07 01:39:42,844]=20:39:42={10016}<SciBase> Sent event FirstFrameSent:
#3(I)[2022-05-07 01:39:42,844]=20:39:42={10016}<VideoContext> VideoStreamEventRaised
#4(I)[2022-05-07 01:39:42,847]=20:39:42={13524}<Fbc7FrameProvide> FBC dwWaitMode requested: 0x00000010, used: 0x00000014
#5(I)[2022-05-07 01:39:43,073]=20:39:43={15236}<QosSupervisor> Client requested an IDR frame for stream 0
#6(D)[2022-05-07 01:39:43,084]=20:39:43={13524}<NvEnc10VideoEnco> Forcing IDR frame at stream:0 frame:17.
#7(I)[2022-05-07 01:39:43,089]=20:39:43={15352}<VideoStreamer> Stream:0 Frame 17 is an I-Frame.
#8(I)[2022-05-07 01:39:43,089]=20:39:43={15352}<VideoStreamer> Obtained SPS/PPS header for stream:0 frame:17 length 95
#9(I)[2022-05-07 01:39:43,259]=20:39:43={15236}<QosSupervisor> Client requested an IDR frame for stream 0
#0(D)[2022-05-07 01:39:43,272]=20:39:43={13524}<NvEnc10VideoEnco> Forcing IDR frame at stream:0 frame:29.
#1(I)[2022-05-07 01:39:43,277]=20:39:43={15352}<VideoStreamer> Stream:0 Frame 29 is an I-Frame.
#2(I)[2022-05-07 01:39:43,277]=20:39:43={15352}<VideoStreamer> Obtained SPS/PPS header for stream:0 frame:29 length 95
#3(W)[2022-05-07 01:39:43,747]=20:39:43={13524}<Fbc7FrameProvide> Skip 61 possibly corrupted frames.
#4(I)[2022-05-07 01:39:44,424]=20:39:44={13524}<VirtualVsyncHand> VirtualVsync[0] is now INACTIVE.
#5(I)[2022-05-07 01:39:44,424]=20:39:44={13524}<CaptureThread> CaptureThread is USING waitForNextGrab()
#6(I)[2022-05-07 01:39:45,861]=20:39:45={12368}<NvStreamerContex> Invoking clientEventCallback NvstEventDetail::NVST_ED_FOREGROUND_PROCESS_CHANGED: C:\Program Files (x86)\Steam\steamapps\common\Shadow Warrior 2\ShadowWarrior2.exe
#7(I)[2022-05-07 01:39:45,861]=20:39:45={12368}<SciBase> Sent event ForegroundProcessChanged: C:\Program Files (x86)\Steam\steamapps\common\Shadow Warrior 2\ShadowWarrior2.exe
#2(I)[2022-05-07 01:39:47,850]=20:39:47={15352}<NvscStreamingSes> Sent QoS info: stream: 0, client Q-score 100, RTD 0, scores(100, 100, 100)
#3(D)[2022-05-07 01:39:48,467]=20:39:48={13524}<NvEnc10VideoEnco> Forcing IDR frame at stream:0 frame:358.
#4(W)[2022-05-07 01:39:48,500]=20:39:48={5776}<RtspServerObserv> Message has no generic field.
#5(W)[2022-05-07 01:39:48,500]=20:39:48={14696}<RtspServerObserv> Message has no generic field.
#6(I)[2022-05-07 01:39:48,538]=20:39:48={15352}<VideoStreamer> Stream:0 Frame 358 is an I-Frame.
#7(I)[2022-05-07 01:39:48,538]=20:39:48={15352}<VideoStreamer> Obtained SPS/PPS header for stream:0 frame:358 length 95
#8(I)[2022-05-07 01:39:48,538]=20:39:48={15352}<NvscStreamingSes> Sent HDR info: hdrMode 1 for stream 0
#9(I)[2022-05-07 01:39:48,538]=20:39:48={15352}<VideoStreamer> stream:0 capture frame state is HDR
I just tried with Shadow Warrior 2 on a system without an HDR display and it worked correctly for me. It starts in SDR, then the game opens and switches the display to HDR.
Here is the relevant portion of the log:
#2(I)[2022-05-07 01:39:42,837]=20:39:42={13524}<VideoFrameProvid> Reallocating frame to 1920 x 1080 ABGR10. #3(I)[2022-05-07 01:39:42,837]=20:39:42={13524}<VideoFrameResour> Allocating 1920 x 1080 frame with pitch 7680 and ABGR10 format (8100 KiB). #4(I)[2022-05-07 01:39:42,837]=20:39:42={13524}<VideoFrameResour> Reserving 34816 KiB of memory. #5(I)[2022-05-07 01:39:42,841]=20:39:42={15352}<VideoStreamer> Stream:0 Frame 1 is an I-Frame. #6(I)[2022-05-07 01:39:42,842]=20:39:42={15352}<VideoStreamer> Obtained SPS/PPS header for stream:0 frame:1 length 95 #7(I)[2022-05-07 01:39:42,842]=20:39:42={15352}<VideoStreamer> Server sent the first video frame to client for stream:0 #8(I)[2022-05-07 01:39:42,842]=20:39:42={15352}<NvscStreamingSes> Sent HDR info: hdrMode 0 for stream 0 #9(I)[2022-05-07 01:39:42,842]=20:39:42={15352}<VideoStreamer> stream:0 capture frame state is SDR #0(I)[2022-05-07 01:39:42,844]=20:39:42={5156}<StreamSdkEvents> Enqueuing event for stream of type NVST_MT_VIDEO_INTERNAL: NvstEventDetail::NVST_ED_FIRST_FRAME_SENT, message = '' #1(I)[2022-05-07 01:39:42,844]=20:39:42={10016}<StreamSdkEvents> Invoking event for stream of type NVST_MT_VIDEO_INTERNAL: NvstEventDetail::NVST_ED_FIRST_FRAME_SENT, message = '' #2(I)[2022-05-07 01:39:42,844]=20:39:42={10016}<SciBase> Sent event FirstFrameSent: #3(I)[2022-05-07 01:39:42,844]=20:39:42={10016}<VideoContext> VideoStreamEventRaised #4(I)[2022-05-07 01:39:42,847]=20:39:42={13524}<Fbc7FrameProvide> FBC dwWaitMode requested: 0x00000010, used: 0x00000014 #5(I)[2022-05-07 01:39:43,073]=20:39:43={15236}<QosSupervisor> Client requested an IDR frame for stream 0 #6(D)[2022-05-07 01:39:43,084]=20:39:43={13524}<NvEnc10VideoEnco> Forcing IDR frame at stream:0 frame:17. #7(I)[2022-05-07 01:39:43,089]=20:39:43={15352}<VideoStreamer> Stream:0 Frame 17 is an I-Frame. #8(I)[2022-05-07 01:39:43,089]=20:39:43={15352}<VideoStreamer> Obtained SPS/PPS header for stream:0 frame:17 length 95 #9(I)[2022-05-07 01:39:43,259]=20:39:43={15236}<QosSupervisor> Client requested an IDR frame for stream 0 #0(D)[2022-05-07 01:39:43,272]=20:39:43={13524}<NvEnc10VideoEnco> Forcing IDR frame at stream:0 frame:29. #1(I)[2022-05-07 01:39:43,277]=20:39:43={15352}<VideoStreamer> Stream:0 Frame 29 is an I-Frame. #2(I)[2022-05-07 01:39:43,277]=20:39:43={15352}<VideoStreamer> Obtained SPS/PPS header for stream:0 frame:29 length 95 #3(W)[2022-05-07 01:39:43,747]=20:39:43={13524}<Fbc7FrameProvide> Skip 61 possibly corrupted frames. #4(I)[2022-05-07 01:39:44,424]=20:39:44={13524}<VirtualVsyncHand> VirtualVsync[0] is now INACTIVE. #5(I)[2022-05-07 01:39:44,424]=20:39:44={13524}<CaptureThread> CaptureThread is USING waitForNextGrab() #6(I)[2022-05-07 01:39:45,861]=20:39:45={12368}<NvStreamerContex> Invoking clientEventCallback NvstEventDetail::NVST_ED_FOREGROUND_PROCESS_CHANGED: C:\Program Files (x86)\Steam\steamapps\common\Shadow Warrior 2\ShadowWarrior2.exe #7(I)[2022-05-07 01:39:45,861]=20:39:45={12368}<SciBase> Sent event ForegroundProcessChanged: C:\Program Files (x86)\Steam\steamapps\common\Shadow Warrior 2\ShadowWarrior2.exe #2(I)[2022-05-07 01:39:47,850]=20:39:47={15352}<NvscStreamingSes> Sent QoS info: stream: 0, client Q-score 100, RTD 0, scores(100, 100, 100) #3(D)[2022-05-07 01:39:48,467]=20:39:48={13524}<NvEnc10VideoEnco> Forcing IDR frame at stream:0 frame:358. #4(W)[2022-05-07 01:39:48,500]=20:39:48={5776}<RtspServerObserv> Message has no generic field. #5(W)[2022-05-07 01:39:48,500]=20:39:48={14696}<RtspServerObserv> Message has no generic field. #6(I)[2022-05-07 01:39:48,538]=20:39:48={15352}<VideoStreamer> Stream:0 Frame 358 is an I-Frame. #7(I)[2022-05-07 01:39:48,538]=20:39:48={15352}<VideoStreamer> Obtained SPS/PPS header for stream:0 frame:358 length 95 #8(I)[2022-05-07 01:39:48,538]=20:39:48={15352}<NvscStreamingSes> Sent HDR info: hdrMode 1 for stream 0 #9(I)[2022-05-07 01:39:48,538]=20:39:48={15352}<VideoStreamer> stream:0 capture frame state is HDR
I try it on the same game and it success! Thank you! Great work!
Sekiro is another game I tried. It seems the game option is HDR in default when I run it the first time. But the streaming is still SDR. In other forums I see the Nvidia Shield success in the HDR streaming..... It is also a game with NVIDIA API like Shadow Warrior 2 and it is in your list (https://www.nvidia.com/en-us/geforce/forums/gamestream/19/295074/gamestream-hdr-support-list/) . Here is the log file.
When I am playing Elden Ring with HDR on I have to manually enable HDR in Sony TV(Z9d). It seems that TV would automatically switch to HDR when I am using PS5 or Xbox
Is it possible for moonlight to send the information that it is an HDR content to TV? So the TV would swtich the mode to HDR mode automatically.