Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
I presume you're not referring to standard displays though, because I'm currently running 2x4k's through a single Thunderbolt connection via this guy to my M1 Max.
Different Apple Silicon Macs support different number of displays:
https://forums.macrumors.com/threads/multiple-displays.2409806/post-32694660

Being a hub, I wondered if it was passive enough that it would "just work" - or that the implementers *think* it would and just never tried it (assuming that everything specified will magically be fine is not unheard of in marketing). But I could be maligning them. I'd thought asymmetric mode was older (I remember it being announced as a USB4 feature before I got my M1Max MBP, because I asked Apple whether they supported it - they didn't...) but it may have been in a press release before it was fully standardised.
Hubs are not so passive. They have to look at the packets coming in and decide where they go. Passive would be like a coax splitter for connecting two TVs to the same cable output.
A USB4 v2 or Thunderbolt 5 hub would not be able to get the 80 Gbps asymmetric mode from existing Macs which only support 40 Gbps.

That's why I was confused - the MBP display info screen swore blind it was a 10-bit panel (like the two UltraFine 4Ks, which are collectively using the same bandwidth over two links). I initially wondered if the Mac was using a 10-bit internal framebuffer and dithering it to 8-bit in the display controller (I tried a screen grab to prove it, but of course that was 8-bit PNG regardless...) but if that was the solution, it wouldn't explain why the internal display was only 8-bit - this on my Intel/AMD MBP.

