aiaf

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

https://pastebin.com/raw/S3KdxmdV

  • aiaf replied to this.

    madmozg thanks for the additional data point. Unfortunately this particular test only works notebook M-series Macs, and possibly not all of them.

      aiaf I've posted for M3 as well, will post for M1 later.

      aiaf Sorry I misunderstood. Shouldn't post info for my model 🙂 Was thinking that you are collecting data from all current models.

      • aiaf replied to this.

        Sentiny no not at all, it's always good to have additional data points. We just haven't seen any reports on the bare M1 yet.

          aiaf Sentiny mentioned the M2 Air model of which there is no touch bar version.

          Hunter20 Intel arc a770 LE uses a TCON chip and supposedly does not dither on default settings. Unsure what tcon model it is..

          ryans

          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.

            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)

              DisplaysShouldNotBeTVs

              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.

              @aiaf Did you explore /dyld-cache-arm64e/usr/lib/updaters/libAppleTCONUpdater.dylib?

              I'm way out of my league here as I don't have any swift / c background, so I don't know how easy it is to work out and use functions from dylib stuff. Seems to be quite a few functions to read and set options on AppleParadeDP855TCON. I guess in theory it should be configurable where some things can be turned off for debugging, without having to reflash the entire thing?

              • aiaf replied to this.

                Blooey In case it's helpful, I took a couple of pictures this morning to show the effect of Stillcolor on my MBA M2 15-inch using your test pattern: https://imgur.com/a/uIge5kx

                (Ignore the haloing around the white text… that's a demosaicing artifact from my camera.)

                Given how strong the banding effect is at 9-bit, 10-bit, etc. with dither OFF, I think it's fairly likely that Stillcolor turns off both GPU and TCON dither (that's assuming there is normally any TCON dither in addition to GPU dither, which I'm not sure there is).

                There is a well-known bug in Apple Silicon power management that would probably allow us to investigate whether there is normally any TCON dither; I'll make a post about that in a bit.

                  async just last night actually! I came across it and and an AppleDisplayTCONControl private framework! Absolute treasure trove!

                  libAppleTCONUpdater.dylib

                  This seems to be the kernel code responsible for updating the TCON's firmware either through system software updates or perhaps using the Apple System Configurator. In theory if Apple wanted to turn off TCON dithering they can do so overnight via a software update.

                  It uses IOAVDisplayMemoryRead and IOAVDisplayMemoryWrite heavily. If the TCON firmware is not cryptographically locked down we should in theory be able to reverse engineer this code and write to the device's memory. But we're gonna require Asahi-level reverse engineering chops.

                  There's functionally different code for handling DP835 (possibly the base M1 TCON model), and DP855.

                  AppleDisplayTCONControl

                  At first glance, this private framework is less write-heavy and seems more about dumping data, generating reports and diagnostics. But we have our first confirmed hit of a dithering LUT!

                  "TCON_LOAD_DITHERLUT"

                  A debugging string probably used right before loading this particular LUT. There are references to many other LUTs too:

                  PG LUT, SCALER LUT, DEGAMMA LUT, ENGAMMA LUT, WPC LUT, PRC LUT, IBC LUT, TRINITY LUT, CABAL LUT, BL CAL LUT, BRIGHTNESS LUT, KSF COMP LUT

                  It appears that several of the IOMobileFramebuffer properties we've seen affect the TCON directly. Most notably PCC* and APT* (Apple TCON / Apple Parade TCON?) props.

                  There are also references to EDID and DisplayPort stuff.

                  I'm gonna spend some time trying to extract these LUTs and see if this helps us progress.

                    dev