I disabled dithering on Apple silicon + Introducing Stillcolor macOS M1/M2/M3
- Edited
Blooey the fun part is that the only time Apple ever mentions VESA is in the marketing for the Pro Display XDR VESA Mount. Otherwise I don't think they particularly care about complying with VESA. They spec their displays to their own standards with their own marketing lingo.
waydabber I tried changing the refresh rate while in "2-lane eDP mode", and the image corrected itself back to full bandwidth. So that apparently doesn't work. Perhaps if we can patch _IOAVVideoColorBitDepth to always return 1 (IOKit's enum for 8bpc) and patch _IOAVVideoColorBitDepthScalar to return 8 for 2 (enum for 10bpc), these might force anything else that uses these internally to use 8 bits.
Re. LUT, well the TCON's logic can be as simple as if 24-bit signal detected -> skip FRC module
. Additionally, the LUT can be as simple as an array of <= 1024 0/1 values for each RGB channel to decide whether or not to dither on a particular sub-pixel value. Or it could be a type of bit template. I think we'll find out soon, and it will give us a hint about how these particular FRC algos works. Did you have success rounding the pixel buffer's 10-bit colors to 8 bits?
Edit: if the FRC algo has a spatial dithering step that works on the average of values of a cluster of pixels, let's say on a 4x4 square, then I don't think rounding down 10-bit colors to 8 bits (inside a 10-bit container) will help much, unless you have large areas of single colors that don't change frame to frame.
I 100% agree about touching the TCON. This is why I don't want to deal with EEPROM. Risk of bricking the display is very real.
- Edited
This might not be adding much useful information to the topic at hand, but I thought I would experiment by overriding EDIDs to report 6-bit color depth instead of 8, and see what it would do. This was on my older Mac Pro 5,1 Intel system, macOS High Sierra, GTX 1080 FE, NVIDIA web drivers, and two 1080p 6-bit+FRC monitors (an unusual setup, so I'm unsure how far to extrapolate this).
There was definitely a difference, and not in a good way. The instability of the picture was perceptibly worse, and I could almost consciously see the dithering/flickering in real-time. Looking at the gradient image by @Blooey, the differences between 6, 7, and 8-bit (and arguably higher) were still very apparent. Furthermore, SwitchResX still reported millions of colors for both displays, and the System Information app still reported 24-bit color (ARGB8888) for both displays. Poking around in the platform SDK headers for CoreGraphics, it appeared that the only options may be ARGB8888, ARGB2101010, and two variants of YCbCr 4:2:0. So, we may be unable to reduce the base framebuffer depth below 8-bit. However, if we find a method to disable the temporal dithering on Intel macOS, that would still be huge.
One interesting thing was that on the lock screen, the color depth was visibly reduced, but only on one of the screens (right side):
macsforme edids are tied to serial number of the display. In some cases monitors have the same serial and it turns into a giant mess with monitor placement. I've done this previously as well. But I never tried forcing a super slow refresh rate. Might be interesting. A bit harder to figure out the right way to do that with edids as timings are somewhat complex, but if you're up for it just search for edid timing calculator or something. There are other interesting things related to timings as well.
- Edited
Donux is that a Touch Bar model?
Going back to this post by @DisplaysShouldNotBeTVs
DisplaysShouldNotBeTVs Do you think that the M1 MacBook Air, M1 MBP 13" with Touch Bar and M2 MBP 13" with Touch Bar (the lower-end ones that don't have MagSafe) could potentially be a way around this?
These 3 specific laptops are the only Apple Silicon laptops that are only marketed to display at "millions of colors", unlike the M2/M3 Air and all of the 14"/16" Pros with no Touch Bar, which all include "billions of colors" in their spec sheet.
Can anyone check which TCON model these use?
ioreg -lw0 | grep TCON
There are a couple of possibilities here for those specific low-end models with "millions of colors":
Native 8-bit panels that receive an 8/10-bit input signal to the TCON
6-bit+FRC panels that receive an 8/10-bit signal to the TCON
We can make an informed guess based on the capabilities of the TCON.
It's just that now I don't see a reality where any Apple product uses a TCON that doesn't have FRC built in. Would love to be proven wrong. TCON FRC is so cheap and easy.
- Edited
Macbook Pro 15' Intel 2018
MacOS Big Sur 11.7.2
| | | | | "CFG_USE_TCON" = Yes
| | | | | "ATY,Tolten" = {"aty_config"={"CFG_USE_CP2"=Yes,"CFG_USE_SCANOUT"=Yes,"CFG_NVV"=2,"CFG_PTPL2_TBL"=<280000002700000026000000250000002400000023000000210000001f0000001d0000001b000000190000001700000015000000130000001100000006000000>,"CFG_USE_AGDC"=Yes,"CFG_USETCON"=Yes,"CFG_DIAG_LED"=2},"aty_properties"={"MM_EnableHEVCEncode"=No,"PP_SclkDpmTuning4"=2621696,"PP_SclkDpmTuning3"=1181184,"MM_EnableHEVCDecode"=No,"PP_MclkDpmTuning1"=575488,"PP_SclkDpmTuning2"=2621696,"PP_MclkDpmTuning0"=2319366,"PP_SclkDpmTuning7"=2621952,"PP_SclkDpmTuning1"=2621696,"PP_SclkDpmTuning6"=2621696,"PP_EnableLoadFalconSmcFirmware"=1,"PP_Falcon_QuickTransition_Enable"=1,"PP_SclkDpmTuning0"=2647040,"PP_SclkDpmTuning5"=2621696}}
| | | | | "ATY,Palena" = {"aty_config"={"CFG_USE_TCON"=Yes,"CFG_USE_SCANOUT"=Yes,"CFG_USE_FBC"=Yes,"CFG_PTPL2_TBL"=<2800000027000000260000002500000024000000230000002200000021000000200000001e0000001a0000001600000013000000100000000d0000000a000000>,"CFG_NVV"=2,"CFG_USE_CP2"=Yes},"aty_properties"={"MM_EnableHEVCEncode"=No,"PP_SclkDpmTuning4"=3932416,"PP_SclkDpmTuning3"=3932416,"MM_EnableHEVCDecode"=No,"PP_MclkDpmTuning1"=527360,"PP_DisableClockStretcher"=1,"PP_SclkDpmTuning2"=3932416,"PP_MclkDpmTuning0"=3957766,"PP_SclkDpmTuning7"=2622464,"PP_SclkDpmTuning1"=5900302,"PP_SclkDpmTuning6"=2623488,"PP_EnableLoadFalconSmcFirmware"=1,"PP_Falcon_QuickTransition_Enable"=1,"PP_SclkDpmTuning0"=5923858,"PP_SclkDpmTuning5"=2627590}}
| | | | | "ATY,Yelcho" = {"aty_config"={"CFG_USE_CP2"=Yes,"CFG_USE_SCANOUT"=Yes,"CFG_USE_TCON"=Yes},"aty_properties"={"PP_Falcon_QuickTransition_Enable"=1,"PP_EnableLoadFalconSmcFirmware"=1}}
| | | | | "aty_config" = {"CFG_USE_PSR"=No,"CFG_NO_HDCP"=No,"CFG_USE_LPT"=No,"CFG_INT_SSPC"=25,"CFG_USE_CPSTATUS"=Yes,"CFG_GEN_FLAGS"=0,"CFG_NO_SLS"=No,"CFG_USE_FBC"=No,"CFG_NO_MST"=No,"CFG_FORCE_MAX_DPS"=No,"CFG_NO_PP"=No,"CFG_USE_AGDC"=Yes,"CFG_USE_TCON"=Yes,"CFG_UFL_CHK"=No,"CFG_USE_DPT"=Yes,"CFG_PULSE_INT"=Yes,"CFG_USE_HDMI20"=Yes,"CFG_USE_STUTTER"=Yes,"CFG_NO_MSI"=No,"CFG_UFL_STP"=No,"CFG_USE_FEDS"=Yes,"CFG_FB_LIMIT"=0,"CFG_TRANS_WSRV"=Yes,"CFG_USE_SCANOUT"=Yes,"CFG_PAA"=0,"DALUseUrgencyWaterMarkOffset"=0,"CFG_USE_FBWRKLP"=Yes,"DALReadDelayStutterOff"=4,"CFG_NODM"=Yes,"CFG_USE_SRRB"=No,"CFG_FORCEMAXDPM"=No,"CFG_CAA"=0,"CFG_APER_MODE"=1}
| | | | | "ATY,Forrahue" = {"aty_config"={"CFG_USE_CP2"=Yes,"CFG_USE_SCANOUT"=Yes,"CFG_TPS1S"=Yes,"CFG_NVV"=2,"CFG_PTPL2_TBL"=<820000007c00000076000000700000006a000000640000005e00000058000000520000004c00000046000000400000003a000000340000002e00000028000000>,"CFG_USE_AGDC"=Yes,"CFG_USE_TCON"=Yes},"aty_properties"={"PP_DisableMCDownLoadFeature"=1,"PP_Falcon_QuickTransition_Enable"=1,"PP_EnableLoadFalconSmcFirmware"=1}}
| | | | | "ATY,Sinu" = {"aty_config"={"CFG_USE_CP2"=Yes,"CFG_USE_SCANOUT"=Yes,"CFG_NVV"=2,"CFG_PTPL2_TBL"=<820000007e0000007a00000076000000720000006e000000660000005e000000560000004e000000460000003e000000360000002e000000260000000a000000>,"CFG_USE_AGDC"=Yes,"CFG_USE_TCON"=Yes,"CFG_DIAG_LED"=2},"aty_properties"={"PP_DisableMCDownLoadFeature"=1,"MM_EnableHEVCEncode"=No,"PP_SclkDpmTuning4"=1181184,"PP_SclkDpmTuning3"=787456,"MM_EnableHEVCDecode"=No,"PP_MclkDpmTuning1"=527360,"PP_SclkDpmTuning2"=787456,"PP_MclkDpmTuning0"=2319366,"PP_SclkDpmTuning7"=2621952,"PP_SclkDpmTuning1"=787456,"PP_SclkDpmTuning6"=2621696,"PP_EnableLoadFalconSmcFirmware"=1,"PP_Falcon_QuickTransition_Enable"=1,"PP_SclkDpmTuning0"=1008640,"PP_SclkDpmTuning5"=2621696}}
| | | | | "ATY,Berbice" = {"aty_config"={"CFG_USE_CP2"=Yes,"CFG_USE_SCANOUT"=No,"CFG_NVV"=2,"CFG_PTPL2_TBL"=<230000002200000021000000200000001f0000001e0000001d0000001c0000001b0000001a000000190000001700000015000000130000001000000006000000>,"CFG_USE_HDMI20"=No,"CFG_USE_TCON"=No,"CFG_USE_FBC"=Yes},"aty_properties"={"MM_EnableHEVCEncode"=No,"PP_SclkDpmTuning4"=1967622,"PP_SclkDpmTuning3"=5898240,"MM_EnableHEVCDecode"=No,"PP_MclkDpmTuning1"=527360,"PP_DisableClockStretcher"=1,"PP_SclkDpmTuning2"=5898240,"PP_MclkDpmTuning0"=3957766,"PP_SclkDpmTuning7"=1968128,"PP_SclkDpmTuning1"=5900302,"PP_SclkDpmTuning6"=1968128,"PP_EnableLoadFalconSmcFirmware"=1,"PP_Falcon_QuickTransition_Enable"=1,"PP_SclkDpmTuning0"=5923858,"PP_SclkDpmTuning5"=1968128}}
Macbook Pro 14' M3
MacOS: Sonoma 14.1.2
- Edited
Ok here is another crazy idea
What if we try to replace the T-con with a different model T-con:
https://www.ifixit.com/Answers/View/627705/Can+I+repair+T-CON+Board
- Edited
Unfortunately, those instructions for Intel Macs don't work.
I get:
Error setting variable - 'boot-args': (iokit/common) not permitted.
I'm wondering if Stillcolor would work there instead.
P.S. Read elsewhere that disabling system integrity protection can do it, so I shouldn't need Stillcolor. But 'll leave this up in case someone else has the same problem.
- Edited
Ananiujitha for dither=0 you have to do it after booting into recovery mode terminal
although dither=0 has varying effects on different Intel macs…
here's my experience with it:
- 2015 MacBook 12-inch (Mojave 10.14.6, Intel HD): Best effect, it seems to have fully and successfully disabled dithering, internal screen feels still now. This screen was already pretty usable compared to other Macs, but still used to have some text shimmer — but now, it's noticeably better and the most comfortable it's ever been.
- 2015 Retina MacBook Pro 15-inch (Monterey 12.6.8, Intel Iris integrated graphics mode): It seemed to disable additional dithering on color profiles and gamma table adjustments (adjusting Software Brightness in BetterDisplay now introduces banding, which it didn't before) but didn't seem to actually fully disable it. Still looks like solid color backgrounds are moving and text is shimmering. Disappointing
- 2018 Retina MacBook Air 13-inch (Mojave 10.14.6, Intel UHD): Did not work at ALL, the log says "dither disabled" but there is no banding even when changing Software Brightness implying that dithering wasn't actually disabled (because it's still obviously showing in-between colors more precisely than the screen is capable of, even when trying to reduce color range by lowering color table brightness.) Screen feels exactly the same with an extreme amount of shimmer
(However, the 2018 Air screen can actually become fully usable with Windows and older display drivers, implying that this is still a problem at the software level, not the screen just being a low quality panel. But unfortunately, dither=0 does not make it any better while on macOS, even on an old version like Mojave)
Thanks.
log show --predicate "processID == 0" | grep Dither
shows that neither setting dither=0 nor enableDither=0 will turn off dithering. So Stillcolor support for Intel Macs may still help.