The OSD reported the refresh rate and resolution; I've just fired up my old computer to check, and the OSD says "input color format RGB" (7680x4320, 30Hz). SwitchResX reports billions of colours. (I think the MacOS UI used to as well, but updates made it harder to find.) I'd be fine to switch between the 24 and 30Hz depending on whether I want higher bit depth (I did set up some gradients to see if I could tell on the display, but it's a mild pain to make out); 30Hz and 30bpp was a nice bonus. It might just be over driving the clock and both ends happen to work?
macOS only reports the color depth of the framebuffer. To see the color depth being output to the display, you need to get that info from the onscreen menu of the display or from a utility like AllRez or AGDCDiagnose. I don't know how to get that info for Apple Silicon Macs though; ioreg will give a list of color modes for each display mode but it doesn't show which color mode is currently being used.

Too bad most displays don't show current pixel depth.

I don't know if dithering happens when outputting a 10bpc framebuffer to a 8bpc display.
I know dithering in the framebuffer can happen if the framebuffer is 8bpc but this is up to the app (or API) doing the drawing into the framebuffer.

I actually didn't realise the UltraFine 5K was a dual tile display - I assumed it was just using HBR3, since that should be enough bandwidth for 60Hz 30bpp.
LG UltraFine 5K works from Macs that don't support HBR3. It always counted as two displays on Intel Macs when doing 5K60 because it uses two HBR2 x4 connections. It doesn't have an HBR3 mode. It's like the Dell UP2715K except the LG UltraFine 5K uses Thunderbolt to connect the two DisplayPort connections.

Apple Silicon Macs are weird because they treat dual tile displays as one display. An M1 Mac supports one display from Thunderbolt but can have two DisplayPort connections where the second DisplayPort connection can only be used by the second tile of a dual tile display. I wonder if Asahi linux could somehow create a second display from the second DisplayPort connection? It might be limited to being equal in size/timing of the display connected to the first DisplayPort connection.

The 6K displays would still need splitting, but I assumed they were special cased. Somehow I'd missed that the M1 could drive the 6K display, or forgotten that I thought it was odd - I could believe it being easier on the display controller if it's offering paired pixels across two channels, similar to the old T220 pixel interleaving.
The XDR supports:
- dual tile 6K60 for GPUs that support HBR3 but not DSC. This is the only mode of the XDR that uses HBR3.
- single tile 6K60 for GPUs like Navi, RTX, Apple Silicon that support DSC.
- dual tile 5K60 for GPUs that don't support DSC.
- single tile 5K60 for GPUs that support DSC. Also, maybe 6bpc which doesn't require DSC. macOS doesn't support 6bpc.
- single tile 4K60, 1440p, etc.

I assume at some point one runs into the bandwidth limit of the interface. What Apple are prepared to admit they support on their web site and what the hardware can actually do are very different things, as this thread shows. Unfortunately what they "support" is what the customer-facing people are prepared to talk about, with nothing more specific. Thank you, this forum!
The bandwidth limit of the interface is HBR3 x4 for each port. External factors such as cables, adapters, hubs, and docks can reduce that limit. Different GPUs have different number of ports. However, a GPU having n ports capable of HBR3 x4 bandwidth doesn't necessarily mean it can use all of them at full bandwidth even after ignoring external factors. There are internal factors that limit the bandwidth of a port. For example, a certain older Intel or Nvidia GPU supports HBR2 x4 but can't do more than 540 MHz of pixels even though it should allow 720MHz (for 8bpc) or 576MHz (for 10bpc).

A GPU can only do so much work. Compression for DSC? Scaling for scaled modes? Converting pixels to output? Some of these processes might reduce the number of displays that can be connected. I don't know which.

If a GPU has a clock of x MHz, but needs to output pixels > x MHz, then it has to do a parallel task using a second something. There's a limited number of these somethings.

DSC splits a framebuffer into columns called slices. A display tells the GPU how many slices it supports, how wide they can be, and how many pixels/second each slice can accept. I suppose each slice is compressed separately and could be a separate task done in parallel. A GPU supports a certain number of slices and slice widths. The intersection of the GPU and display capabilities determines the display modes that can be used. This has been true since analog CRTs.
 
  • Like
Reactions: hardwickj and HDFan
Unlikely so, but wondering if anyone has happened to drive a UP3218K with a W5700 - just picked up a 16c/1tb/256gb 2019 MP w/a 5700 and have been eyeing a few of these displays on Ebay since they seem to have depreciated quite a bit. Seems like it would make quite a nice single-display solution. The machine will likely be used to run Linux much of the time as well, via an RTX 3090, but will spend some time in Mac OS as well and would be nice if that GPU could drive the display reasonably well.
 
  • Like
Reactions: mattspace
Hi all!
Writing here because it seems like this is the most complete info on getting the Dell UP3218K working in macOS at 8k60. Has anyone tried using this monitor with an M3 based machine (and not an M3 Pro or Max)? Specifically, the base MacBook Pro or MacBook Air? These machines now support two displays with the lid closed (one at 6k60 and one at 5k60). I assume the lower resolution limit for the second screen has two do with only being able to do one monitor with display stream compression.

However, 6k60 and 5k60 at the same time suggest that there is bandwidth to drive the Dell UP3218K from both ports on the M3 silicon with the lid closed since this monitor does not use display stream compression.

If anyone has an M3 base Mac and the UP3218K running the latest macOS I would love to know the answer!

@joevt , any insight into which models would trigger the check to allow use of the UP3218K at 8k60?
 
  • Like
Reactions: SymeonArgyrus
Hi all!
Writing here because it seems like this is the most complete info on getting the Dell UP3218K working in macOS at 8k60. Has anyone tried using this monitor with an M3 based machine (and not an M3 Pro or Max)? Specifically, the base MacBook Pro or MacBook Air? These machines now support two displays with the lid closed (one at 6k60 and one at 5k60). I assume the lower resolution limit for the second screen has two do with only being able to do one monitor with display stream compression.

However, 6k60 and 5k60 at the same time suggest that there is bandwidth to drive the Dell UP3218K from both ports on the M3 silicon with the lid closed since this monitor does not use display stream compression.

If anyone has an M3 base Mac and the UP3218K running the latest macOS I would love to know the answer!

@joevt , any insight into which models would trigger the check to allow use of the UP3218K at 8k60?
I don't know which models support which modes. Some Apple Silicon Macs support the UP3218K
 
It was in e-mails. My forks are on GitHub.

Build it like this (change MyProjects to wherever you like):
Code:
MyProjects="/Volumes/Work/Programming/KextProjects"
mkdir -p ${MyProjects}/MacKernelSDK
mkdir -p ${MyProjects}/Lilu
mkdir -p ${MyProjects}/WhateverGreen

cd ${MyProjects}/MacKernelSDK
git clone https://github.com/joevt/MacKernelSDK joevt-MacKernelSDK

cd ${MyProjects}/Lilu
git clone https://github.com/joevt/Lilu.git joevt-Lilu
cd ${MyProjects}/Lilu/joevt-Lilu
ln -s ${MyProjects}/MacKernelSDK/joevt-MacKernelSDK MacKernelSDK
# use Xcode to build Lilu

cd ${MyProjects}/WhateverGreen
git clone https://github.com/joevt/WhateverGreen.git joevt-WhateverGreen
ln -s ${MyProjects}/MacKernelSDK/joevt-MacKernelSDK MacKernelSDK
ln -s ${MyProjects}/Lilu/joevt-Lilu/DerivedData/Lilu/Build/Products/Debug/Lilu.kext Lilu.kext
# use Xcode to build WhateverGreen

Install OCLP. It has a “Allow native models” setting you can enable for Macs that support Ventura.
Replace OCLP's Lilu.kext and WhateverGreen.kext with the ones you just built.

boot-args in the config plist should include:
-liludbgall -liludump=240 -lilubetaall dpd=2

dpd=2 does the UP3218K patches.
liludump=240 will cause a Lilu log file to be saved at /var/log four minutes after boot (sort by date modified in descending order).
The log file will show how many of the userland patches were made.

If it works, then maybe you can try removing liludump and liludbgall from boot-args to make booting faster.
@joevt I just cloned and built the kext then got a panic and rebooted itself. attached are the log files from OC
any help would be greatly appreciated.
 

Attachments

  • opencore-2024-08-21-004810.txt
    256 KB · Views: 62
  • opencore-2024-08-21-004259.txt
    256 KB · Views: 47
  • opencore-2024-08-21-004334.txt
    256 KB · Views: 99
Last edited:
  • Like
Reactions: dabotsonline
@joevt I just cloned and built the kext then got a panic and rebooted itself. attached are the log files from OC
any help would be greatly appreciated.
The Open Core logs don't include any panic info.

Are you able to boot into macOS directly (bypass OCLP)?
What Mac are you using?
What version of macOS are you using?
What version of OCLP?
What other kexts does OCLP have?
Can you add -v to boot-args?
 
The Open Core logs don't include any panic info.

Are you able to boot into macOS directly (bypass OCLP)?
What Mac are you using?
What version of macOS are you using?
What version of OCLP?
What other kexts does OCLP have?
Can you add -v to boot-args?
I could boot into macOS with normal Lilu and WhateverGreen but not with custom builds.
I am on a Hackintosh.
I am using macOS Ventura 13.6.9
I am using OC 1.0.1
I just found that those logs are from preboot/picker. I will try to capture logs from the boot process.
The crash was coming from Lilu.
I was able to boot normally after replacing just Lilu with the normal version.

BTW, do you know what is the second thing Ventura is looking? MacPro7,1 can easily be done on a Hackintosh.
I did change the Model Identifier to MacPro7,1 before, but still got:
Tiling for display mfg: 0x10ac product: 0x4147 is restricted on this platform

Any ideas or pointers at this point?
I will try to pin down where Lilu caused the crash.
Also there is a DEBUG.zip file in Build/Product/Debug folder. should I use the kext from that file?
Do you know how to capture the -v output during boot?

GOT IT!!!
this is where it stopped and rebooted. see attachment.

IMG_20240822_160525049.jpg


I found the Kernel panic log, see attachment.
 

Attachments

  • Kernel-2024-08-22-161059.panic.txt
    6 KB · Views: 49
Last edited:
  • Like
Reactions: dabotsonline
I could boot into macOS with normal Lilu and WhateverGreen but not with custom builds.
I am on a Hackintosh.
I am using macOS Ventura 13.6.9
I am using OC 1.0.1
I just found that those logs are from preboot/picker. I will try to capture logs from the boot process.
The crash was coming from Lilu.
I was able to boot normally after replacing just Lilu with the normal version.

BTW, do you know what is the second thing Ventura is looking? MacPro7,1 can easily be done on a Hackintosh.
I did change the Model Identifier to MacPro7,1 before, but still got:
Tiling for display mfg: 0x10ac product: 0x4147 is restricted on this platform

Any ideas or pointers at this point?
I will try to pin down where Lilu caused the crash.
Also there is a DEBUG.zip file in Build/Product/Debug folder. should I use the kext from that file?
Do you know how to capture the -v output during boot?

GOT IT!!!
this is where it stopped and rebooted. see attachment.
Since you are using Hackintosh, you probably have more Lilu kexts than a real Mac.
All Lilu based kexts need to be recompiled with the same Lilu.

Just like for WhateverGreen: you need to clone the project, add a symlink to the Lilu.kext build product and also the MacKernelSDK, build in Xcode, copy the build product to Open Core kexts folder.

To enable tiling for 10ac:4147 (UP3218K), displaypolicyd checks for two things:
1) the first thing is the board ID which needs to be Mac-27ad2f918ae68f61. (MacPro7,1)
2) I don't know what the second thing is. It needs to be > 0x211.
The Whatevergreen patch removes the restriction in displaypolicyd.
Code:
temp_18 = *(*(r13 + 0x5d0) + 0x28) == 0x27ad2f918ae68f61 && *(r13 + 0x608) > 0x211 || r12 != 0x10ac || r8 != 0x4147;
if (!temp_18) {
		(*(*var_90 + 0x38))(var_90, 0x1000000000000000, "NOTICE: Tiling for display mfg: 0x%x product: 0x%x is restricted on this platform \n", 0x10ac, 0x4147);
		var_7C = 0x10ac;
		var_7A = 0x4147;
		temp_14 = true;
}
 

