1 Punkte von GN⁺ 29 일 전 | 2 Kommentare | Auf WhatsApp teilen
  • Bei der M4-/M5-Generation wird der 3840×2160@2x-HiDPI-Modus auf externen 4K-Monitoren nicht unterstützt; möglich ist höchstens 3360×1890
  • Diese Beschränkung entsteht durch eine Änderung der Firmware-Architektur des Display Coprocessor (DCP) und ist kein Hardware-Leistungsproblem
  • Beim M5 Max wurde das Framebuffer-Budget pro Pipe neu zugewiesen, wodurch sich die Breite einer Single-Stream-Pipe auf 6720 Pixel verringert
  • Verschiedene Ansätze wie EDID-Anpassungen, Portwechsel oder Änderungen an Treibereigenschaften wurden ausprobiert, ohne Wirkung
  • Die einzige vollständige Lösung ist derzeit, dass Apple die DCP-Firmware korrigiert; als Workaround lässt sich 2x HiDPI vorübergehend per Virtual-Display-Mirroring realisieren

Analyse der HiDPI-Beschränkung externer 4K-Displays bei Apple Silicon M4/M5

  • Bei Apple Silicon der Generationen M4 und M5 wird für externe 4K-Monitore kein vollständiger 2x-HiDPI-Modus (3840×2160@2x) bereitgestellt
    • Der maximale HiDPI-Modus ist auf 3360×1890 begrenzt, sodass das bei früheren Generationen (M2/M3) mögliche 3840×2160 HiDPI nicht mehr verfügbar ist
    • Nutzer müssen sich zwischen unscharfem Text im Nicht-HiDPI-Modus oder scharfer, aber verkleinerter Arbeitsfläche entscheiden
  • Diese Begrenzung beruht nicht auf Hardware-Limits, sondern auf Änderungen an der Firmware-Architektur des Display Coprocessor (DCP)
    • Der M5 Max unterstützt laut Spezifikation 8K@60Hz, aber die vom DCP gemeldeten Fähigkeiten entsprechen denen des M2 Max
    • Bei der M4-/M5-Generation wurde das Framebuffer-Budget pro Pipe neu zugewiesen, wodurch das Budget des Standard-4K-Pfads von 7680 Pixel auf 6720 Pixel reduziert wurde
    • Die Disassemblierung der DCP-Firmware zeigt, dass der Wert 6720 (0x1A40) als hartkodierte Konstante vorhanden ist

Testumgebung und Vergleichsergebnisse

Punkt M5 Max (Problem vorhanden) M2 Max (funktioniert korrekt)
Chip Apple M5 Max Apple M2 Max
Modell-ID Mac17,6 Mac14,6
GPU-Kerne 40 38
macOS 26.4 (25E246) 26.4 (25E246)
Display LG HDR 4K 32UN880 LG HDR 4K 32UN880
Verbindung USB-C/Thunderbolt (HBR3, 8.1Gbps, 4 lanes) identisch
Maximaler HiDPI-Modus 3360×1890 3840×2160
  • Auf beiden Systemen sind DCP-Parameter wie MaxActivePixelRate, MaxW, MaxH und MaxBpc identisch
  • In der Ausgabe von system_profiler wird beim M5 Max der Backing Store als 6720×3780 und die UI als 3360×1890 HiDPI angezeigt
  • Auch in der Liste der HiDPI modes fehlt der Eintrag 3840×2160@2x

Änderungen an Framebuffer- und Pipe-Struktur

  • Der M2 Max verwendet ein einzelnes Budget pro Controller (MaxSrcRectWidth=7680)
  • Beim M5 Max wurde auf eine Budgetstruktur pro Sub-Pipe umgestellt (MaxSrcRectWidthForPipe=(6720,7680,7680,7680))
    • Single-Stream-4K-Ausgabe verwendet nur Sub-Pipe 0 (6720)
    • 8K-Ausgabe verwendet zwei Sub-Pipes (0 und 2)
  • Dadurch kann 4K HiDPI (Backing Store 7680×4320) nicht erzeugt werden, weil das Budget von Sub-Pipe 0 überschritten wird
Sub-Pipe MaxSrcRectWidth Verwendung
0 6720 Single-Stream (Standard-Display)
1–3 7680 Multi-Pipe (z. B. 8K)
  • Vergleich von MaxVideoSrcDownscalingWidth
    Controller MaxSrcRectWidthForPipe[0] MaxVideoSrcDownscalingWidth Verhältnis
    Internes Display 5120 10744 2.1x
    Externes Display 6720 6720 1.0x
    • Das interne Display hat Spielraum im Scaler, das externe nicht, daher ist 3840×2160 HiDPI nicht möglich
  • MaxSrcRectWidthForPipe und MaxVideoSrcDownscalingWidth werden beim Laden des Treibers festgelegt und können zur Laufzeit nicht geändert werden
    • Auch bei Portwechsel, Clamshell-Modus oder EDID-Anpassungen bleibt der Wert bei 6720

