1 ポイント 投稿者 GN⁺ 29 일 전 | 2件のコメント | WhatsAppで共有
  • M4・M5世代では、外部4Kモニターで 3840×2160@2x HiDPIモード がサポートされず、最大 3360×1890 までしか利用できない
  • この制限は Display Coprocessor(DCP)ファームウェア構造の変更 によって生じており、ハードウェア性能の問題ではない
  • M5 Maxの フレームバッファ予算がパイプごとに再割り当て され、単一ストリームパイプの幅が6720ピクセルに縮小された
  • EDID修正、ポート変更、ドライバー属性調整などさまざまな方法が試されたが、いずれも効果なし
  • 現時点で完全な解決策は AppleがDCPファームウェアを修正 することであり、暫定的には仮想ディスプレイのミラーリング方式で2x HiDPIを実現できる

Apple Silicon M4/M5 外部4Kディスプレイ HiDPI制限の分析

  • M4およびM5世代のApple Silicon では、外部4Kモニターの 完全な2x HiDPIモード(3840×2160@2x) が提供されない
    • 最大HiDPIモードは 3360×1890 に制限され、前世代(M2/M3)で可能だった3840×2160 HiDPIは利用不可
    • ユーザーは 非HiDPIモードのぼやけた文字鮮明だが縮小された作業領域 のどちらかを選ぶ必要がある
  • この制限は ハードウェア限界ではなくDisplay Coprocessor(DCP)ファームウェア構造の変更 に起因する
    • M5 Maxは仕様上8K@60Hzをサポートするが、DCPが報告する機能はM2 Maxと同じ
    • M4/M5世代では フレームバッファ予算(framebuffer budget) がパイプごとに再割り当てされ、標準4K経路の予算が 7680ピクセルから6720ピクセルへ縮小
    • DCPファームウェアの逆アセンブル結果では、6720(0x1A40) の値がハードコードされた定数として存在する

テスト環境および比較結果

項目 M5 Max (問題あり) M2 Max (正常動作)
チップ Apple M5 Max Apple M2 Max
モデルID Mac17,6 Mac14,6
GPUコア 40 38
macOS 26.4 (25E246) 26.4 (25E246)
ディスプレイ LG HDR 4K 32UN880 LG HDR 4K 32UN880
接続 USB-C/Thunderbolt (HBR3, 8.1Gbps, 4 lanes) 同一
最大HiDPIモード 3360×1890 3840×2160
  • 両システムとも MaxActivePixelRate, MaxW, MaxH, MaxBpc などのDCPパラメータは同一
  • system_profiler 出力では、M5 Maxのバッキングストアは 6720×3780、UIは 3360×1890 HiDPI と表示される
  • HiDPI modes 一覧にも3840×2160@2xの項目は存在しない

フレームバッファおよびパイプ構造の変化

  • M2 Maxはコントローラ単位の単一予算(MaxSrcRectWidth=7680)を使用
  • M5 Maxは サブパイプ別の予算構造(MaxSrcRectWidthForPipe=(6720,7680,7680,7680))に変更
    • 単一ストリーム4K出力は sub-pipe 0(6720) のみを使用
    • 8K出力時は2つのsub-pipe(0,2)を使用
  • このため、4K HiDPI(7680×4320バッキングストア)はsub-pipe 0の予算を超え、生成できない
Sub-pipe MaxSrcRectWidth 用途
0 6720 単一ストリーム (標準ディスプレイ)
1–3 7680 マルチパイプ (8Kなど)
  • MaxVideoSrcDownscalingWidth の比較
    コントローラ MaxSrcRectWidthForPipe[0] MaxVideoSrcDownscalingWidth 比率
    内蔵ディスプレイ 5120 10744 2.1x
    外部ディスプレイ 6720 6720 1.0x
    • 内蔵ディスプレイにはスケーラの余裕があるが、外部には余裕がなく、3840×2160 HiDPIが不可能
  • MaxSrcRectWidthForPipeMaxVideoSrcDownscalingWidthドライバーロード時に固定 され、実行時に変更不可
    • ポート変更、クラムシェルモード、EDID修正などでも同様に6720のまま