Attachments

  • LiluWhateverGreen.worksheet.zip
    12.6 KB · Views: 60
Since you are using Hackintosh, you probably have more Lilu kexts than a real Mac.
All Lilu based kexts need to be recompiled with the same Lilu.

Just like for WhateverGreen: you need to clone the project, add a symlink to the Lilu.kext build product and also the MacKernelSDK, build in Xcode, copy the build product to Open Core kexts folder.

To enable tiling for 10ac:4147 (UP3218K), displaypolicyd checks for two things:
1) the first thing is the board ID which needs to be Mac-27ad2f918ae68f61. (MacPro7,1)
2) I don't know what the second thing is. It needs to be > 0x211.
The Whatevergreen patch removes the restriction in displaypolicyd.
Code:
temp_18 = *(*(r13 + 0x5d0) + 0x28) == 0x27ad2f918ae68f61 && *(r13 + 0x608) > 0x211 || r12 != 0x10ac || r8 != 0x4147;
if (!temp_18) {
        (*(*var_90 + 0x38))(var_90, 0x1000000000000000, "NOTICE: Tiling for display mfg: 0x%x product: 0x%x is restricted on this platform \n", 0x10ac, 0x4147);
        var_7C = 0x10ac;
        var_7A = 0x4147;
        temp_14 = true;
}

