世界を動かす技術を、日本語で。

新しいApple Silicon M4およびM5の4K外部ディスプレイにおけるHiDPI制限

概要

  • Apple Silicon M4およびM5世代から、外部4Kディスプレイでフル解像度HiDPI(3840x2160@2x)が利用不可
  • 最高HiDPIモードは3360x1890(6720x3780バッキングストア)に制限
  • ハードウェア制限ではなく、ソフトウェア側のモード生成ロジックの変更が原因
  • 各種回避策(EDID/Plist/IOKit/WindowServer再起動等)は無効
  • Appleによる修正やユーザー向けオプション追加が必要

Apple Silicon M4/M5での4K外部ディスプレイHiDPI制限の概要

  • Apple Silicon M4/M5世代 以降、外部4Kディスプレイで フル解像度HiDPI(3840x2160@2x) が選択不可
  • 最大HiDPIモード3360x1890(6720x3780バッキングストア) に制限され、従来のM2/M3世代では制限なし
  • ハードウェア制限ではなく、DCP(Display Coprocessor)上の仕様は M2 Max/M5 Maxで同一
  • WindowServerのモードリスト がM5 Maxでは制限されているため、ユーザーは
    • 4K実解像度で文字がぼやける(HiDPI無効)
    • 3.3K(3360x1890)HiDPIで作業領域が大幅減少 いずれかを選択せざるを得ない状況

各種回避策の検証と結果

  • display override plist(scale-resolutions) を設置しても M5 Maxでは効果なし
    • M2 Maxでは3840x2160 HiDPIが有効になるが、M5 MaxではWindowServerがモードを列挙しない
  • EDIDパッチ(ソフトウェア上書き) も効果なし
    • 4095x4095等の非現実的なタイミングでは失敗
    • waydabber(BetterDisplay開発者)はM4で8Kネイティブを偽装し8Kフレームバッファを実現した例あり
      • ただし実際の4Kパネルでは8K信号を受けられないため、現実的な回避策にはならない
  • モニターEEPROMへのEDID書き込み も不可
    • LG 32UN880のEEPROMはread-only、またはDDC書き込みが失敗
  • IOKit Registry Override(DisplayHints等) も不可
    • AppleDisplayCrossbarドライバがユーザースペースからの書き換えを拒否
  • WindowServerキャッシュ削除・再起動 も効果なし
    • killall WindowServerでは再起動せず、フルリブートでもモード追加不可
  • 接続ディスプレイ数削減 も影響なし
    • 2台接続でもモードリストは変わらず
  • HDMI接続への切り替え も未検証だが、帯域がDP1.4より低く、改善は見込めない
  • SkyLight Private API(SLConfigureDisplayWithDisplayMode) もバリデーションで弾かれる
    • DCP由来のモードリスト外のモードは適用不可

技術的な制限の本質

  • DCPの報告値(MaxW, MaxH, MaxActivePixelRate等)は M2 Max/M5 Maxで同一
  • WindowServerのモードリスト のみが異なり、 M5 Maxでは3360x1890 HiDPIまで
  • ソフトウェアEDID上書きでネイティブ解像度を偽装 すればスケーリング上限を引き上げ可能だが、ディスプレイが対応できないため実用的でない
  • M2/M3世代 :ネイティブ解像度の2.0倍までHiDPI生成(3840x2160→7680x4320バッキングストア)
  • M4/M5世代 :1.75倍程度に制限(3840x2160→6720x3780バッキングストア)

原因・仕様変更の考察

  • BetterDisplay開発者 waydabber の見解
    • M4世代以降、 WindowServerがフレームバッファサイズを動的に制限
    • 将来的なディスプレイ追加を想定し、リソース節約のためHiDPI上限を低減
    • 例外的に他のディスプレイが全く接続されていない場合などは高解像度が選べる可能性もあるが、通常は制限あり

今後の対応策・要望

  • Appleによる修正 が必要
    • モード生成ロジックのスケーリング上限引き上げ
    • ユーザー向けHiDPI解像度強制オプションの提供
  • Apple Feedback(FB22365722) にて要望提出済み
  • 5Kや8Kパネル ではネイティブ解像度が高いため、この制限に該当しない可能性