DCPファームウェア分析

  • ファームウェアファイルは /System/Volumes/Preboot/<UUID>/restore/Firmware/dcp/ パスにあり、M5 Maxでは t605xdcp.im4p を使用
    • LZFSE圧縮(4.1MB → 16.4MB) 状態で暗号化されておらず、img4tool で抽出可能
  • HiDPI関連属性(MaxVideoSrcDownscalingWidth, MaxSrcRectWidthForPipe, IOMFBMaxSrcPixels, ExternalAppleLook)はすべてこのファームウェア内で定義されている
  • IOMFB::UPPipe::verify_downscaling(SwapRequest *) 関数が MaxVideoSrcDownscalingWidth を基準に要求されたソース幅を検証する
  • Ghidra分析結果
    • 外部ディスプレイ Sub-pipe 0: 0x1A40(6720)
    • Sub-pipe 1~3: 0x1E00(7680)
    • 内蔵ディスプレイ Sub-pipe 0: 0x1400(5120)
    • すべてのSub-pipe高さ: 0x1200(4608)
  • 制限は2段階で動作する
    1. MaxSrcRectWidthForPipe[0](6720) → モード列挙段階で制限
    2. MaxVideoSrcDownscalingWidth(6720) → 実行時検証段階で制限
  • 同一コントローラの別パイプが7680をサポートしているため、ハードウェア制約ではなくファームウェアポリシー であることが確認された

問題解決の試み

  • Display Override Plist

    • /Library/Displays/.../DisplayVendorID-1e6d/DisplayProductID-7750 に7680×4320 HiDPI解像度を追加
    • M5 Maxでは効果なし、M2 Maxでは正常動作
    • M5 MaxのWindowServerが該当モードを列挙しない
  • EDIDソフトウェアパッチ

    • IODisplayEDID に修正済みEDIDを挿入 (4095×4095、最大ピクセルクロック655.35MHzなど)
    • 効果なし
    • BetterDisplay開発者は、M4でソフトウェアEDIDオーバーライドにより8Kフレームバッファ確保に成功した事例を報告
    • ただし4Kパネルは実際の8K信号を表示できず、実用的な解決策ではない
  • EDIDハードウェア書き込み

    • 7680×4320@60Hz(VIC 199)モードをEDIDに追加後、LGモニターのEEPROMへ書き込み
    • DCPが MaxW=7680, MaxH=4320 に更新されるが、sub-pipe 0の6720制限は維持
    • 8Kタイミングを既定に設定すると3840×2160@2xモードは生成されるが、macOSが実際に8K信号を出力しようとして表示不可
  • IOKit Registry修正

    • DisplayHints, ConnectionMapping などDCP属性の直接修正を試行
    • カーネルドライバー(AppleDisplayCrossbar)が 書き込み拒否(kIOReturnUnsupported)
  • その他の試み

    • WindowServerキャッシュ削除、接続ディスプレイ数削減、HDMI切り替え、SkyLight非公開API(SLConfigureDisplayWithDisplayMode)呼び出しなど、いずれも失敗
    • Appleディスプレイに偽装(EDIDにApple Vendor IDを挿入)すると「Apple Pro Display X」と表示されるが、ExternalAppleLook=No のままで予算変化なし
  • IOKit属性書き込み結果の要約

    サービス メソッド 結果
    IOMobileFramebufferShim IORegistryEntrySetCFProperty kIOReturnUnsupported
    AppleDisplayCrossbar など IORegistryEntrySetCFProperty kIOReturnNotReady
    IOAVController IORegistryEntrySetCFProperty Accepted (ただしDCPには伝播しない)

RuntimePropertyブート引数テスト

  • ファームウェアには IOMobileFramebuffer::parse_RTP_boot_args() 関数が存在し、ブート時に属性を上書きできる可能性がある
    • 例: iomfb_RuntimeProperty_ExternalAppleLook, iomfb_enable_bw_check, iomfb_dual_pipe_policy など
  • SIPとStartup Securityを緩和した状態で sudo nvram boot-args= によりテストしたが、DCPファームウェアは反応しなかった
    • このコードパスは 開発用にのみ有効化 されていると推定される

Virtual Display Mirror による暫定的な回避策

  • force-hidpi CLIツール を作成し、SkyLightの非公開 SLVirtualDisplay API を利用して 仮想ディスプレイ(7680×4320) を生成し、実際の4Kパネルをハードウェアミラーリング
    • ハードウェアミラー経路は verify_downscaling 検査を回避する
    • system_profiler では「Hardware Mirror: Yes」と表示
  • この方式で 3840×2160 HiDPI を実現可能
    • テキストは鮮明で、macOS UIは通常の2x密度でレンダリングされる
    • 仮想ディスプレイは PQ(ST 2084) EOTF を使用し、SDRパネル向けのガンマ補正を適用
  • 欠点
    • ツールを常時実行しておく必要があり、終了すると1.0xに戻る
    • システム設定に追加ディスプレイが表示される
    • M2 MaxのネイティブHiDPIよりテキストレンダリングがやや異なる
    • 非公開API依存 のため、macOSアップデート時に不安定になる可能性がある