OH BOY... That's lots of kexts to rebuild and find out which is Lilu based. =|

Screenshot 2024-08-23 at 9.23.06 PM.png


These are the ones I am using now.
 
  • Like
Reactions: dabotsonline
OH BOY... That's lots of kexts to rebuild and find out which is Lilu based. =|
Run a command to find the lilu-based kexts. Change "/Volumes/OPENCORE" to the mount point of the Open Core EFI volume.

Code:
cd /Volumes/OPENCORE/EFI/OC/Kexts
grep -l -R --include Info.plist --exclude "*/Lilu.kext*" Lilu . | perl -pE 's|./([^/]+).*|$1|'

Then compare that list with the list of enabled kexts from the Open Core config.plist file.

You only need to rebuild the enabled lilu-based kexts.
 
Run a command to find the lilu-based kexts. Change "/Volumes/OPENCORE" to the mount point of the Open Core EFI volume.

Code:
cd /Volumes/OPENCORE/EFI/OC/Kexts
grep -l -R --include Info.plist --exclude "*/Lilu.kext*" Lilu . | perl -pE 's|./([^/]+).*|$1|'

Then compare that list with the list of enabled kexts from the Open Core config.plist file.

You only need to rebuild the enabled lilu-based kexts.
Code:
grep -l -R --include Info.plist --exclude "*/Lilu.kext*" Lilu . | perl -pE 's|./([^/]+).*|$1|' | sort
AppleALC.kext
BlueToolFixup.kext
BrightnessKeys.kext
CPUFriend.kext
DebugEnhancer.kext
HibernationFixup.kext
IntelBTPatcher.kext
NVMeFix.kext
NoTouchID.kext
RealtekCardReaderFriend.kext
RestrictEvents.kext
SMCBatteryManager.kext
SMCDellSensors.kext
SMCLightSensor.kext
SMCProcessor.kext
SMCSuperIO.kext
VirtualSMC.kext
WhateverGreen.kext
This is a bit more reasonable.