Analyse der DCP-Firmware

  • Die Firmware-Dateien liegen unter /System/Volumes/Preboot/<UUID>/restore/Firmware/dcp/; der M5 Max verwendet t605xdcp.im4p
    • Sie ist mit LZFSE komprimiert (4.1MB → 16.4MB), aber nicht verschlüsselt und kann mit img4tool extrahiert werden
  • HiDPI-relevante Eigenschaften wie MaxVideoSrcDownscalingWidth, MaxSrcRectWidthForPipe, IOMFBMaxSrcPixels und ExternalAppleLook sind alle in dieser Firmware definiert
  • Die Funktion IOMFB::UPPipe::verify_downscaling(SwapRequest *) validiert die angeforderte Quellbreite anhand von MaxVideoSrcDownscalingWidth
  • Ergebnisse der Ghidra-Analyse
    • Externes Display, Sub-Pipe 0: 0x1A40 (6720)
    • Sub-Pipes 1–3: 0x1E00 (7680)
    • Internes Display, Sub-Pipe 0: 0x1400 (5120)
    • Höhe aller Sub-Pipes: 0x1200 (4608)
  • Die Beschränkung greift in zwei Stufen
    1. MaxSrcRectWidthForPipe[0] (6720) → Begrenzung bei der Modus-Aufzählung
    2. MaxVideoSrcDownscalingWidth (6720) → Begrenzung bei der Laufzeitvalidierung
  • Da andere Pipes desselben Controllers 7680 unterstützen, ist bestätigt, dass es sich um eine Firmware-Richtlinie und keine Hardware-Beschränkung handelt

Versuche zur Problemlösung

  • Display-Override-Plist

    • Unter /Library/Displays/.../DisplayVendorID-1e6d/DisplayProductID-7750 wurde eine HiDPI-Auflösung von 7680×4320 hinzugefügt
    • Auf dem M5 Max ohne Wirkung, auf dem M2 Max funktioniert es korrekt
    • Der WindowServer des M5 Max zählt diesen Modus nicht auf
  • EDID-Software-Patch

    • Geänderte EDID in IODisplayEDID eingefügt (4095×4095, maximaler Pixel-Takt 655.35MHz usw.)
    • Ohne Wirkung
    • Der BetterDisplay-Entwickler meldete auf M4 einen erfolgreichen Fall, in dem per Software-EDID-Override ein 8K-Framebuffer erzwungen wurde
    • Für ein 4K-Panel ist das jedoch keine praktische Lösung, da es kein echtes 8K-Signal anzeigen kann
  • EDID-Hardware-Flash

    • Nach Hinzufügen eines Modus 7680×4320@60Hz (VIC 199) zur EDID wurde diese in das EEPROM des LG-Monitors geflasht
    • Der DCP aktualisiert MaxW=7680 und MaxH=4320, aber die 6720-Beschränkung von Sub-Pipe 0 bleibt bestehen
    • Wird 8K-Timing als Standard gesetzt, entsteht zwar der Modus 3840×2160@2x, macOS versucht dann aber tatsächlich ein 8K-Signal auszugeben, das nicht dargestellt werden kann
  • Änderung der IOKit-Registry

    • Direkte Änderung von DCP-Eigenschaften wie DisplayHints und ConnectionMapping versucht
    • Der Kernel-Treiber (AppleDisplayCrossbar) verweigert Schreibzugriffe (kIOReturnUnsupported)
  • Weitere Versuche

    • Löschen des WindowServer-Caches, Reduzierung der Zahl angeschlossener Displays, Wechsel auf HDMI und Aufruf der privaten SkyLight-API SLConfigureDisplayWithDisplayMode schlugen alle fehl
    • Tarnung als Apple-Display (Apple Vendor ID in die EDID eingefügt) führt zwar zur Anzeige als „Apple Pro Display X“, aber ExternalAppleLook=No und das Budget bleibt unverändert
  • Zusammenfassung der Ergebnisse beim Schreiben von IOKit-Eigenschaften

    Dienst Methode Ergebnis
    IOMobileFramebufferShim IORegistryEntrySetCFProperty kIOReturnUnsupported
    AppleDisplayCrossbar u. a. IORegistryEntrySetCFProperty kIOReturnNotReady
    IOAVController IORegistryEntrySetCFProperty Accepted (wird aber nicht an den DCP weitergereicht)