原因および修正可能性の要約

  • M2 Max: コントローラあたり7680ピクセル予算 → 3840×2160 HiDPI可能
  • M5 Max: sub-pipe構造に変更され、単一ストリームパイプ(0) が6720に制限
  • これにより4K HiDPI最大値が3360×1890へ縮小
  • EDID修正、ポート変更、ディスプレイ数調整などでは変更不可
  • 根本的な解決策は AppleがDCPファームウェア(t605xdcp.im4p)を修正 すること
    1. ハードコード定数 0x1A40 → 0x1E00 へ引き上げ
    2. 単一パイプでもマルチパイプHiDPIバッキングストアを許可
    3. 接続ディスプレイに基づく動的割り当てを許可
    4. 実行時属性またはブート引数を公開
  • Apple Feedback FB22365722 提出済み
  • Appleは問題を認識しており、現在は 製品ページにスケーリング解像度制限の警告を追加 して対応中

診断コマンド要約

  • ioreg -l -w0 | grep "IOMFBMaxSrcPixels" : パイプごとのフレームバッファ予算を確認
  • ioreg -l -w0 | grep "MaxVideoSrcDownscalingWidth" : スケーラ制限を確認
  • system_profiler SPDisplaysDataType : ディスプレイ概要
  • CGSGetNumberOfDisplayModes : HiDPIモード一覧を確認

M2 Max 正常動作の例

  • 3840×2160@2x HiDPIモードが存在
  • DCPパラメータ: MaxW=3840, MaxH=2160, MaxActivePixelRate=497,664,000
  • IOMFBMaxSrcPixelsMaxSrcRectWidth=7680 を確認
  • 同一のLG HDR 4Kディスプレイで完全なHiDPIモードを利用可能

2件のコメント

 
cnaa97 29 일 전