診断コマンド例(抜粋)

  • DCPレート制限・ネイティブキャップ確認
    • ioreg -l -w0 | grep -o '"MaxActivePixelRate"=[0-9]*\|"MaxW"=[0-9]*\|"MaxH"=[0-9]*' | paste - - - | sort -u
  • ディスプレイモード一覧取得(HiDPI含む)
    • BetterDisplayやSwitchResX等でCGSGetNumberOfDisplayModes利用
  • DisplayHintsやConnectionMapping確認
    • ioreg -l -w0 | grep -B5 -A2 'MaxActivePixelRate' | grep -v EventLog
    • ioreg -l -w0 | grep "ConnectionMapping"

まとめ

  • M4/M5世代Apple Silicon搭載Mac では、 外部4KディスプレイでフルHiDPI(3840x2160@2x)事実上不可能
  • ソフトウェア的な仕様変更 による制限であり、現時点でユーザーが現実的に回避する方法は存在しない
  • Appleによる公式な対応 がなければ、HiDPIと作業領域の両立は困難

Hackerたちの意見

作者さん、こんな大変な問題に取り組んでくれて本当にお疲れ様。ケースを考慮してもらうために、ここまでしないといけないのは残念だね。

M2 Proで57インチのG9ウルトラワイドモニターにPIP/PBPを使おうと、地獄を見たよ。結局、電源付きHDMIドングル、DisplayLinkケーブル、DisplayPortを使って、BetterDisplay経由で3つの仮想モニターを設定した。BDでMacの制限を超える解像度を許可したのがうまくいった理由。OPには同情するよ。5120x1440 @ lodpiは最悪だった。ちょっとぼやけてたけど、UIサイズは完璧だった。でも最終的には、HDR付きの10240x2880 @ 120Hzで安定したから、スレッドのタイトルを見たときは本当に笑っちゃった。かわいそうな人だね。

ありがとう、週末の大半をキーボードに頭をぶつけながら、何が起こっているのか、使えるワークアラウンドがあるかを探してたよ(見つからなかったけど)。

この投稿を見て、似たような問題を調査したことを思い出した。全然分からなかったけど。ClaudeやGPTを使ってこういうハードウェアの問題を調べるのは早くて簡単だね。次に試すコマンドを教えてくれて、次々に進めていくと、似たような要約が得られる。著者がこのディスプレイについて何も知らなかったのも驚かないよ。

新しいM4が外部の4Kモニターで「ぼやけて」見えたとき、頭がおかしくなりそうだったよ。古いMacBookの設定を再現しようとしたけど、全然ダメだった。Appleが自社のディスプレイ以外ではわざとこうしてるのかな?

ちょっと細かいことを言うけど、MacOSの解像度やスケーリングの扱いが他のOS(Windows 11を含む)と比べておかしいのは、Appleハードウェアを使う上での最大の不満の一つなんだ。数年前、IntelベースのMacで非Appleディスプレイを「正しく」見せるためにすごく苦労したのを覚えてる。Windowsのノートパソコンは全然問題なく処理できてたのに。ハードウェアの制限と、Thunderboltドック経由で利用可能な解像度やリフレッシュレートに対処するための選択肢がなかったのが原因だった。正直、これをやっと修正してくれることを願ってる。また、サブピクセルテキストレンダリングオプションも復活してほしいな。

これは普通のレティナ設定じゃないよ。フレームバッファが画面解像度よりもずっと大きくて、縮小されるというかなり変わった設定なんだ。以前はうまくいってたのに今はダメってのは本当に残念だけど、ほとんどの人がこれを望んでないから、Appleが気にしないのも納得だね。

なんでこれがダウンボートされたのか分からないけど、これはかなり異常な構成だと思う。実際のディスプレイに対して、各方向で2倍のピクセルを持つフレームバッファにレンダリングして、結局それを各方向で2倍に縮小する意味って何?