Test mit RuntimeProperty-Boot-Argumenten

  • In der Firmware existiert die Funktion IOMobileFramebuffer::parse_RTP_boot_args(), was auf mögliche Property-Overrides beim Booten hindeutet
    • Beispiele: iomfb_RuntimeProperty_ExternalAppleLook, iomfb_enable_bw_check, iomfb_dual_pipe_policy usw.
  • Tests mit sudo nvram boot-args= bei gelockertem SIP und Startup Security blieben wirkungslos
    • Vermutlich ist dieser Codepfad nur für Entwicklungszwecke aktiviert

Temporärer Workaround per Virtual Display Mirror

  • Es wurde das CLI-Tool force-hidpi erstellt, das über die private SLVirtualDisplay-API von SkyLight ein virtuelles Display (7680×4320) erzeugt und das reale 4K-Panel per Hardware-Mirroring ansteuert
    • Der Hardware-Mirror-Pfad umgeht die Prüfung verify_downscaling
    • In system_profiler erscheint dies als „Hardware Mirror: Yes“
  • Auf diesem Weg lässt sich 3840×2160 HiDPI realisieren
    • Text ist scharf und die macOS-Oberfläche wird mit normaler 2x-Dichte gerendert
    • Das virtuelle Display verwendet PQ (ST 2084) EOTF und wendet eine Gammakorrektur für SDR-Panels an
  • Nachteile
    • Das Tool muss dauerhaft laufen; nach dem Beenden fällt die Anzeige auf 1.0x zurück
    • In den Systemeinstellungen erscheint ein zusätzliches Display
    • Das Text-Rendering unterscheidet sich leicht vom nativen HiDPI auf dem M2 Max
    • Wegen der Abhängigkeit von privaten APIs kann die Lösung bei macOS-Updates instabil werden

Zusammenfassung von Ursache und möglicher Korrektur

  • M2 Max: 7680-Pixel-Budget pro Controller → 3840×2160 HiDPI möglich
  • M5 Max: Umstellung auf Sub-Pipe-Struktur, wodurch Single-Stream-Pipe 0 auf 6720 begrenzt ist
  • Dadurch sinkt das HiDPI-Maximum bei 4K auf 3360×1890
  • EDID-Anpassungen, Portwechsel oder Änderungen an der Zahl der Displays können dies nicht ändern
  • Die grundlegende Lösung ist, dass Apple die DCP-Firmware (t605xdcp.im4p) anpasst
    1. Erhöhung der hartkodierten Konstante von 0x1A40 auf 0x1E00
    2. Zulassen von Multi-Pipe-HiDPI-Backing-Store auch bei Single-Pipe
    3. Dynamische Zuweisung auf Basis des angeschlossenen Displays
    4. Freigabe von Runtime-Properties oder Boot-Argumenten
  • Apple Feedback FB22365722 wurde eingereicht
  • Apple ist sich des Problems bewusst und reagiert derzeit mit einem Warnhinweis zu den Einschränkungen skalierter Auflösungen auf der Produktseite

Zusammenfassung diagnostischer Befehle

  • ioreg -l -w0 | grep "IOMFBMaxSrcPixels" : Framebuffer-Budget pro Pipe prüfen
  • ioreg -l -w0 | grep "MaxVideoSrcDownscalingWidth" : Scaler-Limit prüfen
  • system_profiler SPDisplaysDataType : Display-Übersicht
  • CGSGetNumberOfDisplayModes : Liste der HiDPI-Modi prüfen

Beispiel für korrektes Verhalten beim M2 Max

  • 3840×2160@2x-HiDPI-Modus vorhanden
  • DCP-Parameter: MaxW=3840, MaxH=2160, MaxActivePixelRate=497,664,000
  • In IOMFBMaxSrcPixels ist MaxSrcRectWidth=7680 bestätigt
  • Auf demselben LG HDR 4K-Display ist der vollständige HiDPI-Modus nutzbar

2 Kommentare

 
cnaa97 29 일 전

