AMD AMF and GPU Encoding Issues and Discussion (notably for VR)

Discussion in 'Videocards - AMD Radeon' started by Deleted member 282649, Jun 2, 2022.

  1. I didn't think much of a GPU encoder prior to getting a Quest 2 VR headset. It uses the GPU encoder, and I've ran into too many issues with encoding in-general and gotten too many vague answers as to why that all seemingly point to AMD.
    • Oculus doesn't support HEVC encoding in any situation with any AMD GPU today (they do HEVC for Oculus Air Link on NVIDIA) (see a post below for a registry mod)
    • Varjo Aero doesn't support any AMD GPU (they don't specify why directly, but I heard somewhere it was encoder-related)
    • Virtual Desktop has display driver crashes on Polaris on any driver above 20.10.1 (Oct 2020)
    • AMD broke Oculus Link support entirely for 5-6 driver releases starting with 20.11.2
    • Virtual Desktop claims HEVC last worked on 5000/6000 GPUs with driver 21.10.2 (there are no known-issues in the driver notes about this)
    • AMD broke Oculus Link with the May preview driver, in all 3 22.5.2 drivers, and also 22.6.1, without any known-issue notes, and there are floods of reports about this as of lately in various communities (it's also with other VR headsets)
    Notably the VD issues have been reported to AMD, and the main VD developer has (reportedly) also discussed the issues with AMD. AMD is well aware that their driver on their supported Polaris platform has been broken with a popular piece of software for PCVR since 2020.

    There's two issues here. AMD doesn't seem to put effort into their encoder stack beyond AMD Link, and they don't care about breaking support widespread for the most popular and affordable headset, further cementing the rumor that AMD sucks for VR. AMD's already known for not being the best for GPU encoding, and that is spreading to the VR community as well (check some NV vs AMD Quest 2 threads).

    This is more of a rant as I don't expect a forum post to kick a fire under AMD to address this, but I would like to try to understand what AMD is trying to do here? Pushing raw data over display cables isn't the future for VR headsets, and GPU encoding is seemingly here to stay for a while. Quest 2 is cheap and excels for PCVR. PCVR needs good GPUs. AMD should be dedicating a large chunk of resources to make this experience as great as possible, instead of seemingly just making their stack good-enough for lossy 1080p Twitch streaming.

    This first became an issue for me when I got a Quest 2 with a RX 580. I was coming from a Rift CV1 with the same GPU. The Quest 2 was a muddy compressed mess, and I had to figure out why. I believe I was the first person to make a point of this publicly with the Quest 2.

    I went from a RTX 3060 to a 6600 XT. The Quest 2 overall experience was notably better with the 3060 (higher encode resolution for 90 and 120Hz), even though the 6600 XT has better raw-performance. This will only get worse with higher refresh rate and resolution headsets, and AMD should be sweating if Cambria keeps the same Link encode/decode process.

    Overall, I'd like AMD to improve their encoder stack or to come out and say why others are using it wrong, and to not break official Oculus Link every few drivers. It can't be hard for AMD to attach a Quest 2 to those test machines they have.

    ___________________________________

    To avoid confusion:
    • Most of this thread talks about Oculus Link, as in Oculus's official PCVR software
    • VD is Virtual Desktop, the most popular PCVR software, and is a 3rd-party alternative to Oculus Link
    • ALVR and ReLive VR are also 3rd-party alternatives to Oculus Link
    • AMD Link (the streaming stuff built into Adrenaline drivers) is only mentioned in this thread once and isn't relevant for VR
    • AVC = H.264 and HEVC = H.265; Oculus references AVC/HEVC but others do H.264/H.265
    Here's a short-but-lengthy explanation as to how rendering works for VR headsets also that explains why the GPU encoder is important.

    Games are rendered at whatever resolution and quality your GPU can handle. Nothing particularly special here; you need GPU power to process graphical effects and a 3D world at high resolutions like 3616x1840 at 90Hz. The final rendered frame at this point is the highest quality it can be. For traditional VR headsets, this goes through minor processing (warp/distortion) and is sent 1:1 to the VR headset's screen.

    In the case of the Quest 2, the final rendered frame at that point instead goes through a process to compress it. This uses the GPU's encoder. So your GPU would take that 3616x1840 frame, and compress it to something like 1984x1120. This compressed frame is then sent to the VR headset to be decompressed and displayed on the VR headset's screen.

    So the final image shown on the VR headset in this case is a direct-result from how high of quality the compressed frame comes from the PC's GPU encoder. The GPU encoder has to keep-up with your VR headset's refresh rate, and that has priority, so in the case of encoder-limited GPUs, the higher the refresh rate, the lower the resolution has to be for it to keep up.

    ___________________________________

    To further explain this with numbers (and largely because I like this topic :p):

    With a RX 580, a Quest 2 headset at a 1.0x rendering resolution is: 3616 x 1840 @ 72Hz

    A RX 580 can handle these encode resolutions at these refresh rates:
    • 1984 x 1120 @ 72Hz
    • 1824 x 960 @ 80Hz
    • 1664 x 960 @ 90Hz
    • 1376 x 800 @ 120Hz
    A Rift CV1 headset for reference is: 2160x1200 @ 90Hz

    So in this case, games are being rendered at 3616 x 1840, and then being displayed on the Quest 2 at 1984 x 1120, which is lower than the CV1's 2160x1200 resolution (on-top of being lower Hz). We see here that the GPU encoder is severely bottlenecking the image quality on the Quest 2 even though the GPU can handle the higher rendering resolution and is wasting time rendering at it.

    To not be bottlenecked with this, your GPU encoder has to be able to handle the same resolution and refresh rate as best as possible, and realistically the Quest 2 with PCVR needs 120Hz, or at least 90Hz to lower the overall Link overhead latency (Quest 2 in best conditions is about 25ms overall where a CV1 I've seen at 15ms; Quest 2 at 72Hz is about 45-60ms overall). GPU overhead is also something to consider, as high GPU use has higher-priority than GPU encoding (if you max GPU usage, encoder won't be able to keep-up).

    That's mostly worst-case though as Polaris is the lowest-end GPU family Oculus supports, however there are no AMD GPUs currently (even with RDNA2) that can handle the highest encode resolutions with AVC.

    For further reference, Oculus notes the encode resolution usually with just the width (from Debug Tool):
    • The default max encode width over Oculus Link is: 3664
    • Max encode width for a RX 580 (AVC) is: 1984 (72Hz)
    • The default width for a RTX 3060 (AVC) is: 3664 (it can handle over 4000 at 90Hz)
    • The default width for a 6600 XT is: 3664 (72Hz; only gets lower with higher refresh rates)
    The situation may be different with HEVC, but as stated above that's not an option with AMD currently.

    I maintain a list of resolutions and other Quest 2 info on my wiki. I recently added RX 6600 XT and RTX 3060 numbers.

    ___________________________________

    I'm also interested in seeing how different GPUs perform with encoding. I don't know if I have my old reports from a 580, but there's software here that will benchmark GPU encoding at different resolutions and refresh rates: https://alax.info/blog/software (notably AmaEncode and NvcEncode).
    With a 6600 XT, it seems with H.264 encode latency is the lowest at 1440p at 144 FPS at around 6ms. Going to 1080p lowers the latency to 4ms. Going to 4K spikes the latency to 10ms. For Oculus, it seems it would be a good idea to either use 120Hz, or force a lower encode resolution if using a lower refresh rate if you want lower latency.

    NvcEncode results from a RTX 3060:

    AVC Gallery: https://imgur.com/a/bC6zcny
    Code:
    640x360@144     0.85
    640x360@260     0.47
    1280x720@60     1.00
    1280x720@120    1.01
    1920x1080@60    2.01
    1920x1080@72    2.01
    1920x1080@90    2.01
    1920x1080@120   2.01
    1920x1080@144   2.02
    2560x1440@60    3.19
    2560x1440@72    3.33
    2560x1440@90    3.10
    2560x1440@120   3.50
    2560x1440@144   3.53
    3840x2160@30    7.01
    3840x2160@60    7.24
    3840x2160@72    7.01
    3840x2160@90    7.17
    3840x2160@120   7.01
    3840x2160@144   6.12

    HEVC Gallery: https://imgur.com/a/4blNAyW

    Code:
    640x360@144     0.30
    640x360@260     0.07
    1280x720@60     1.00
    1280x720@120    1.01
    1920x1080@60    3.00
    1920x1080@72    3.00
    1920x1080@90    3.00
    1920x1080@120   3.00
    1920x1080@144   3.00
    2560x1440@60    2.42
    2560x1440@72    2.63
    2560x1440@90    2.51
    2560x1440@120   2.60
    2560x1440@144   2.25
    3840x2160@30    5.00
    3840x2160@60    5.01
    3840x2160@72    5.01
    3840x2160@90    5.01
    3840x2160@120   5.07
    3840x2160@144   5.15
    

    With the 3060, it seems latency goes from 3ms to 7ms going to any 4K resolution with AVC. It goes from about 2.5ms to 5ms latency with any 4K resolution with HEVC.
     
    Last edited by a moderator: Aug 9, 2022
  2. Clai

    Clai Member

    Messages:
    13
    Likes Received:
    3
    GPU:
    RTX 3070 8GB
    I also have a 6600XT and was intending to use it for VR among other things. It's been very frustrating after purchasing it in August and having it perform reasonable at mid/low settings with the Quest 2 (via Air Link/Link/Virtual Desktop) only to have it break and stay broken after a couple of driver updates. There seems to be scattered discourse online in multiple small communities about it, and anyone committed to VR with the funds to do so is simply switching to an NVIDIA GPU instead. I assume AMD is simply not addressing this since the community is niche and they are focusing on wider audience issues, but it would be nice to know they are at least aware there is an issue and are either working to fix it or at least explain why it can't be addressed.

    I was having a decent quality, low latency experience with the Quest 2 + VD on one of the October drivers from last year using HEVC at 150Mbps. On newer drivers, I can only reliably operate on H264 + 90Mbps, which results in a perceivably low quality, blocky and blurry image. Oculus (Air and Wired) Link has been inconsistent, sometimes working 'OK' (despite the clear low quality output) and other times 'pulsing' down to extremely low quality without any obvious cause or change to configuration. Oculus Debug Tool tweaking has gotten me results sometimes, and not other times, and it's hard to identify which features act on Air Link or Wired only since they seem to be reusing many settings but listing them as USB or Wired Link specific... I try to use VD where I can given the extra degree of control and better explanation of what is being configured.

    I've also tried both ReLive VR and ALVR but neither are acceptable solutions IMO as both have multiple issues such as questionable controller support and lag compensation, image quality issues, high latency, crashing, etc. VD and the official Link solutions seem to be the best in show currently, as dismal a show as it is on AMD hardware.

    Frustratingly, newer AMD drivers also contain features that I need/want to use, such as Blender 3.0's HIP functionality and the DX11 performance improvements, so I can't just squat on the October driver waiting for a fix. This has been a severely disappointing switch for me as I like AMD's open source functionality and would like to see them compete with NVIDIA again now that the general rendering gap has closed, but I'm now juggling returning to X11 on Linux for a while as NVIDIA gets their Wayland support and OSS driver together just to get reliable video encoding in general, and VR performance on the rare occasion I'm booted into Windows.

    Is there a way to get AMD's attention on this topic? Do we need a reasonable head count before they'll address anything?
     
  3. z8373767

    z8373767 Master Guru

    Messages:
    462
    Likes Received:
    216
    GPU:
    6900XT/8650G+7970M
    I used to play on R9 Fury via Air Link. I though Fury can't handle better quality of picture (imo it was actually very OK for Wireless Airlink and Half-Life Alyx, maybe Hellblade VR using wired Airlink looks very meh). I did not tested VR with 6900XT yet. I read all, but i don't understand some topics. Can i help you guys somehow? 6900XT and Oculus Quest 2, dont have VD or ALVR.
     
  4. I did a little testing with Air Link a few minutes ago and it seems it's only the Oculus dash/UI that's broken with 22.5.2 with the ghosting/blur/movement. Beat Saber in Oculus mode plays and meets framerate and latency expectations. I'm using V40 Quest 2 firmware (stable) and V41 Oculus (PTC). I only use Oculus UI to launch games, so I guess it's not really an issue.

    Edit: Even Beat Saber had worst performance overall; it was just more playable than what Dash looked like.
     
    Last edited by a moderator: Jun 29, 2022

  5. Clai

    Clai Member

    Messages:
    13
    Likes Received:
    3
    GPU:
    RTX 3070 8GB
    I went to 22.5.2 and had an issue with Virtual Desktop where the encoding for flatscreen/left eye VR was messed up, seemingly affecting everyone on their Discord using AMD, so I downgraded back to 22.5.1 without testing Air Link. I will upgrade and test this next time though.
     
  6. Clai

    Clai Member

    Messages:
    13
    Likes Received:
    3
    GPU:
    RTX 3070 8GB
    I'm not sure when it was implemented, but it seems that Meta has added a profile for the 6600XT or RDNA2 in general to the Desktop App; I no longer get the 'below minimum requirements' warning for the same hardware and it seems like Encoding Width is locked to 2880 on 90hz and 120hz for me, keeping the encode latency down at 6ms. Still no HEVC, but H264 now able to be set to 200mbps bitrate. Air Link performs well in this state from the limited tests I've done with Half Life Alyx and Beat Saber. This is on AMD driver 22.5.1.

    I tested Air Link on 22.5.2 as well and observed the weird home behavior that others mentioned (for me this was a shifting floor grid that didn't seem to match my head movements). While games did seem to play OK (Beat Saber @ 120hz), the Oculus Debug log was flooded with an AMF message whenever Air Link was running:

    758 [AMFEncoderCoreH264] Warning: SetProperty ReferenceBPicturesDeltaQP not found
    758 [AMFEncoderCoreH264] Warning: SetProperty BPicturesDeltaQP not found


    H264 encoder missing some features? Doesn't cause a crash at least. I will stick with 22.5.1 for now, but will move from Virtual Desktop to Air Link, since it provides a higher bitrate and a means to control encode width to keep latency low.

    Thanks for this information. This helped confirm an issue I saw with latency spiking at high H264 encodes in VD as well, and finding out what encode width is being selected when set to auto is useful. Oculus seems to think 2880 is the sweet spot now.

    It would be nice if they could restore HEVC functionality; tests in VD on last years driver indicate an improvement of a couple of ms in encode time when using HEVC over H264, although I don't know what encoding width VD uses. It seems like newer AMD cards are better at HEVC than they are at H264... when it works...

    Edit: if it's useful, the Oculus app version is 41.0.0.113.353 for me.
     
  7. Clai

    Clai Member

    Messages:
    13
    Likes Received:
    3
    GPU:
    RTX 3070 8GB
    If anyone is interested; seems like none of my previous post was signs of improved compatibility after all. More likely Oculus just doesn't recognize the card on newer software. I have fresh installed 22.5.2 to do some further testing (if I understand correctly, this driver has been "released again" since the last time I tested it). Despite the 200mbit slider, actual network traffic to the headset still tops off at 90mbit or so, and 2880 encode appears to be the default selected for unknown hardware. Image quality in Air Link is still bad. HEVC on Virtual Desktop still crashes the driver.

    On the other hand, "wired" Link is using the same encoder but does not have this same bitrate limitation. You can still push the bitrate up to 500 with the debug tool and wired Link will obey this setting, despite ignoring it when using Air Link. As you increase the Encode Bitrate, it shows a higher and less stable encoding (and decoding) latency from the GPU in the Oculus Link Detail Performance HUD:

    [​IMG]

    Top-left graph(s): Red is GPU encode, Green is USB transfer, Blue is headset decode
    Captured from Oculus Mirror in the Debug Tool while running Beat Saber, 120hz, 1.3x (3648x1856), default Encode Width (2880 for me)


    In the wired situation at 120hz Air Link appears to 'start at' ~4 frames of latency. It looks like the total latency from encode+decode is right on the borderline of one extra buffered frame, and as you push the rate higher along with the increased jitter, the Oculus software begins adding and removing that extra frame of buffer as the encode/decode spikes keep pushing the buffering algorithm over the edge. It's not apparent in the picture, but the "Frame Latency" section in the 500mbps stream jumps between 36 and 42ms total latency regularly during use. I'm assuming this combination of higher average encode latency and increased latency jitter is the primary reason why Oculus caps the bitrate of AMD cards lower than the NVIDIA counterparts. Once you add network latency, you're looking at another 1-2 frames of lag to buffer around, and it probably starts to get more apparent in VR at that point. Since this seems to be Oculus enforced, I'm not sure why the bitrate slider in VR no longer reflects the actual bitrate cap like it used to.

    None of this really matters anyway since HEVC is still broken. Another quirk about Adrenalin 22.5.2 is that after clean installing it for the second time this month, AmaEncode now reports AMF version 1.4.25.0 instead of 1.4.24.0 like last time I installed 22.5.2...

    [​IMG]

    This version is not yet mentioned on GPUOpen/AMF GitHub page. HEVC encoding still seems to crash the driver on this AMF version as well, judging by Virtual Desktop and Instant Replay tests. AmaEncode and the Oculus Debug log both act like the GPU simply doesn't support HEVC encode and don't bother to test it.

    I think I'm resigned to the fact that I'll need to go team green on the next GPU buy if I want to do VR, but I'd still like the HEVC encoder to work properly in the meantime so I can get a decent wireless experience... :(
     
    Deleted member 282649 likes this.
  8. jsoad

    jsoad Guest

    Messages:
    3
    Likes Received:
    0
    GPU:
    6600XT
    What is the driver version that you were using?
     
  9. Clai

    Clai Member

    Messages:
    13
    Likes Received:
    3
    GPU:
    RTX 3070 8GB
    The last working driver for HEVC for me was 21.10.2. I have had issues with every driver since and am currently on 22.5.2.
     
    jsoad likes this.
  10. HEVC with Air Link works with 21.10.2 and 22.6.1 (albeit still with buggy Dash) with a 6600 XT! This is the first I've seen or heard of Link working with HEVC on AMD. This only seems to work on Air Link and not wired Link (similar to NVIDIA).

    I'm forcing HEVC with this (need to restart Oculus service to enable/disable):

    Code:
    reg add "HKEY_CURRENT_USER\SOFTWARE\Oculus\RemoteHeadset" /v "HEVC" /t REG_DWORD /d "1" /f
    That will need disabled before you can use wired Link again. This deletes that key:

    Code:
    reg delete "HKEY_CURRENT_USER\SOFTWARE\Oculus\RemoteHeadset" /v "HEVC" /f
    Service logs show HEVC capabilities and no mention of AVC or H.264. I even saw the occasional black/white checkerboard HEVC artifacting that I recall seeing at times with HEVC on my 580. I'm on Oculus 42.0.0.123.285 (PTC). Head-tracking latency is notably better with default settings at 90Hz with Air Link and HEVC vs wired Link and AVC.

    Edit: Service logs can be found at the location below; the one with the last modifed date and higher numbers on the filename is the current Oculus session:

    Code:
    %localappdata%\Oculus
     
    Last edited by a moderator: Jul 15, 2022

  11. Clai

    Clai Member

    Messages:
    13
    Likes Received:
    3
    GPU:
    RTX 3070 8GB
    Hey mate, I have been trying this out too but I'm not so sure it's giving me an HEVC stream. I see the log is posting pumping out HEVC data but the stream looks to be about the same quality as the H264 one, the bit rate is still pinned around 90mbps and I don't see any meaningful difference in the latencies for the encoder and decoder. I usually check Beat Saber since the use of similar colors with slight gradient differences makes it easy to see artifacting, and I see roughly the same quality image when I do the forced regedit HEVC setting.
    On VD when I have working HEVC I see the encoder is 1-2ms faster but the decoder the opposite. I suspected that some fixed Oculus settings that were fixing the bitrate on Air Link were also forcing an H.264 stream, and that wired Link immediately crashing when HEVC is forced is the actual HEVC experience on Link lol (would be happy to be wrong though)

    That being said, if you were seeing signs of the streaming being HEVC with the 580 then I might give it another look. On a related note, have you tried using AmaEncode on your RX 580, and does it actually complete the HEVC run of encodes? I have never had that part of AmaEncode work on the 6600XT on any driver so far, even the stable VD HEVC ones.
     
  12. I no longer have a 580, but I only had HEVC working with it through Virtual Desktop and Radeon ReLive VR; I didn't get to try AmaEncode.

    I didn't see any notable difference in reported latency from Oculus HUD, but to me something just feels notably better; it was instantly noticeable when I turned my head after Link started.

    In the logs, apparently the benchmarks have shorter times on HEVC:

    Code:
    01/07 08:12:53.659 {DEBUG}   [xrstreaming]  Encoding resolution (2880, 1600): average took 5216856.000000 ns, max 5731700.000000 ns
    01/07 08:12:53.826 {DEBUG}   [xrstreaming]  Encoding resolution (2880, 1600): average took 5289616.000000 ns, max 5635000.000000 ns
    01/07 08:12:53.998 {DEBUG}   [xrstreaming]  Encoding resolution (2880, 1600): average took 5367516.000000 ns, max 6269800.000000 ns
    01/07 08:12:53.998 {DEBUG}   [xrstreaming] p90 encode time 5675150.000000 ns for 4500 units
    01/07 08:12:54.101 {DEBUG}   [xrstreaming]  Encoding resolution (2016, 1120): average took 3016913.000000 ns, max 3371400.000000 ns
    01/07 08:12:54.101 {DEBUG}   [xrstreaming] p90 encode time 3187320.000000 ns for 2205 units
    01/07 08:12:54.101 {DEBUG}   [xrstreaming] Encoder benchmark slope: 1084.021786, offset: 797051.960784
    
    Compared to AVC:

    Code:
    01/07 09:54:47.443 {DEBUG}   [xrstreaming]  Encoding resolution (2880, 1600): average took 6992463.000000 ns, max 7180900.000000 ns
    01/07 09:54:47.661 {DEBUG}   [xrstreaming]  Encoding resolution (2880, 1600): average took 6888153.000000 ns, max 7005100.000000 ns
    01/07 09:54:47.882 {DEBUG}   [xrstreaming]  Encoding resolution (2880, 1600): average took 6927446.000000 ns, max 7111200.000000 ns
    01/07 09:54:47.882 {DEBUG}   [xrstreaming] p90 encode time 7035840.000000 ns for 18000 units
    01/07 09:54:48.030 {DEBUG}   [xrstreaming]  Encoding resolution (2016, 1120): average took 4137036.000000 ns, max 4439700.000000 ns
    01/07 09:54:48.030 {DEBUG}   [xrstreaming] p90 encode time 4209400.000000 ns for 8820 units
    01/07 09:54:48.030 {DEBUG}   [xrstreaming] Encoder benchmark slope: 307.891068, offset: 1493800.784314
    
     
    Clai likes this.
  13. Clai

    Clai Member

    Messages:
    13
    Likes Received:
    3
    GPU:
    RTX 3070 8GB
    That's good to know. I wonder if it's worth contacting Meta around the bitrate limit and wired support not working? The stream I get when forcing HEVC is still pretty clearly artifacted for me so it would be nice to be able to try higher bitrates.
     
  14. With a RTX 3060 and Oculus 42.0.0.136.285, it defaults to 3664 encode resolution (3680x1920) on all refresh rates, even 120Hz.

    Compared to the RX 6600 XT, it only gets 3680x1920 encode resolution at 72Hz, with lower resolutions being used for higher refresh rates. At 120Hz, encoder framerate is around 100-116 FPS.

    Both instances are with wired Link and AVC.
     
    Last edited by a moderator: Jul 13, 2022
  15. Clai

    Clai Member

    Messages:
    13
    Likes Received:
    3
    GPU:
    RTX 3070 8GB
    I see your NVCEncode results, sounds like HEVC on NVIDIA is the ideal for both latency and quality output. I think my patience has run out with AMD.
     

  16. This isn't exactly related to encoding, but I tried a suggestion about changing audio devices and Oculus is significantly smoother! I'm not certain if this affects the encoder performance notably for AMD, but a quick test shows my 3060 maintaining 120 FPS more consistently. This is the smoothest my headset has been perhaps ever.

    I suspect the issue is related to Oculus's virtual audio driver. Ever since I got a Quest 2, I've only ever used audio through that (either Q2's internal speakers or headphones in the Q2's 3.5mm). Back when I had a Rift CV1 prior to that, it didn't come with headphones, so all my VR back then was through Window's audio driver instead of Oculus's. And when I tried a CV1 again earlier this year with headphones, I noticed it still wasn't as-great as I remembered (it was better than the Q2 in smoothness still). All this points at audio going through Oculus being the issue.

    The tip came from this Reddit thread: https://redd.it/qu68n6

    In my case, I run a long 3.5mm wire alongside my Link cable and wear headphones. In Oculus settings, I force the headphones and mic devices to Windows Default. In Windows, I set my motherboard's output to default.
     
    Last edited by a moderator: Jul 29, 2022
  17. Fresh Oculus AMF logs for a 6600 XT and 22.10.1:

    Code:
    11/10 06:44:09.920 {INFO}    [xrstreaming] ---- AMD AMFVideoEncoderVCE_AVC Capabilities ----
     HW acceleration available
            MaxBitrate = 100000000
            MaxReferenceFrames = 16
            MaxTemporalLayers = 4
            NumOfStreams = 16
            MinReferenceFrames = 1
            MaxProfile = 100
            MaxLevel = 52
            BFrames = 1
            FixedSliceMode = Fail with error [11]
            NumOfHwInstances = 1
            ColorConversion = 0
    
    11/10 06:44:09.920 {INFO}    [xrstreaming]
        ---- AMD H264 Current Properties set ----
            DeBlockingFilter = 1
            QPI = 22
            FrameSize = (3680x384)
            ScanType = 0
            VBVBufferSize = 752640
            ColorBitDepth = 8
            FrameRate = (90x1)
            MaxQP = 51
            Usage = 0
            MaxNumRefFrames = 4
            ProfileLevel = 42
            Profile = 256
            FullRangeColor = 1
            AspectRatio = (1x1)
            MaxOfLTRFrames = 1
            HalfPixel = 1
            LowLatencyInternal = 1
            QualityPreset = 1
            HighMotionQualityBoostEnable = 0
            InColorProfile = -1
            OutColorTransferChar = 0
            OutColorProfile = -1
            SlicesPerFrame = 1
            InColorTransferChar = 0
            BPicturesDeltaQP = Fail with error [4]
            ReferenceBPicturesDeltaQP = Fail with error [4]
            EnforceHRD = 1
            IntraRefreshMBsNumberPerSlot = 255
            FillerDataEnable = 0
            BPicturesPattern = 0
            EnableVBAQ = 0
            QuarterPixel = 1
            InitialVBVBufferFullness = 64
            MaxAUSize = 0
            MinQP = 0
            QPP = 22
            QPB = 22
            TargetBitrate = 80000000
            PeakBitrate = 80000000
            RateControlSkipFrameEnable = 0
            RateControlMethod = 1
            HeaderInsertionSpacing = 0
            BReferenceEnable = 0
            IDRPeriod = 0
            CABACEnable = 2
            NumOfTemporalEnhancmentLayers = 1
    
    11/10 06:44:09.920 {INFO}    [xrstreaming] ---- AMD AMFVideoEncoderVCE_AVC Capabilities ----
     HW acceleration available
            MaxBitrate = 100000000
            MaxReferenceFrames = 16
            MaxTemporalLayers = 4
            NumOfStreams = 16
            MinReferenceFrames = 1
            MaxProfile = 100
            MaxLevel = 52
            BFrames = 1
            FixedSliceMode = Fail with error [11]
            NumOfHwInstances = 1
            ColorConversion = 0
    
    11/10 06:44:09.920 {INFO}    [xrstreaming]
        ---- AMD H264 Current Properties set ----
            DeBlockingFilter = 1
            QPI = 22
            FrameSize = (3680x384)
            ScanType = 0
            VBVBufferSize = 752640
            ColorBitDepth = 8
            FrameRate = (90x1)
            MaxQP = 51
            Usage = 0
            MaxNumRefFrames = 4
            ProfileLevel = 42
            Profile = 256
            FullRangeColor = 1
            AspectRatio = (1x1)
            MaxOfLTRFrames = 1
            HalfPixel = 1
            LowLatencyInternal = 1
            QualityPreset = 1
            HighMotionQualityBoostEnable = 0
            InColorProfile = -1
            OutColorTransferChar = 0
            OutColorProfile = -1
            SlicesPerFrame = 1
            InColorTransferChar = 0
            BPicturesDeltaQP = Fail with error [4]
            ReferenceBPicturesDeltaQP = Fail with error [4]
            EnforceHRD = 1
            IntraRefreshMBsNumberPerSlot = 255
            FillerDataEnable = 0
            BPicturesPattern = 0
            EnableVBAQ = 0
            QuarterPixel = 1
            InitialVBVBufferFullness = 64
            MaxAUSize = 0
            MinQP = 0
            QPP = 22
            QPB = 22
            TargetBitrate = 80000000
            PeakBitrate = 80000000
            RateControlSkipFrameEnable = 0
            RateControlMethod = 1
            HeaderInsertionSpacing = 0
            BReferenceEnable = 0
            IDRPeriod = 0
            CABACEnable = 2
            NumOfTemporalEnhancmentLayers = 1
    
    11/10 06:44:09.920 {INFO}    [xrstreaming] ---- AMD AMFVideoEncoderVCE_AVC Capabilities ----
     HW acceleration available
            MaxBitrate = 100000000
            MaxReferenceFrames = 16
            MaxTemporalLayers = 4
            NumOfStreams = 16
            MinReferenceFrames = 1
            MaxProfile = 100
            MaxLevel = 52
            BFrames = 1
            FixedSliceMode = Fail with error [11]
            NumOfHwInstances = 1
            ColorConversion = 0
    
    11/10 06:44:09.920 {INFO}    [xrstreaming]
        ---- AMD H264 Current Properties set ----
            DeBlockingFilter = 1
            QPI = 22
            FrameSize = (3680x384)
            ScanType = 0
            VBVBufferSize = 752640
            ColorBitDepth = 8
            FrameRate = (90x1)
            MaxQP = 51
            Usage = 0
            MaxNumRefFrames = 4
            ProfileLevel = 42
            Profile = 256
            FullRangeColor = 1
            AspectRatio = (1x1)
            MaxOfLTRFrames = 1
            HalfPixel = 1
            LowLatencyInternal = 1
            QualityPreset = 1
            HighMotionQualityBoostEnable = 0
            InColorProfile = -1
            OutColorTransferChar = 0
            OutColorProfile = -1
            SlicesPerFrame = 1
            InColorTransferChar = 0
            BPicturesDeltaQP = Fail with error [4]
            ReferenceBPicturesDeltaQP = Fail with error [4]
            EnforceHRD = 1
            IntraRefreshMBsNumberPerSlot = 255
            FillerDataEnable = 0
            BPicturesPattern = 0
            EnableVBAQ = 0
            QuarterPixel = 1
            InitialVBVBufferFullness = 64
            MaxAUSize = 0
            MinQP = 0
            QPP = 22
            QPB = 22
            TargetBitrate = 80000000
            PeakBitrate = 80000000
            RateControlSkipFrameEnable = 0
            RateControlMethod = 1
            HeaderInsertionSpacing = 0
            BReferenceEnable = 0
            IDRPeriod = 0
            CABACEnable = 2
            NumOfTemporalEnhancmentLayers = 1
    
    11/10 06:44:09.920 {INFO}    [xrstreaming] ---- AMD AMFVideoEncoderVCE_AVC Capabilities ----
     HW acceleration available
            MaxBitrate = 100000000
            MaxReferenceFrames = 16
            MaxTemporalLayers = 4
            NumOfStreams = 16
            MinReferenceFrames = 1
            MaxProfile = 100
            MaxLevel = 52
            BFrames = 1
            FixedSliceMode = Fail with error [11]
            NumOfHwInstances = 1
            ColorConversion = 0
    
    11/10 06:44:09.920 {INFO}    [xrstreaming]
        ---- AMD H264 Current Properties set ----
            DeBlockingFilter = 1
            QPI = 22
            FrameSize = (3680x384)
            ScanType = 0
            VBVBufferSize = 752640
            ColorBitDepth = 8
            FrameRate = (90x1)
            MaxQP = 51
            Usage = 0
            MaxNumRefFrames = 4
            ProfileLevel = 42
            Profile = 256
            FullRangeColor = 1
            AspectRatio = (1x1)
            MaxOfLTRFrames = 1
            HalfPixel = 1
            LowLatencyInternal = 1
            QualityPreset = 1
            HighMotionQualityBoostEnable = 0
            InColorProfile = -1
            OutColorTransferChar = 0
            OutColorProfile = -1
            SlicesPerFrame = 1
            InColorTransferChar = 0
            BPicturesDeltaQP = Fail with error [4]
            ReferenceBPicturesDeltaQP = Fail with error [4]
            EnforceHRD = 1
            IntraRefreshMBsNumberPerSlot = 255
            FillerDataEnable = 0
            BPicturesPattern = 0
            EnableVBAQ = 0
            QuarterPixel = 1
            InitialVBVBufferFullness = 64
            MaxAUSize = 0
            MinQP = 0
            QPP = 22
            QPB = 22
            TargetBitrate = 80000000
            PeakBitrate = 80000000
            RateControlSkipFrameEnable = 0
            RateControlMethod = 1
            HeaderInsertionSpacing = 0
            BReferenceEnable = 0
            IDRPeriod = 0
            CABACEnable = 2
            NumOfTemporalEnhancmentLayers = 1
    
    11/10 06:44:09.920 {INFO}    [xrstreaming] ---- AMD AMFVideoEncoderVCE_AVC Capabilities ----
     HW acceleration available
            MaxBitrate = 100000000
            MaxReferenceFrames = 16
            MaxTemporalLayers = 4
            NumOfStreams = 16
            MinReferenceFrames = 1
            MaxProfile = 100
            MaxLevel = 52
            BFrames = 1
            FixedSliceMode = Fail with error [11]
            NumOfHwInstances = 1
            ColorConversion = 0
    
    11/10 06:44:09.936 {INFO}    [xrstreaming]
        ---- AMD H264 Current Properties set ----
            DeBlockingFilter = 1
            QPI = 22
            FrameSize = (3680x384)
            ScanType = 0
            VBVBufferSize = 752640
            ColorBitDepth = 8
            FrameRate = (90x1)
            MaxQP = 51
            Usage = 0
            MaxNumRefFrames = 4
            ProfileLevel = 42
            Profile = 256
            FullRangeColor = 1
            AspectRatio = (1x1)
            MaxOfLTRFrames = 1
            HalfPixel = 1
            LowLatencyInternal = 1
            QualityPreset = 1
            HighMotionQualityBoostEnable = 0
            InColorProfile = -1
            OutColorTransferChar = 0
            OutColorProfile = -1
            SlicesPerFrame = 1
            InColorTransferChar = 0
            BPicturesDeltaQP = Fail with error [4]
            ReferenceBPicturesDeltaQP = Fail with error [4]
            EnforceHRD = 1
            IntraRefreshMBsNumberPerSlot = 255
            FillerDataEnable = 0
            BPicturesPattern = 0
            EnableVBAQ = 0
            QuarterPixel = 1
            InitialVBVBufferFullness = 64
            MaxAUSize = 0
            MinQP = 0
            QPP = 22
            QPB = 22
            TargetBitrate = 80000000
            PeakBitrate = 80000000
            RateControlSkipFrameEnable = 0
            RateControlMethod = 1
            HeaderInsertionSpacing = 0
            BReferenceEnable = 0
            IDRPeriod = 0
            CABACEnable = 2
            NumOfTemporalEnhancmentLayers = 1

    Code:
    11/10 07:20:03.549 {INFO}    [xrstreaming] ---- AMD AMFVideoEncoderHW_HEVC Capabilities ----
     HW acceleration available
           HevcMaxReferenceFrames = 16
           HevcMaxBitrate = 100000000
           HevcNumOfStreams = 16
           HevcMinReferenceFrames = 1
           HevcMaxProfile = 1
           HevcMaxTier = Fail with error [11]
           HevcMaxLevel = 186
           HevcColorConversion = 0
    
    11/10 07:20:03.550 {INFO}    [xrstreaming] ---- AMD HEVC Current Properties set ----
           HevcQualityPreset = 10
           HevcDeBlockingFilter = 0
           HevcFrameSize = (3680x1920)
           HevcMaxNumRefFrames = 1
           HevcProfileLevel = 183
           HevcMinQP_I = 0
           HevcEnableVBAQ = 0
           HevcUsage = 1
           HevcMaxQP_I = 51
           LowLatencyInternal = 1
           HevcProfile = 1
           HevcTier = 0
           HevcAspectRatio = (1x1)
           HevcHighMotionQualityBoostEnable = 0
           HevcMaxOfLTRFrames = 0
           HevcHalfPixel = 1
           HevcGOPSPerIDR = 1
           HevcGOPSize = 0
           HevcSlicesPerFrame = 1
           HevcHeaderInsertionMode = 0
           HevcPeakBitrate = 100000000
           HevcRateControlMethod = 3
           HevcColorBitDepth = 8
           HevcFrameRate = (90x1)
           HevcVBVBufferSize = 752640
           HevcInitialVBVBufferFullness = 64
           HevcQuarterPixel = 1
           HevcFillerDataEnable = 0
           HevcInColorProfile = -1
           HevcRateControlSkipFrameEnable = 1
           HevcOutColorProfile = -1
           HevcInColorTransferChar = 0
           HevcOutColorTransferChar = 0
           HevcEnforceHRD = 1
           HevcTargetBitrate = 100000000
           HevcMaxAUSize = 0
           HevcMinQP_P = 0
           HevcMaxQP_P = 51
           HevcQP_I = 26
           HevcQP_P = 26
     
  18. HEVC appear to work on wired Link and all situations (wired/Air Link, AVC/HEVC) can go beyond 100 Mbps, up to 200 Mbps officially with Air Link, and any value set in Debug Tool (500 tested). Seems there were some massive improvements at some point! HEVC on wired Link has a ton of jitter though and doesn't look production-ready yet.

    • RX 6600 XT (22.10.1 drivers)
    • Windows 10 LTSC (10.0.19044)
    • Oculus V46 PTC (46.0.0.230.0)

    • HEVC is used by-default for AMD (6600 XT) with Air Link
    • AVC is used by-default for AMD (6600 XT) with wired Link
    • HEVC goes above 100Mbps and can max at 200Mbps (GUI) with Air Link
    • HEVC goes above 100Mbps and can max at 500Mbps (Debug Tool) with wired Link (HEVC on wired Link appears overall broken/WIP though)
    • AVC goes above 100Mbps and can max at 200Mbps (GUI) with Air Link
    • AVC goes above 100Mbps and can max at 500Mbps (Debug Tool) with wired Link
     
  19. ElegosAkla

    ElegosAkla Guest

    Messages:
    8
    Likes Received:
    2
    GPU:
    AMD 6900XT
    That look Great...
    I got also jitter but only in menu, games are fine.

    but I tried to change bitrate (10-200-300-500..) and it feel I always get 100Mbps.
    (through GUI or with oculus tray tools).
    in comparison with the 200mbit AVC I use in USB quality is a bit below.

    • RX 6900 XT (22.10.1 drivers)
    • Windows 11
    • Oculus also PTC but : 46.0.0.230.0 (46.0.0.229.0)
    I will try with native debug tools
     
    Last edited: Oct 20, 2022
  20. I would check the performance overlay to be sure if the encode bitrate changes. In Oculus Debug Tools:
    • Visible HUD -> Performance (from None)
    • Mode: Oculus Link (from Performance Summary)
     

Share This Page