devilgrove Looks like OSX dithering has finally been solved

Wow, this is a dream. Nice job! Very nice solution, setting the NVRAM param 🙂. Have folks tried it and saw eye strain improvement!

Would be interesting to see if a similar solution exists for Apple silicon.

    ryans

    I've gained access to an M1 Air later this evening and have a 2020 Intel i5 MBP arriving Monday. Both were unusable previously so will be interesting to try this out.

    Will report back

    NewDwarf Doesn't work on my MacBook Pro 13 2018 (Intel Iris Plus Graphics 655), banding stays the same before and after the command line, and banding is worse on safe mode

    When entering the command log show --predicate "processID == 0" | grep Dither, it shows :

      0    kernel: (AppleIntelCFLGraphicsFramebuffer) [IGFB][LOG  ][DISPLAY   ] [Modeset] Dither is disabled with bpc 1

      NewDwarf

      Here's an example of banding/no banding :
      https://imgur.com/IDgqF5m

      If you look closely on the 3 screenshots below you'll see that banding is the same before (1) and after the command line (2), and that banding is worse on safe mode (3). If temporal dithering was disabled by the command line banding should be the same in (2) as it is in (3)

        insta42014 What is the technical background of that banding? How is it related to the temporal dithering?

        Technically, temporal dithering doesn't increase the number of sampling bits. So, dithering is just an illusion in your brain

        I would even say, that disabling of the temporal dithering will NOT remove visible gradients (banding in your term) as the display continues to produce 8-bit colours (regardless of the dithering). Moreover, by disabling the temporal dithering, we get rid of two virtual bits.

        Anyway, it is interesting to know who is the author of the banding theory and how he/she came to this conclusion…

          NewDwarf I think that we see the true capabilities of the screen when the system is in safe mode and the intel driver is not enabled. When this is the case the banding is horrible, due to the fact that dithering is disabled. In normal mode, without activated dithering algorithm, we should find the same horrible banding as in safe mode, but your solution does not worsen the banding which remains the same as before on normal mode (the gradients are blurry compared to those in safe mode).

          Using ditherig.exe in Windows to disable temporal dithering on Intel GPU introduce horrible banding (when it works and when the display isn't true 8-bit), showing the true capabilities of the screen.

          I also think that the MacBook Pro display is not even capable of displaying true 8-bit and relies on temporal dithering to show 8-bit and 10-bit.

            insta42014 Honestly the dithering.exe on windows produce a lot of banding but i think that nobody was able to turn a bad device in a good one only with that software..

            So if this command works also with the M1/M2 SOC i could buy a new MBP and try if it works also for me..

            Does dither=0 remove spatial dithering or just temporal dithering? ditherig has the option completely remove both ~ which might be the cause (pure speculation) of the terrible banding.

            insta42014

            My experience since 2012 was that some macbooks would give me eye strain / pain and others did not. Laptops with display panels made by LG or AUOptronics would give me eye strain / pain. While Samsung did not. I think the Samsung panels were 8 bit while the other brands panels were 6 bit and had temporal dithering enabled.

            Apple has removed the command that shows what vendors panel is in a laptop in newer versions of the OS.

            I suspect the reason Apple and other vendors refuse to talk about this issue is because in 2008 Apple was sued by some professional photographers because of temporal dithering. It was making it impossible for them to do their jobs.

            Has anyone tried using the NVRAM parameter on an external monitor (an existing usable one preferably)?

            Dithering is used to mask / hide the banding. If dithering is disabled on a system with a mismatched bit depth (8-bit gpu vs 6-bit display), we should see the banding. It is because the display is natively missing the colors needed to show a smooth gradient.

              caboy Dithering is used to hide banding in our brains only. Enabled dithering doesn't increase physical bit-ness of the screen/GPU.

              The MacBook Pro's have at least 8-bit GPU/displays. It is enough bit-bess don't notice gradients.

              My MacBook Pro 2020 has physical 10-bit screen.

                insta42014 The banding might be the same, but is the eyestrain the same?

                I mentioned this in another thread, but switching from Safe Mode to normal mode didn't change the banding for me, and the same goes for disabling dithering vs leaving it enabled. The only difference was the eyestrain.

                  NewDwarf same for my MacBook.

                  In general, newer MacBooks should never display 6-bit, and banding would technically only occur if native 6-bit color was being shown.

                  NewDwarf The MacBook Pro 2020 doesn't have a true 10-bit screen and if it was the case temporal dithering wouldn't be needed so you wouldn't have had eyestrain in the first place. As far as I know the only Apple display capable of true 10-bit is the Pro Display XDR which costs $5000 and Apple advertises it in their Technology Overview pdf: "P3 wide color gamut and true 10-bit color depth provide over a billion colors and incredibly smooth gradients".

                  NewDwarf

                  I think the question of weather this works or not may come down to the bit depth of the display panel. There is a command to show what vendors display panel is installed. I don't know if the bit depth information might be available also.

                  Can you run this command and give us the output please?

                  ioreg -lw0 | grep IODisplayEDID | sed "/[^<]*</s///" | xxd -p -r | strings -6

                  A prefix of LTH is Samsung, while LP is LG. All the Samsung displays I have seen are 8-bit. With LG, it may be a mix depending on how old the panel is. The older LG are 6-bit. I am not sure of the newer ones. Again, I don't know what other information may be hidden in the output of "ioreg" (such as bit depth).

                  The above command will not work on M1 macs. It may or may not work on Monterey on Intel.

                    NewDwarf

                    caboy Dithering is used to hide banding in our brains only. Enabled dithering doesn't increase bit-ness of the screen/GPU.

                    My understanding is that dithering is used to emulate missing colors when a GPU has more colors than a display panel can support. eg an 8-bit GPU with a 6-bit display panel. A rapid flicker between two colors to get an average of a missing color.

                    The banding appears on low bit depth displays (6-bit) because they don't have enough colors to show a smooth gradient. Dithering is used to mask / hide the banding.

                    It seems most vendors have enabled it by default in all devices this year.

                    Well i think every manufacterer is saying true 8bit screen, but the monitor may have a weakness at some level with e.g. gray and dithers is always on as a choice of the manufacterer. True 8bit could be just "nearly true" 8-bit.

                    caboy There is more advanced option to get the display information by parsing the EDID blob. Below is my display.

                    00 ff ff ff ff ff ff 00 06 10 3e a0 00 00 00 00

                    10 1b 01 04 b5 1d 12 78 02 0f 81 ae 52 43 b0 26

                    0d 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01

                    01 01 01 01 01 01 d9 65 00 50 a0 40 2e 60 08 20

                    08 08 1e b3 10 00 00 1a 00 00 00 fc 00 43 6f 6c

                    6f 72 20 4c 43 44 0a 20 20 20 00 00 00 10 00 00

                    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10

                    00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 72

                    70 12 79 03 00 7f 81 3f fa 10 00 03 01 18 0f 28

                    17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

                    4c 50 31 33 33 57 51 35 2d 53 4a 41 37 0a 20 00

                    44 43 4e 31 33 30 32 30 30 32 58 50 58 47 54 41

                    4b 0a 20 20 20 20 20 7f 81 29 fa 10 00 02 01 00

                    11 00 00 02 90 03 65 04 89 06 18 08 38 0b 20 0f

                    19 14 8a 1c 00 26 3d 34 51 47 ae 62 5a 87 21 b9

                    e3 ff 7d 00 00 00 00 00 00 00 00 00 00 00 b3 90

                    ----------------

                    Block 0, Base EDID:

                      EDID Structure Version & Revision: 1.4

                      Vendor & Product Identification:

                        Manufacturer: APP

                        Model: 41022

                        Made in: week 16 of 2017

                      Basic Display Parameters & Features:

                        Digital display

                        Bits per primary color channel: 10

                        DisplayPort interface

                        Maximum image size: 29 cm x 18 cm

                        Gamma: 2.20

                        Supported color formats: RGB 4:4:4

                        First detailed timing includes the native pixel format and preferred refresh rate

                      Color Characteristics:

                        Red  : 0.6796, 0.3203

                        Green: 0.2646, 0.6904

                        Blue : 0.1503, 0.0507

                        White: 0.3125, 0.3291

                      Established Timings I & II: none

                      Standard Timings: none

                      Detailed Timing Descriptors:

                        DTD 1:  2560x1600   60.000828 Hz   8:5     98.761 kHz    260.730000 MHz (286 mm x 179 mm)

                                     Hfront    8 Hsync  32 Hback   40 Hpol P

                                     Vfront   32 Vsync   8 Vback    6 Vpol N

                        Display Product Name: 'Color LCD'

                        Dummy Descriptor:

                        Dummy Descriptor:

                      Extension blocks: 1

                    Checksum: 0x72

                    ----------------

                    Block 1, DisplayID Extension Block:

                      Version: 1.2

                      Extension Count: 0

                      Display Product Type: Standalone display device

                      Vendor-Specific Data Block (0x7f) (Apple), OUI 00-10-FA:

                        Type: 3, Version: 1

                        18 0f 28 17 00 00 00 00 00 00 00 00 00 00 00 00 '..(.............'

                        00 00 00 4c 50 31 33 33 57 51 35 2d 53 4a 41 37 '...LP133WQ5-SJA7'

                        0a 20 00 44 43 4e 31 33 30 32 30 30 32 58 50 58 '. .DCN1302002XPX'

                        47 54 41 4b 0a 20 20 20 20 20                   'GTAK.     '

                      Vendor-Specific Data Block (0x7f) (Apple), OUI 00-10-FA:

                        Type: 2, Version: 1

                        00 11 00 00 02 90 03 65 04 89 06 18 08 38 0b 20 '.......e.....8. '

                        0f 19 14 8a 1c 00 26 3d 34 51 47 ae 62 5a 87 21 '......&=4QG.bZ.!'

                        b9 e3 ff 7d                                     '...}'

                      Checksum: 0xb3

                    Checksum: 0x90

                      dev