If this is a user space patch, couldn't the patch be made into a standalone binary that runs at login?
 
  • Like
Reactions: dabotsonline
It is a user space patch of the displaypolicyd process.
I don't know what the state of the art is for user space patches for modern versions of macOS.
You can ask in hackintosh focused forums.
Thank you so much.
I will report back after rebuilding all the kexts.
 
If someone would have told me 3 years ago that the year 2025 will arrive and the only viable 8K monitor on the market will still only be the Dell UP3218K I would have laughed. Now I just cry.

At this point I have to assume all the manufacturers are waiting for ThunderBolt 5, if only because anyone buying such a monitor would probably expect it to also have a USB 3.2 hub, ethernet, etc, and TB4 simply can't give you that at 8K without DSC which I presume simply increases both cost and failure rates.

Just ranting because my Dell U2720 might be giving up the ghost, and there is no monitor on the market at the moment that looks at all desirable.

/rant
 
  • Like
Reactions: skeptech
If someone would have told me 3 years ago that the year 2025 will arrive and the only viable 8K monitor on the market will still only be the Dell UP3218K I would have laughed. Now I just cry.

At this point I have to assume all the manufacturers are waiting for ThunderBolt 5, if only because anyone buying such a monitor would probably expect it to also have a USB 3.2 hub, ethernet, etc, and TB4 simply can't give you that at 8K without DSC which I presume simply increases both cost and failure rates.

Just ranting because my Dell U2720 might be giving up the ghost, and there is no monitor on the market at the moment that looks at all desirable.

/rant

I'd be more likely to bet on them waiting for panel prices to come down, and for HDMI / Displayport of sufficient standards to be built out. 8k 60 10-bit DP / HDMI hardware is getting out there for switchboxes, adapters etc.

Thunderbolt is too flakey for a high end display, and until 8k becomes a consumer grade and consumer cost panel, I don't think you're gong to see it.

Thunderbolt is getting squeezed between USB display on the low end, and proper Displayport / HDMI on the high end.
 
The Asus ProArt Display PA32KCX should come soon as well as the 27-inch TCL 8K monitor.

The 31.5-inch LG LM315QU1-SSA2 is only $700 on Alibaba now, so I just think most display manufacturers don't care about 8K 😅
 
The following command may change DSC bpp from 12 to 8 which is necessary for some timings to allow 4:4:4 (such as 8K60 HDMI from DisplayPort 1.4)
sudo defaults write /Library/Preferences/com.apple.CoreDisplay dscTargetBPP -int 8

to undo the setting:
sudo defaults delete /Library/Preferences/com.apple.CoreDisplay dscTargetBPP

A restart may be required for the setting to take affect. You can test that be checking the output from the log show test I described before.

This was from looking at CoreDisplay code in Catalina 10.15.7. I haven't tested it. I haven't looked at the Monterey CoreDisplay code. I don't think M1 Macs use CoreDisplay code?

Actually, DisplayPort 1.4 should be able to do 8K60 HDMI with 10 bpp but the Samsung's EDID seems to indicate that its HDMI 2.1 inputs are limited to FRL 6Gbps (21.33 Gbps) when using DSC so 8bpp would be required for the HDMI mode on the Samsung.

