mafredri / macos-display-overrides

Display overrides to make (my) monitors work better on macOS
MIT License
28 stars 7 forks source link

I don't think my EDID override has any effect #2

Open DarkSideOf5G opened 3 years ago

DarkSideOf5G commented 3 years ago

Sorry, I'm a bit lost here. The problem I'm struggling with is not necessarily related, so it may be off topic - in which case I apologize. I've created an override to force RGB mode and to reduce color depth to 24 bits...macOS detected it, but I don't think it has any effect (for example, system report still shows 30 bit color depth and not 24) ...what did I do wrong?

DisplayProductID-c156.zip

mafredri commented 3 years ago

No problem, I'm happy to discuss and try to solve all things related to macOS display overrides here as there aren't many good resources for solving these annoying issues.

Why do you want to reduce color depth from 30-bit to 24, maybe we can find an alternate solution? Since you say that macOS detected the override, I'm guessing that you did nothing wrong and that RGB overrides simply no longer work on macOS (as I've observed before). So if you absolutely must reduce colors to 24-bit, we may need to modify your EDID in some other way.

DarkSideOf5G commented 3 years ago

Thanks! I'm trying to solve the "blurry fonts on external monitors" issue, many Mac users are struggling with. Since nobody really knows what causes it, it is trial an error.

Some suggested that the culprit is that macOS reverts to YCrCb instead of RGB with these monitors, so I set bits 3-4 of byte 24 in my EDID override to 00 (using the well known ruby patch script "bytes[24] &= ~(0b11000)") - didn't see much of an improvement.

I've noticed that some EDID editors only allow to modify that with version 1.4, so I changed that too ("bytes[19] = 4") - no effect.

Then I saw someone suggesting to remove YCbCr support from CEA Timing Extension Block, which I [hopefully] did with this script modification "bytes[128 + 3] &= ~(0b110000)" - no effect.

At this point I got lost and simply started experimenting with pretty much anything that comes to mind. I've noticed that my built-in retina display has color depth of 24 bits, but for external monitors it was using 30 bits. I've also noticed that the monitor actually does not report anything in EDID on that - so 30 bit color depth was just macOS' guess. I tried changing that with "bytes[20] |= (0b10100000)" - no only did it not have any effect but I've noticed that macOS still reports suing 30 bits of these monitors...so apparently this EDID parameter is being ignored.

So...this is my sad story :)

mafredri commented 3 years ago

Ah yes, I feel your pain. I've dealt with that too on some displays. Usually this has been because macOS has detected the display as a TV (due to it supporting YCbCr). In the past the RGB override worked to prevent the TV mode switch.

If TV mode is indeed the problem, then I'm not surprised disabling 30-bit color didn't have any effect. Could you go into About This Mac > System Report > Grpahics/Displays, and then look at the information for your external display, does it say TV = Yes?

Then you could try this override instead: DisplayProductID-c156.zip

DarkSideOf5G commented 3 years ago

It doesn't seem to think it is a TV...

PHL 273V7 - forced RGB mode (EDID override 1): Resolution: 1920 x 1080 (1080p FHD - Full High Definition) UI Looks like: 1920 x 1080 @ 60 Hz Framebuffer Depth: 30-Bit Color (ARGB2101010) Mirror: Off Online: Yes Rotation: Supported Automatically Adjust Brightness: No Connection Type: DVI or HDMI Adapter Firmware Version: 7.55

mafredri commented 3 years ago

Ah, since it's a non-retina display, I think blurred fonts can be expected. Apple rewrote the graphics stack in Mojave and as a result removed sub-pixel antialiasing and basically all old displays look like 💩 after that.

You can read about it here; and also a few potential settings you could try: https://applerubberindustries.com/75823/macOS-Catalina-vs-Mojave-sub-pixel-antialiasing/

(Remember to logout or reboot after changing a setting, might be required for it to take effect.)

You could still give the No TV override a go, but chances are slim that it would help. You could also try reversing it, forcing macOS to think it's a TV. Maybe that'd set it straight 😅.

One parameter you could try playing around with is IOGFlags, values used in existing overrides are: 0, 4, 1552, 14499, 19501, 40974, 40975, 40979, 40980, 40981, 65536, 196608, 262144, 262148 but to be honest I'm not sure how careful one should be when playing around with these. They are settings passed to the graphics adapter/stack. I once tried to dig through the source code for clues as to what any of these bits do; but didn't find anything conclusive.

DarkSideOf5G commented 3 years ago

basically all old displays Hmm...which displays should be OK then? Mine are new...

mafredri commented 3 years ago

It seems I was kind of inferring that all displays with a 1920x1080 resolution are old 😬. I'd suggest getting a 4K display, and then running it on a lower "feels like" resolution.

For instance, my Dell U2715H has a native resolution of 2560x1440, but I've created a HiDPI override for it that lets me output a "feels like" resolution of 1920x1080 (i.e. cheap mans retina). This makes everything much more bearable, even though my displays native resolution should ideally be 3840x2160 because then the scaling would be divisible by 2 instead of 1,333.

DarkSideOf5G commented 3 years ago

Hmm...do you know if there is any official information from Apple that 1080p is not longer supported? With that I may be able to return my monitors...

mafredri commented 3 years ago

I doubt that they would admit that 1080p is no longer supported, I mean you get output so it "works", right?

One thing I also want to make clear is that I'm not claiming that your blurriness is due to the removal of sub-pixel antialiasing. It's one possibility. Another possibility could be your HDMI adapter, if you're using one, or your HDMI cable, or a combination of both. Your display might also have smoothing/sharpening options you can tweak to help with the issue.

Ultimately if you want to replace it, I think your best bet is if wherever you bought it from has a return policy. Or if you bought it online then you'd automatically have at least 14 days to return it in some countries.