それって単に2倍のスーパサンプリングじゃない?「完璧」なアンチエイリアスを求めるなら、それが最低限必要じゃない?

正直言って、そこそこの統合GPUを搭載したエントリーレベルのWindowsノートパソコンがこれを苦労せずに処理できるのはちょっと恥ずかしいよ。Appleは自分たちの優先順位を決める自由があるけど、クリエイティブプラットフォームの頂点とされているもので、最も進んだ消費者向けプロセッサの一つを搭載しているのに、少し違う解像度を扱えないのは残念だね。

私の場合、標準のLG UltraFine 4Kモニターを、標準の16インチM5 MacBook Proに標準のThunderbolt(USB-C経由)で接続してるんだけど、これのどこが普通じゃないのか分からない。別のモニターやM5 MacBook Proでも確認済みだよ。

俺たちプロレタリアがサードパーティのモニターでテキストをそこそこ見やすくするためにやらなきゃいけないことだよ。俺のLG DualUps(確か140ppiくらいだったと思う)は、スケーリング解像度の2倍で動かして、実質的にピクセルが2倍になった109ppiくらいにしてる。これがUIがそこそこ見やすくなる唯一のピクセル密度なんだ。18:16の2304 x なんかを2倍でレンダリングして、2倍にスケールダウンしてる。だから、Macを内蔵ディスプレイや純正ディスプレイで「もっとスペース」解像度にすると、パフォーマンスに影響が出るって言われるのは、そのOSがテキストを読めないくらいのエイリアスのぼやけにしないで、もっとスペースを確保するためにやることだから。実際には「見かけ上」の解像度をピクセルダブルにして、スケールダウンすることで、サブピクセルのアンチエイリアス効果を少し得られるんだ。Appleはしばらく前にサブピクセルアンチエイリアスを取り除いて、今はこれが普通になってる。俺は4Kのポータブルディスプレイ(超高密度だけど、まだ「レティナ」218には届かない)をモニターアームで使ってて、君が言うように1080pで2倍で動かしてる。まあまあ見えるけど、全体的にちょっと小さい。4Kディスプレイを持ってて、フル4Kを使いたいなら、全てをひどく見せるか、GPUのサイクルとメモリを無駄にして8Kフレームバッファをレンダリングして4Kにスケールダウンするかの選択肢しかない。今、俺はテレビ(1080p、ここからコメントを書いてる)でこれに悩まされてる。リビングに繋いでる普通のLinux/WindowsゲーミングPCはRMA待ちでDRAMなしだから、テキストサイズや他のものを独立してスケールできないMac Miniを使ってる。1600x900で動かさなきゃいけなくて、それでもどのウェブサイトも読みやすくするためにスケールしなきゃならない。テキストスケーリングは、正直言ってmacOSではクソだよ。Tim Cookが意図した通りにMacを使ってるなら、内蔵ディスプレイかAppleの高い外部ディスプレイを使って、218ppiに適した距離で座ってないとダメなんだ。

Tim Cookにメール送ってみて。DisplayPort DSCのバグが直ったよ。Catalina以降、後のMacOSでは60Hz以上のリフレッシュレートでモニターを駆動する能力が失われた。Appleサポートにはいろんな診断をされて、数週間後に「WontFix」って言われた。メールを書いたら、Sonomaで直った :) https://egpu.io/forums/mac-setup/4k144hz-no-longer-available...

ありがとう!

いや、完全には修正されてないよ。DP 1.4をいじることでProDisplay XDRを動かしてたんだ。もしモニターがDP 1.2にダウングレードできれば、1.4よりも良いリフレッシュレートが得られた(うちのは95Hz SDR、60Hz HDRができたけど、モニターが1.2しかできないって言ったら、Big Sur以降では120/95になったんだ。Catalinaでは144Hz HDRができたのに)。もし彼らの修正が、Apple以外のモニターに対して交渉の際に嘘をついて、GPUが1.2しかサポートしてないって言ってたら、全然驚かないよ。それが現在の問題に関係してるって知ったら、さらに驚かないだろうね。

