YCbCr 4:4:4 and RGB are essentially identical, they don’t have any subsampling, so it’s the best you can get, yes.4:4:4 is basically the best subsampling you'd want am i right ? or is there anything better for text ?
and can u go higher than 120hz (144hz at 4k namely)
that's absolutely insane thanks a lot
crazy that we have to go through such a hassle , wtf apple
I had the same thought… this is not worth my time. LOLGood grief. Wake me when it's plug and play.
This is incorrect. The USB-C to HDMI 2.1 adapters in question utilize DisplayPort HBR3 at 32.4 Gbit/s bandwidth and 25.92 Gbit/s data rate. This along with display stream compression DSC1.2a allows for full 4k 120hz 10b 4:4:4 within the HBR3 bandwidth.Hello guys really good stuff and congrats on the achievement!!! One question though.
4k 120hz 10b RGB = 40.09 gbps
Thunderbolt 4 = 40 gbps
The offset is just 90 mbps (11.25 mb/sec) little but still it’s an offset !
So maybe the achievement is only on papers about the 10bit part? And it is actual 8bit? (You notice a diff between 8bit and 10bit - bec you achieved both?)
Maybe thunderbolt 4 can go a liiiittle higher and Apple/Intel hide this from us?
What about the sound signal? Doesn’t this needs some bandwidth for itself?
I would really like an explanation especially in the first question (the little offset)
Again congrats (waiting for my adapter , please let it be VMM6100 🤞)
HDMI 2.0 has enough bandwidth for 4K120 and 8K30 using 4:2:0 8bpc 1188MHz HDMI timing.8k@30hz must be HDMI 2.1
How did you get 40.09 Gbps?4k 120hz 10b RGB = 40.09 gbps
Thunderbolt uses DisplayPort for video. There's no way to transmit more than HBR3 (25.92 Gbps) over Thunderbolt. The Apple Pro Display XDR gets 38.9 Gbps over Thunderbolt for GPUs that don't support DSC by transmitting two separate HBR3 signals for a dual tile mode (3008x3384@60Hz for each tile). Two HBR3 signals would require 51.84 Gbps but the 3008x3384@60Hz tiles (19.47 Gbps each) don't require the entire HBR3 bandwidth and Thunderbolt does not transmit the DisplayPort stuffing symbols used to fill the bandwidth.Thunderbolt 4 = 40 gbps
The offset is just 90 mbps (11.25 mb/sec) little but still it’s an offset !
Comparing 8bpc and 10bpc can be difficult. First you need a 10bpc image. This can be easily generated programatically:So maybe the achievement is only on papers about the 10bit part? And it is actual 8bit? (You notice a diff between 8bit and 10bit - bec you achieved both?)
# create tiff header: big endian, no compression, 4096 x 2048
(
echo "4d4d 002a 0000 001e 0000 02d0 0000 000a 0000 02d0 0000 000a 0010 0010 0010 000e 00fe 0004 0000 0001 0000 0000 0100 0004 0000 0001 0000 1000 0101 0004 0000 0001 0000 0800 0102 0003 0000 0003 0000 0018 0103 0003 0000 0001 0001 0000 0106 0003 0000 0001 0002 0000 0111 0004 0000 0001 0000 00cc 0115 0003 0000 0001 0003 0000 0116 0004 0000 0001 0000 0800 0117 0004 0000 0001 0300 0000 011a 0005 0000 0001 0000 0008 011b 0005 0000 0001 0000 0010 011c 0003 0000 0001 0001 0000 0128 0003 0000 0001 0002 0000 0000 0000"
numlines=$(( 2048 / 8 / 4 )) # 2000 lines, 8 colors, 4 bit depths
for color in 111 100 010 001 110 011 101 000 ; do
red=${color:0:1}
green=${color:1:1}
blue=${color:2:1}
for depth in "12:8:2#1000000000001" "10:4:2#10000000001" " 8:0:2#100000001" " 6:2:2#1000001000001" ; do
shiftfinal=${depth:3:1}
multiplier=$((${depth:5:32}))
depth=${depth:0:2}
shiftright=$((12 - depth))
for (( y=0; y < numlines; y++ )); do
for (( i=0; i < 4096; i++ )); do
value=$(( ((i >> shiftright) * multiplier) >> shiftfinal ))
printf "%04x %04x %04x " $((value * red)) $((value * green)) $((value * blue))
done
echo
done
done
done
) | xxd -p -r > 4096x2048gradients.tif
Thunderbolt 3, Thunderbolt 4, and USB4 all use DisplayPort 1.4 which is limited to 25.92 Gbps until Thunderbolt 5 and USB4 2.0 which will support DisplayPort 2.1 (77.37 Gbps).Maybe thunderbolt 4 can go a liiiittle higher and Apple/Intel hide this from us?
The timing calculation has space for extra horizontal and vertical blanking pixels and I guess the audio is mixed into those areas. You can find the DisplayPort 1.2 spec online somewhere.What about the sound signal? Doesn’t this needs some bandwidth for itself?
Oh man next time I am to the Apple Store , I am gonna show this when someone tells that thunderbolt 4 is 40gbps 🤣HDMI 2.0 has enough bandwidth for 4K120 and 8K30 using 4:2:0 8bpc 1188MHz HDMI timing.
How did you get 40.09 Gbps?
HDMI: 1188MHz * 30bpp = 35.64 Gbps.
CVT-RB2: 1075.81MHz * 30bpp = 32.27 Gbps.
1188MHz * 24bpp = 28.5 Gbps.
1075.81MHz * 24bpp = 25.8 Gbps.
Those all exceed the HBR3 limit of 25.92 Gbps except the CVT-RB2 8bpc mode which might be too close to the limit.
To transmit them from an HBR3 source, DSC is required. DSC compresses to 12bpp by default in macOS but that might be modifiable using a preference.
At 12bpp, you can reduce the DisplayPort link rate to HBR2 (17.28 Gbps) and still achieve up to 1440 MHz (minus overhead for FEC which DSC usually requires).
Thunderbolt uses DisplayPort for video. There's no way to transmit more than HBR3 (25.92 Gbps) over Thunderbolt. The Apple Pro Display XDR gets 38.9 Gbps over Thunderbolt for GPUs that don't support DSC by transmitting two separate HBR3 signals for a dual tile mode (3008x3384@60Hz for each tile). Two HBR3 signals would require 51.84 Gbps but the 3008x3384@60Hz tiles (19.47 Gbps each) don't require the entire HBR3 bandwidth and Thunderbolt does not transmit the DisplayPort stuffing symbols used to fill the bandwidth.
Comparing 8bpc and 10bpc can be difficult. First you need a 10bpc image. This can be easily generated programatically:
Code:# create tiff header: big endian, no compression, 4096 x 2048 ( echo "4d4d 002a 0000 001e 0000 02d0 0000 000a 0000 02d0 0000 000a 0010 0010 0010 000e 00fe 0004 0000 0001 0000 0000 0100 0004 0000 0001 0000 1000 0101 0004 0000 0001 0000 0800 0102 0003 0000 0003 0000 0018 0103 0003 0000 0001 0001 0000 0106 0003 0000 0001 0002 0000 0111 0004 0000 0001 0000 00cc 0115 0003 0000 0001 0003 0000 0116 0004 0000 0001 0000 0800 0117 0004 0000 0001 0300 0000 011a 0005 0000 0001 0000 0008 011b 0005 0000 0001 0000 0010 011c 0003 0000 0001 0001 0000 0128 0003 0000 0001 0002 0000 0000 0000" numlines=$(( 2048 / 8 / 4 )) # 2000 lines, 8 colors, 4 bit depths for color in 111 100 010 001 110 011 101 000 ; do red=${color:0:1} green=${color:1:1} blue=${color:2:1} for depth in "12:8:2#1000000000001" "10:4:2#10000000001" " 8:0:2#100000001" " 6:2:2#1000001000001" ; do shiftfinal=${depth:3:1} multiplier=$((${depth:5:32})) depth=${depth:0:2} shiftright=$((12 - depth)) for (( y=0; y < numlines; y++ )); do for (( i=0; i < 4096; i++ )); do value=$(( ((i >> shiftright) * multiplier) >> shiftfinal )) printf "%04x %04x %04x " $((value * red)) $((value * green)) $((value * blue)) done echo done done done ) | xxd -p -r > 4096x2048gradients.tif
With the image generated by the above code, you should be able to see gradients of 12bpc, 10bpc, 8bpc, 6bpc of each color (grey, red, green, blue, yellow, cyan, magenta). The 6bpc gradient is most noticeable. Above 6bpc is 8bpc. For 8bpc you may be able to see the banding by zooming in. For each band of 6bpc you should be able to see 4 bands of 8bpc. It might be impossible to notice banding in the 10bpc row which is above the 8bpc row.
The next problem is how to display the image. Some apps might only display 8bpc. You might get a different result using Quick Look in Finder.app versus Preview.app. Some apps might only display 8bpc but they might dither the image so it looks like 10bpc.
Maybe taking a screenshot and then examining the pixels using a color histogram can detect if it was displaying at 10bpc without dithering, at least in the framebuffer. Outside the framebuffer on the way from the GPU to the display pixels, other color transformations may occur. Some displays may take a 10bpc input and use some method of displaying that on a 8bpc panel, such as FRC
https://en.wikipedia.org/wiki/Frame_rate_control
Thunderbolt 3, Thunderbolt 4, and USB4 all use DisplayPort 1.4 which is limited to 25.92 Gbps until Thunderbolt 5 and USB4 2.0 which will support DisplayPort 2.1 (77.37 Gbps).
The timing calculation has space for extra horizontal and vertical blanking pixels and I guess the audio is mixed into those areas. You can find the DisplayPort 1.2 spec online somewhere.
Thunderbolt 4 is 40 Gbps (actually, it's 41.25 Gbps on the wire and it takes 66 bits on the wire to transmit 64 bits of data).Oh man next time I am to the Apple Store , I am gonna show this when someone tells that thunderbolt 4 is 40gbps 🤣
DisplayPort with DSC. Thunderbolt doesn't factor into it unless there's a second Thunderbolt controller between the GPU and the display. If there was a second Thunderbolt controller, as in the case of a Thunderbolt Display or dock, then the DisplayPort with DSC is tunnelled over Thunderbolt.So bottom line MacOS using DSC via thunderbolt?
The output signal is just bits. To get more pixels per second for higher resolutions or refresh rates, you either need more bits per second or you need fewer bits per pixel.Cause if I am not mistaken this still doesn’t make any sense… ~25 gbps output and the signal we need is way higher ?!?!? 🥴
macOS might be dumb about when it enables DSC. I think Catalina defaulted to DSC being enabled but later macOS versions defaulted to DSC being disabled except for some cases. The Apple Studio Display and Apple Pro Display XDR use DisplayPort with DSC. With the XDR running at 6K 60Hz 12bpc, DSC is required to get USB write speed greater than 1 Gbps with a Thunderbolt connection.(In the old post [the huge one] I read somewhere that DSC is only possible through hdmi port in macOS … either this is hdmi 2.0 or 2.1)
Thanks to OP for the clear steps to achieve this!
Apart from needing a spare Windows PC with a DP carrying USB-C port (basically a recent laptop), at a high level the process does not seem all that challenging: update dongle, modify EDID and use Better Display.
This is hugely helpful to me personally as I picked up a Mac Studio recently and the one qualm I had over choosing that route over an M2 Pro Mini was the inability to drive an LG OLED at 120Hz over HDMI. This fixes that issue for the price of a low cost HDMI adapter and a modicum of time.
I don't know a way to see what pixel/color/DSC/chroma sub sampling mode is being used for output from GPU of Apple Silicon Mac. The list of color modes exists in ioreg but I don't see where it states what the current color mode is. This would require more investigation.
I think VMMtool is doing something with DisplayPort DPCD to get that info. I think we can do that with AllRez on Intel Mac but it requires some additional code to read the entire log. Then a method to get DPCD on Apple Silicon Macs needs to be found and experimented with.VMMtool also does support things in getting detailed information, but only work with Windows. Another option is if @stevemr123 with BetterDisplay give us this feature in a future release.
Possibly. Do we know if the LG or any TV reports DSC on screen?The LG is getting 4L10 and does not show that is getting DSC there. So the VMM6100 getting DSC and transfer it uncompressed ??
They told me it should be an HDMI 2.1 Port.Well, I guess somebody's specs are right then... . Let us know if you hear from the manufacturer!
I did write this on OP description.@AironMan - This could be factored in to the opening post description:
Custom EDID resolution resets after login/wake? · waydabber BetterDisplay · Discussion #1575
Thanks so much for the custom EDID option. I've been using this to use 75Hz mode on my display, the only thing is when I log out and log in again the EDID is applied, screen goes to native res, but...github.com
- without this, some users will probably have frustrations regarding loosing 120Hz on every wake/start and having to change the refresh rate manually.
---
Additional note: I'll add some improvements in the next app version so EDIDs can be shared and applied easier as base64 texts, this could speed up exchanging various modded and experimental EDIDs and speed up experimentation.
I can confidently say that there is absolutely no tangible input lag to speak ofHas any of you guys tested the input lag? 😝 this is one of an important test I would say😎
Does the adapter make it laggier that as it would be with a single cable?
Mac vs windows input lag? Something like this?
I mean would it be good for gaming?
Assuming you’re not absolutely in the middle of nowhere in California, you could just buy a Windows PC at Best Buy, use it to flash the adapter and then return it for a full refund 😅Can I ship an adapter for one of you guys to flash? I’m in california and dont have a compatible windows pc nor do I know anyone who does.