基本的なところは、もう少ししっかりしてほしい……

 
GN⁺ 29 일 전
Hacker Newsの意見
  • 最近 MacBook Pro M5 Pro を初めて買ったが、少し後悔している
    ノートPC自体は素晴らしいが、手元の LG 38WN95C-Wモニター(3840x1600@144Hz, USB-C) と きちんと互換性がない
    BetterDisplayで 3360x1400 HiDPI は可能だが、慣れていた画面スペースを失ってしまう
    M5 が前世代より悪いとは思わなかった。Appleは多くのことをうまくやっているが、こういう基本的な部分でミスをする
    いまや Apple Intelligence に、妻へ新しいモニターが必要だとどう説明すればいいか聞かないといけない気がする

    • 私も似た問題を経験したが、Tim Cookにメールしたら解決した
      Catalina以降、macOSが60Hz超のリフレッシュレートをサポートしなかった DisplayPort DSCバグ だった
      Appleサポートは数週間にわたり診断を繰り返した末に「WontFix」で終わったが、メール後に Sonoma で修正された
      関連フォーラムリンク
      • CEO宛てメールが実際に届くとは期待していないが、もしかしたらと思って私も送った
      • 私も M1 ProからM5 Proにアップグレード したが、同じドックとモニターの組み合わせでも4K 60Hz超が出ない
        macOS SequoiaからTahoeに変えた後に発生した問題だ
      • 私も今ちょうどメールした。本当にばかげた問題だ
      • この話で気づいたが、だから同じ144Hzモニターでも WindowsよりMacOSのほうが遅く感じていた のか
      • 完全に直ったわけではない。Appleが DP 1.4 を細工してProDisplay XDRを動かし、
        非AppleモニターにはGPUが1.2しかサポートしないと偽って交渉した可能性がある。
        今回の問題もその延長線上かもしれない
  • 投稿者がこの問題を解決するために途方もない努力を払ったのが分かる。
    ここまでしないとAppleが問題を認識しないのは残念だ

    • 私も 57" G9ウルトラワイド でPIP/PBP設定のせいで苦労した
      結局 BetterDisplay でMacの制限を解除し、DisplayLinkケーブル給電対応HDMIドングル を組み合わせて解決した
      5120x1440 @ lodpi はあまりにぼやけていたが、10240x2880 @ 120Hz HDR で安定した
      タイトルを見て笑ってしまった。OPの苦しみがあまりにもよく分かる
    • 私も週末じゅう頭を抱えて解決策を探したが、これといった回避策はなかった
    • 私も似た問題を経験したが、ClaudeやGPT でハードウェア問題を調べると、すぐに解決手順を提示してくれて役に立った
      投稿者もおそらくディスプレイの知識がほとんどない状態から始めたのだと思う
  • 私も新しい M4 MacBook で外部4Kモニターがぼやけて見えて気が狂いそうだった
    以前の設定をそのまま再現しても解決せず、もしかして Appleが自社製ディスプレイだけを最適化 しているのではと疑っている

    • macOSの 解像度・スケーリング処理方式 はいまだに奇妙だ
      Windows 11ですらこんな問題はないのに、macOSでは非Appleモニターで文字が不自然に見える
      昔のIntel Mac時代にもThunderboltドック接続でこうした問題を経験した
      サブピクセルレンダリングのオプション をまたサポートしてほしい
    • 「lodpi」がなぜぼやけるのか分からない。
      私は43" 4Kモニターを1xスケールで8年間使っているが、LinuxでもM1でもM4でも違いを感じなかった
    • 私も BetterDisplay であらゆる組み合わせを試したが、それでも フォントがぼやけていた。大きな5k2kモニターでは特につらかった
    • 最近のmacOS全体の品質の不安定さを見ると、単に 会社の管理不行き届き が原因である可能性が高い
  • もし EDIDが壊れたモニター なら、screenresolution CLI app で解決できるかもしれない
    これで任意の解像度とリフレッシュレートを設定し、100Hzまで安定して使えた

    • ありがとう。ただ、このツールは単に解像度とリフレッシュレートを変えるだけで、HiDPIスケーリング制御 はできないようだ
  • もしかして筆者は4Kディスプレイを 8Kフレームバッファでレンダリングしてからダウンスケール しようとしているのか?
    単純な4K low-DPIと比べてどんな利点があるのか気になる。いわば 無料のアンチエイリアシング なのか?

    • そう。macOSは2xスケールでないと テキストレンダリング品質が悪い ので、そうしている
    • 要点は、ネイティブでない解像度へスケーリングする際の品質低下を防ぐためだ
      Windowsは1.5xスケーリング時に文字がぼやけるが、macOSは 6Kフレームバッファを4Kへダウンスケール して鮮明さを保つ
    • 私も BetterDisplay で同じ方法を使っている
      2Kモニターでも仮想5Kフレームバッファを2Kへ縮小すると、macOS標準の2Kよりはるかに鮮明だ
  • 私も M5 Air で似た問題を経験した
    60Hzの4Kモニターは問題ないが、高リフレッシュレートの4Kゲーミングモニター2台 を同時接続すると1台が認識されない
    ケーブルを替えて試した末に、結局 帯域幅の限界 が原因だと気づいた

  • これは一般的な Retina構成 ではない。
    フレームバッファが実解像度よりはるかに大きく、そこからダウンスケールされる特殊な設定だ
    ほとんどのユーザーはこんな構成を望まないので、Appleも気にしていないのだろう

    • 私は標準的な LG UltraFine 4KM5 MacBook Pro に接続しただけなのに、これが異常構成だと言われても理解できない
    • それは一種の 2xスーパーサンプリング ではないか? 完璧なアンチエイリアシングにはその程度必要だ
    • 私もこれが異常構成だという意見に同意する。なぜわざわざ2倍のピクセルでレンダリングしてから半分に縮小するのか疑問だ
    • しかし 低価格のWindowsノートPC ですらこうした解像度処理を難なくこなすのに、
      クリエイター向けプラットフォームの代表格 であるMacがこれをできないのは少し残念だ
  • HiDPIなら1080p@2xではないのか? それはまだ可能なのか?

    • その通り。3840x2160ディスプレイなら、macOSで1920x1080@2xとして使うのが一般的だ
      なのに、なぜ7680x4320バッファを使うのか分からない。
      私はM4 Macで4Kディスプレイを5120x2880(2560x1440@2x)バッファとして使っているが、問題なく動いている
      macOS Sequoia時点の話だ
    • 私もこの記事の要点がよく分からない。4Kモニターで4K HiDPIというものは存在しない。
      それは8Kモニターで2160p@2xと言っているのと同じだ。4K 100%スケールはどのOSでも見栄えがよくない
    • 結局、2160p@2x という 異常な構成 の話をしているようだ
  • 記事に テキストのぼけ比較スクリーンショット があれば、もっと説得力があると思う

    • フィードバックありがとう。正確に撮るのは簡単ではないが、仕事が終わったら 写真を追加して更新 してみる予定だ