But then again, @ZombiePhysicist used a non-HDMI timing of 2090MHz which should have worked with DSC @ 12bpp (but he hasn't gotten around to trying 2090MHz with an adapter that supports DSC). I don't know if the adapters recompress the DSC - if not, then 10bpp would be required for the 2090MHz mode on the Samsung.
Turns out that the dscTargetBPP preference can only be changed if the Apple Internal SIP bit is set, and that bit cannot be set by csrutil. I don't know how to change that bit.

My WhateverGreen fork (Intel Macs only) has a new patch to change dscTargetBPP (add a boot-arg dscbpp=8 - for Catalina and later). If you're using Open Core or OCLP, then you can replace Lilu and WhateverGreen with my versions. If you use any other Lilu based kexts then they need to be recompiled using the headers from my Lilu.kext. That patch, in conjunction with the CheckTimingWithRange patch (add a boot-arg -cdfon - For Tiger and later), can enable 4K240 and beyond on Intel Macs with a GPU that supports DSC (tested with 6800XT and Sequoia). DP to HDMI adapters are not tested.

I think Apple Silicon Macs automatically support DSC with values ≤ 12 (4K240 tested on M3 with Sequoia).
 
  • Like
Reactions: DrEGPU
It can only be changed if the Apple Internal SIP bit is set, which cannot be set by csrutil.
As from some Big Sur version, the bit gets stripped out, if present but not on Apple's servers, when the kernel is loaded.

You should still see it on older versions of Mac OS.
 
As from some Big Sur version, the bit gets stripped out, if present but not on Apple's servers, when the kernel is loaded.

You should still see it on older versions of Mac OS.
so maybe the dscTargetBPP option works in Catalina with the Apple Internal bit changed?
Code:
sudo defaults write /Library/Preferences/com.apple.CoreDisplay dscTargetBPP -int 8

To see if it works, the following command will show what value for BPP (times 16) is being used for DSC when you connect a display to a GPU that supports DSC:
Code:
sudo log stream --debug --style compact --predicate 'subsystem == "com.apple.CoreDisplay" and message contains "BPP"'

For example, if dscTargetBPP is set to 11, then you should see a bunch of these (176 = 11 bpp):
Code:
WindowServer[175:436] [com.apple.CoreDisplay:default] [INFO] - Attempting to install DSC mode variant with parameters: BPP = 176, Width = 480, Height = 1080

There are like 80 other CoreDisplay preferences that might be useful and don't require Apple Internal.
Here's some:
Code:
enableAdaptiveSync
forceAdaptiveSync
enableHDMIFRL
forceHDMIFRL
enableHDMIVRR
forceHDMIVRR
enable8kVIC
enableHDR10
In that list, only enableAdaptiveSync has default true.
Use -bool true or -bool false to change them.
I think FRL relates to HDMI 2.1 support.
8kVIC is for 8K on HDMI.
 
Maybe the option works in Catalina
It should if the issue is purely down to the presence of that Bit.

Alternatively, depending on whether OpenCore updates SIP with what it has in its config at a point after said stripping or not, it can potentially be used to reintroduce the Bit.

Only consideration with that, if it works, is that OTA updates will no longer be available as this is apparently tied to the presence of that Bit on affected Mac OS versions.




EDIT 1:
OpenCore CSR stuff apparently happens early and would therefore not offer a route to reintroduce stripped bits.

For finding stuff in future, this is what was added to xnu for Big Sur:

Seems it is tied to internal builds etc and not server connections



EDIT 2:
Might not be as I thought. There are two csr_bootstrap functions.

The one above the build condition flag linked below, I assume for ARM builds, is what I linked above but the one below the flag, applicable to "old style x86 builds", does not have the stripping thing:
https://github.com/apple-oss-distri...f54c2f6d4a15585/bsd/kern/kern_csr.c#L258-L264

Must be some other mechanism, possibly in the userspace apparently, in place if actually stripped on x86 at all.
 
Last edited:
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.