Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

TheRiddler1982

macrumors member
Original poster
Jun 10, 2015
48
5
Hi all,

I am a photographer with an Intel 2019 MacBookPro (16 inch) attached to a Belkin Thunderbolt 3 Pro. I do all my color critical work on external monitor (BenQ SW321C). The external monitor is connected via native DisplayPort cable to the Thunderbolt 3 dock. The monitor supports 30bit output which I have confirmed with the framebuffer pixel depth showing 30 bit in the macOS system report.

Last week, I have upgraded my MacBookPro (Intel 2019) to MacBookPro M1 Max. As the M1 Max is not working with my Thunderbolt 3 Dock (display stays off), I have connected my monitor using a USB-C cable which was supplied from BenQ (the monitor supports HDMI, USB-C and DP). I have noticed that I do not get 30bits color depth anymore. I have confirmed that with SwitchResX (showing "Millions of colors" and not "Billions of color"). Though, I can activate HDR which is 10bit per channel, isn't?

In the next test, I have used a Belkin USB-C to Displayport cable but with the same output, only 8bit per channel.

Despite looking for a available Thunderbolt 4 docks with a native DisplayPort (most are not in stock where I live), I am looking for a quick solution like an adapter / cable which supports the full 30bit output.


Do you have any ideas?

Thanks,
Sven
 

joevt

macrumors 604
Jun 21, 2012
6,963
4,259
I am a photographer with an Intel 2019 MacBookPro (16 inch) attached to a Belkin Thunderbolt 3 Pro. I do all my color critical work on external monitor (BenQ SW321C). The external monitor is connected via native DisplayPort cable to the Thunderbolt 3 dock. The monitor supports 30bit output which I have confirmed with the framebuffer pixel depth showing 30 bit in the macOS system report.
Framebuffer pixel depth is unrelated to output pixel depth. Use AGDCDiagnose or AllRez to verify output pixel depth. The information is available for Intel Macs using modern GPUs such as the Intel and AMD GPUs used in the 2019 MacBook Pro.

Last week, I have upgraded my MacBookPro (Intel 2019) to MacBookPro M1 Max. As the M1 Max is not working with my Thunderbolt 3 Dock (display stays off), I have connected my monitor using a USB-C cable which was supplied from BenQ (the monitor supports HDMI, USB-C and DP). I have noticed that I do not get 30bits color depth anymore. I have confirmed that with SwitchResX (showing "Millions of colors" and not "Billions of color"). Though, I can activate HDR which is 10bit per channel, isn't?
I believe HDR uses 10bpc output pixel depth. Millions and Billions of colors is framebuffer pixel depth and may not be related to output pixel depth. I believe M1 Macs don't have a Millions and Billions option - all the modes that you can get from the CG* API's (CGSGetDisplayModeDescriptionOfLength, CGDisplayCopyAllDisplayModes, and CGDisplayAvailableModes) have a single bpc value but on Intel Macs there's usually one mode with 8bpc (Millions) and another with 10bpc (Billions).

The IO Registry of M1 Macs has a list of modes (TimingElements) and a list of pixel types (ColorElements) but there's no way to tie a CGDisplay to one of those and there's no mapping from those to a CGDisplayMode. We can get the current TimingElement for all the displays but we don't know how to get the current ColorElement.

I don't know if there's new APIs that can be used to solve all those problems.

In the next test, I have used a Belkin USB-C to Displayport cable but with the same output, only 8bit per channel.
Is there something on the display that shows 8bpc? I would like to see a picture of that. Some displays may show RGB vs YCbCr. And some may show 4:4:4 vs 4:2:0 or 4:2:2. But I don't recall seeing a display that showed the bits per channel.

Despite looking for a available Thunderbolt 4 docks with a native DisplayPort (most are not in stock where I live), I am looking for a quick solution like an adapter / cable which supports the full 30bit output.
DisplayPort and USB-C should have the same capabilities. The BenQ is only 3840x2160 60Hz, so a DisplayPort 1.2 cable should be sufficient for 10bpc. Get a USB-C to DisplayPort cable. Connect it directly to the M1 Mac or a Thunderbolt 3 dock or a Thunderbolt 4 hub or dock.
You can also use a USB-C to DisplayPort adapter. Or a Thunderbolt 3 to Dual DisplayPort Adapter.
The BenQ has a USB-C input - check the manual to determine if you can get 4 lanes of DisplayPort from that (USB upstream would then be limited to USB 2.0 unless you can switch USB Upstream to the Type B port instead of the Type C port).
 

TheRiddler1982

macrumors member
Original poster
Jun 10, 2015
48
5
Hi,

sorry for keeping you waiting so long. I had other issues with my monitor as it was not recognized after going to sleep. I had enough and updated to the latest developer beta and the sleep issues are gone. Further, since the latest update, SwitchResX now shows billions of color instead of millions. So, the update changed something under the hood relating to the 30bit output.

So, M1 can be read out by an API to show the used colors :). Still, Photoshop has its checkbox greyed out at 30bit, but is activated, though. Using the test file provided here I don't see banding in Photoshop, so 30bit are indeed working here, too. In contrast, Affinity Photo does render in 8bit.

Here is a video showing the billions of colors (I was not able to delay screenshot timing to get into the context menu :)).


So, it is a happy end after all. I get 30bit output with USB-C only and USB-C to DisplayPort.

Thanks for all your insights into the Swift APIs and knowledge!
 

joevt

macrumors 604
Jun 21, 2012
6,963
4,259
sorry for keeping you waiting so long. I had other issues with my monitor as it was not recognized after going to sleep. I had enough and updated to the latest developer beta and the sleep issues are gone. Further, since the latest update, SwitchResX now shows billions of color instead of millions. So, the update changed something under the hood relating to the 30bit output.

So, M1 can be read out by an API to show the used colors :). Still, Photoshop has its checkbox greyed out at 30bit, but is activated, though. Using the test file provided here I don't see banding in Photoshop, so 30bit are indeed working here, too. In contrast, Affinity Photo does render in 8bit.

Here is a video showing the billions of colors (I was not able to delay screenshot timing to get into the context menu :)).


So, it is a happy end after all. I get 30bit output with USB-C only and USB-C to DisplayPort.

Thanks for all your insights into the Swift APIs and knowledge!
Like I said before, M1 Macs only have one option for the modes returned by the CG* APIs which your video shows as Billions of colors. So in your menu you don't see a Millions of colors option. This is probably a framebuffer pixel depth. There's still no way to determine output pixel depth on an M1 Mac. A lack of gradient might be due to dithering but I suppose macOS will choose 10bpc if it can. The problem is when it can't and it doesn't tell you it can't.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.