大企業の忙しいCEOにメールが届くとは思わないけど、運が良ければ自動化を通じて届くかもしれないから、一応メール送ってみた。どうなるかわからないしね。

さっき彼にメール送ったよ。ひどい問題だね。

知らなかった!これで、MacOSが同じ144Hzモニターで使っても、Windows PCに比べてもっさり感じる理由が分かったかも。

テキストのぼやけを示す拡大した詳細のスクリーンショットを含めたら、もっと説得力が増すと思うよ。

フィードバックありがとう。写真を撮るようにしてみるね。いいカメラがないと正確に撮るのは難しいけど、仕事終わったら何かセットアップして投稿に追加したらここで返信するよ。

もう別の方法で試してみたと思うけど(Cmd-Fで探したけど見つからなかった)、以前にMacOSがうまく扱えなかった混乱したEDIDのモニターを使ったことがあって、「screenresolution」CLIアプリ https://github.com/jhford/screenresolution で任意の解像度を設定できたんだ。それが100Hzで表示させる唯一の方法だったし、解像度がほとんど固定されてるからすごくうまくいったよ。

ありがとう!スクリーン解像度は試したことなかったけど、単に解像度とリフレッシュレートを設定するだけみたいだね。スケーリングの制御が必要なのに、それができないのは困るなぁ。

残念ながら、新しいM5 Airでその問題が出てる。60Hzの4K作業用モニターと、2つの高リフレッシュレートの4Kゲーミングディスプレイがあるんだけど、60Hzのモニターはどちらのゲーミングモニターとも問題なく接続できる。でも、2つのゲーミングモニターを一緒に使うと、1つが認識されないんだ。新しいケーブルを試すのに時間をかけすぎて、結局は帯域幅の制限だって気づいたよ。

これってちょっとバカな質問かもしれないけど、著者は4KディスプレイをHiDPIの8Kフレームバッファで動かしてからダウンスケールしようとしてるの?それをするメリットって何なの?直接4Kの低DPIと比べて。何か「無料」のアンチエイリアス効果でもあるの?

まさに彼がやろうとしてることだね。MacOSはグラフィックスが2倍スケールでレンダリングされないと、テキストの表示が悪いからなんだ。

俺の理解では、主な目標は非ネイティブ(1:1ピクセルマッピング)解像度とスケーリングがネイティブよりも悪く見える問題を解決することだと思う。高dpiディスプレイを出荷する際に、UIスケーリングが必要で、物事が読みやすくなるようにするのが問題なんだ。Appleの解決策は、常に画像がディスプレイにフィットするように高い非ネイティブ解像度で全てをレンダリングすることだった。つまり、単純化すると、Windowsでは1.5倍スケーリングでテキストが大きくなりすぎて、4Kディスプレイに4Kのネイティブピクセルを収められないから、動画がぼやけるって問題がある。もし、スケールされた画像を6Kフレームバッファにレンダリングしてから4Kにダウンスケールすれば、解像度の損失は最小限に抑えられるんだ。

これは私たちの発見と一致します。M4/M5 DCPファームウェアは、保守的なフレームバッファの事前割り当て戦略を実装しています。 > HiDPIバックストアをネイティブ解像度の約1.75倍(3840x2160ネイティブの場合、6720x3780)に制限していて、フルHiDPIに必要な2.0倍(7680x4320)ではありません。 これって、オフバイワンバグかも?システムを調整して、ディスプレイがさらに高い解像度をサポートしていると思わせることでテストできるかも。あと、Display Override Plistをいじったり、ドライバーをパッチしたりする代わりに、「Displays」UIの「Advanced…」ボタンを使ってみたのかな?それについては言及してないけど。私の場合(27インチの4KモニターでM4やM5ではないけど)、5つの選択肢が11の選択肢に置き換わるよ。「すべての解像度を表示」トグルを使うと、18に増える。

BetterDisplayの「Advanced」セクションでいろいろ試したんだけど、具体的に何か提案してることある?