Die grundlegenden Dinge sollten sie schon richtig hinbekommen..

 
GN⁺ 29 일 전
Hacker-News-Kommentare
  • Ich habe mir vor Kurzem erstmals ein MacBook Pro M5 Pro gekauft und bereue es inzwischen ein wenig.
    Der Laptop selbst ist großartig, aber mit meinem LG 38WN95C-W Monitor (3840x1600@144Hz, USB-C) ist er nicht richtig kompatibel.
    Mit BetterDisplay bekomme ich zwar 3360x1400 HiDPI hin, verliere dabei aber den Bildschirmplatz, an den ich gewöhnt war.
    Ich hätte nicht gedacht, dass der M5 schlechter sein würde als die vorherige Generation. Apple macht vieles gut, patzt aber bei solchen grundlegenden Dingen.
    Jetzt sollte ich wohl Apple Intelligence fragen, wie ich meiner Frau erkläre, dass ich einen neuen Monitor brauche.

    • Ich hatte ein ähnliches Problem, und nachdem ich Tim Cook eine E-Mail geschickt hatte, wurde es gelöst.
      Es war ein DisplayPort-DSC-Bug, durch den macOS seit Catalina keine Bildwiederholraten über 60Hz unterstützt hatte.
      Der Apple-Support hat wochenlang nur Diagnosen wiederholt und es dann mit „WontFix“ beendet, aber nach der E-Mail wurde es in Sonoma behoben.
      Passender Forenlink
      • Ich erwarte nicht wirklich, dass eine E-Mail an den CEO tatsächlich ankommt, aber für alle Fälle habe ich auch eine geschickt.
      • Ich habe ebenfalls von M1 Pro auf M5 Pro upgegradet, und selbst mit derselben Dock- und Monitor-Kombination bekomme ich nicht mehr als 4K 60Hz.
        Das Problem trat auf, nachdem ich macOS von Sequoia auf Tahoe umgestellt hatte.
      • Ich habe gerade auch eine E-Mail geschickt. Ein wirklich absurder Fehler.
      • Dadurch habe ich erst verstanden, warum sich mein macOS am selben 144Hz-Monitor langsamer als Windows angefühlt hat.
      • Ganz behoben ist es nicht. Apple hat wohl DP 1.4 so manipuliert, dass das ProDisplay XDR läuft,
        möglicherweise indem bei Nicht-Apple-Monitoren ausgehandelt wurde, dass die GPU nur 1.2 unterstützt.
        Das aktuelle Problem könnte eine Fortsetzung davon sein.
  • Man sieht, dass der Autor enorm viel Aufwand betrieben hat, um dieses Problem zu lösen.
    Traurig, dass Apple das Problem offenbar erst dann wahrnimmt, wenn man so weit gehen muss.

    • Ich hatte mit meinem 57" G9 Ultrawide wegen der PIP/PBP-Einstellungen ebenfalls großen Ärger.
      Am Ende habe ich die Mac-Beschränkungen in BetterDisplay aufgehoben und es mit einem DisplayLink-Kabel und einem HDMI-Dongle mit eigener Stromversorgung gelöst.
      5120x1440 @ lodpi war viel zu unscharf, aber mit 10240x2880 @ 120Hz HDR wurde es stabil.
      Beim Titel musste ich lachen. Ich konnte den Schmerz des OP nur zu gut nachvollziehen.
    • Ich habe auch das ganze Wochenende gegrübelt und nach einer Lösung gesucht, aber es gab keinen brauchbaren Workaround.
    • Ich hatte ein ähnliches Problem, und es war hilfreich, mit Claude oder GPT Hardware-Probleme zu analysieren, weil sie schnell sinnvolle Lösungsschritte vorgeschlagen haben.
      Der Autor hat vermutlich ebenfalls fast ohne Display-Wissen angefangen.
  • Ich wäre bei meinem neuen M4 MacBook fast wahnsinnig geworden, weil ein externer 4K-Monitor unscharf aussah.
    Selbst das Kopieren meiner bisherigen Einstellungen hat nichts gebracht, und ich frage mich, ob Apple vielleicht nur die eigenen Displays optimiert.

    • Die Art, wie macOS Auflösung und Skalierung verarbeitet, ist immer noch merkwürdig.
      Selbst Windows 11 hat solche Probleme nicht, während Texte auf Nicht-Apple-Monitoren unter macOS seltsam aussehen.
      Schon früher zu Intel-Mac-Zeiten hatte ich solche Probleme bei der Verbindung über ein Thunderbolt-Dock.
      Ich wünschte, sie würden die Subpixel-Rendering-Option wieder unterstützen.
    • Ich verstehe nicht, warum „lodpi“ unscharf sein soll.
      Ich nutze seit acht Jahren einen 43"-4K-Monitor mit 1x-Skalierung und habe zwischen Linux, M1 und M4 keinen Unterschied bemerkt.
    • Ich habe mit BetterDisplay ebenfalls jede Kombination ausprobiert, aber die Schriftarten waren immer noch unscharf. Bei großen 5k2k-Monitoren war das besonders frustrierend.
    • Wenn man sich die insgesamt schwankende Qualität von macOS heute anschaut, liegt es womöglich einfach an schlechtem Management im Unternehmen.
  • Falls der Monitor eine kaputte EDID hat, kann man das vielleicht mit der screenresolution CLI-App lösen.
    Damit konnte ich beliebige Auflösungen und Bildwiederholraten setzen und es bis 100Hz stabil nutzen.

    • Danke. Allerdings scheint dieses Tool nur Auflösung und Bildwiederholrate zu ändern, HiDPI-Skalierung lässt sich damit wohl nicht steuern.
  • Will der Autor hier vielleicht ein 4K-Display mit einem 8K-Framebuffer rendern und dann herunterskalieren?
    Mich würde interessieren, welchen Vorteil das gegenüber einfachem 4K-low-DPI hat. Ist das so etwas wie kostenloses Antialiasing?

    • Genau. macOS hat bei Text-Rendering außerhalb von 2x-Skalierung eine schlechte Qualität, deshalb macht man das so.
    • Der entscheidende Punkt ist, Qualitätsverluste bei der Skalierung auf nicht nativen Auflösungen zu vermeiden.
      Unter Windows werden Texte bei 1,5x-Skalierung unscharf, aber macOS rendert einen 6K-Framebuffer und skaliert ihn auf 4K herunter, um die Schärfe zu erhalten.
    • Ich nutze mit BetterDisplay dieselbe Methode.
      Selbst bei einem 2K-Monitor ist ein virtueller 5K-Framebuffer, der auf 2K heruntergerechnet wird, deutlich schärfer als das standardmäßige 2K von macOS.
  • Ich habe mit dem M5 Air ein ähnliches Problem.
    Ein 60Hz-4K-Monitor funktioniert, aber wenn ich zwei 4K-Gaming-Monitore mit hoher Bildwiederholrate gleichzeitig anschließe, wird einer davon nicht erkannt.
    Nach mehreren Kabelwechseln wurde mir klar, dass es letztlich an der Bandbreitengrenze liegt.

  • Das ist keine gewöhnliche Retina-Konfiguration.
    Der Framebuffer ist deutlich größer als die tatsächliche Auflösung und wird dann heruntergerechnet — also eine ungewöhnliche Konfiguration.
    Die meisten Nutzer wollen so etwas nicht, deshalb kümmert sich Apple vermutlich nicht darum.

    • Ich habe einfach nur einen standardmäßigen LG UltraFine 4K an ein M5 MacBook Pro angeschlossen, und das soll eine ungewöhnliche Konfiguration sein? Verstehe ich nicht.
    • Ist das nicht eine Art 2x-Supersampling? Für perfektes Antialiasing braucht man so etwas doch.
    • Ich stimme zu, dass das eine ungewöhnliche Konfiguration ist. Warum sollte man absichtlich mit doppelt so vielen Pixeln rendern und dann wieder auf die Hälfte verkleinern?
    • Aber selbst günstige Windows-Laptops kommen mit solcher Auflösungsverarbeitung problemlos klar,
      deshalb ist es schon enttäuschend, dass ausgerechnet der Mac als führende Plattform für Kreative daran scheitert.
  • Bedeutet HiDPI hier nicht 1080p@2x? Funktioniert das weiterhin?

    • Genau. Bei einem 3840x2160-Display ist es unter macOS üblich, 1920x1080@2x zu verwenden.
      Ich verstehe nur nicht, warum man dafür einen 7680x4320-Buffer nutzen sollte.
      Ich verwende an meinem M4 Mac ein 4K-Display mit einem 5120x2880-Framebuffer (2560x1440@2x), und das funktioniert problemlos.
      Das gilt für macOS Sequoia.
    • Ich verstehe den Kern des Artikels auch nicht ganz. 4K HiDPI gibt es auf einem 4K-Monitor nicht.
      Das wäre einfach 2160p@2x auf einem 8K-Monitor. 4K bei 100% Skalierung sieht in keinem Betriebssystem gut aus.
    • Am Ende geht es wohl um die ungewöhnliche Konfiguration 2160p@2x.
  • Der Artikel wäre überzeugender, wenn es Screenshot-Vergleiche der Textunschärfe gäbe.

    • Danke für das Feedback. Es ist nicht leicht, das exakt zu fotografieren, aber ich werde nach der Arbeit wohl Fotos ergänzen und den Beitrag aktualisieren.