Skip to content

Instantly share code, notes, and snippets.

@siracusa
Last active January 28, 2024 22:23
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save siracusa/bb006d14e9906ac215fdee7685dc4b4c to your computer and use it in GitHub Desktop.
Save siracusa/bb006d14e9906ac215fdee7685dc4b4c to your computer and use it in GitHub Desktop.
Pro Display XDR at 120Hz bandwidth calculations

From Jonathan Dietz, Jr.:

Almost all new displays employ VESA Coordinated Video Timings using Reduced Blanking Timing Version 2 (CVT-RBv2) which adds a small amount of overhead to the video signal. This overhead includes 80 additional horizontal pixels and enough additional lines to meet the 460 µs minimum vertical blanking interval requirement. You can download an Excel spreadsheet from VESA that will do all the calculations for you, but the math is pretty simple:

460 / ((1000000 / [refresh rate in Hz] - 460) / [vertical resolution])

To get an integer number of lines, you round this result down and add 1. So for Pro Display XDR resolution at 120 Hz that would work out to:

460 / (1000000 / 120 - 460) / 3384) = 197.710 = 198 additional lines

That makes for an effective resolution of 6096 x 3582 @ 120 Hz, or 6096 * 3582 * 120 = 2,620,304,640 pixels per second.

Multiplying pixels per second by the number of bits used to encode each pixel results in the required bandwidth. Display Stream Compression (DSC) provides a programmable compressed bit rate of 8 bits per pixel or higher (or 6 bits per pixel or higher for streams using 4:2:0 chroma subsampling). So the minimum bandwidth when DSC is enabled for an RGB stream with no chroma subsampling is simply [pixels per second] * 8 = 2,620,304,640 * 8 = 20.96 Gbit/s. That would work out to a compression ratio of 3.75:1, which is on the high side for being "visually lossless", but is still within spec.

Without DSC, bits per pixel would be equal to [bits per component] * [number of components] * [chroma subsampling ratio]. HDR displays like the Pro Display XDR generally require at least 10 bits per component, the number of components for both RGB and Y'CbCr is 3, and the commonly supported chroma subsampling ratios are:

4:4:4 (no chroma subsampling) = 1/3 + 1/3 + 1/3 = 1
4:2:2 = 1/3 + 1/6 + 1/6 = 2/3
4:2:0 = 1/3 + 1/6 + 0 = 1/2

For our hypothetical 120 Hz Pro Display XDR that would work out to 10 * 3 * 1 = 30 bits per pixel * 2,620,304,640 pixels per second = 78.61 Gbit/s.

And for reference, here is a list of bandwidths for standard 4-lane DisplayPort Main Links:

Reduced Bit Rate (RBR) = 4 * 1.62 Gbit/s * 8/10 = 5.184 Gbit/s
High Bit Rate (HBR) = 4 * 2.7 Gbit/s * 8/10 = 8.64 Gbit/s
High Bit Rate 2 (HBR2) = 4 * 5.4 Gbit/s * 8/10 = 17.28 Gbit/s (optional, introduced in DP 1.2)
High Bit Rate 3 (HBR3) = 4 * 8.1 Gbit/s * 8/10 = 25.92 Gbit/s (optional, introduced in DP 1.3)
Ultra High Bit Rate 10 (UHBR10) = 4 * 10 Gbit/s * 128/132 * ? =  38.69 Gbit/s (introduced in DP 2.0)
Ultra High Bit Rate 13.5 (UHBR13.5) = 4 * 13.5 Gbit/s * 128/132 * ? =  52.22 Gbit/s (optional, introduced in DP 2.0)
Ultra High Bit Rate 20 (UHBR20) = 4 * 20 Gbit/s * 128/132 * ? = 77.37 Gbit/s (optional, introduced in DP 2.0)

And maximum DisplayPort tunneling bandwidth for Thunderbolt / USB4 links:

Thunderbolt = 2x 4-lane HBR main links = 17.28 Gbit/s
Thunderbolt 2 = 1x 4-lane HBR2 main link = 17.28 Gbit/s
Thunderbolt 3 (Alpine Ridge) = 2x 4-lane HBR2 main links = 34.56 Gbit/s
Thunderbolt 3 (Titan Ridge) = 1x 4-lane HBR3 main link + 1x 2-lane HBR3 main link = 38.88 Gbit/s
Thunderbolt 4 = 1x 4-lane HBR3 main link + 1x 2-lane HBR3 main link = 38.88 Gbit/s
USB4 Gen2x2 = 1x 4-lane HBR2 main link = 17.28 Gbit/s
USB4 Gen3x2 = 2x 4-lane HBR2 main links or 1x 4-lane HBR3 main link + 1x 4-lane HBR main link = 34.56 Gbit/s

To accomodate a 120 Hz Pro Display XDR you'd need at a minimum a DisplayPort 1.4, DisplayPort Alternate Mode on USB Type-C, Thunderbolt 3, or USB4 Gen3x2 link plus a DisplayPort 1.4 source with HBR3 and DSC capabilities. There's no way to do it over a single link without DSC and/or chroma subsampling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment