1 poin oleh GN⁺ 21 hari lalu | 2 komentar | Bagikan ke WhatsApp
  • Pada generasi M4·M5, monitor 4K eksternal tidak mendukung mode HiDPI 3840×2160@2x, dan maksimum hanya sampai 3360×1890
  • Batasan ini muncul karena perubahan struktur firmware Display Coprocessor (DCP), bukan masalah performa hardware
  • Pada M5 Max, anggaran framebuffer dialokasikan ulang per pipe, sehingga lebar single-stream pipe menyusut menjadi 6720 piksel
  • Berbagai metode seperti modifikasi EDID, mengganti port, dan menyesuaikan properti driver sudah dicoba namun semuanya tidak efektif
  • Saat ini solusi penuh hanya bisa didapat jika Apple memperbaiki firmware DCP, sementara solusi sementara adalah menerapkan 2x HiDPI lewat metode mirroring virtual display

Analisis batasan HiDPI layar eksternal 4K pada Apple Silicon M4/M5

  • Pada Apple Silicon generasi M4 dan M5, mode HiDPI 2x penuh (3840×2160@2x) untuk monitor 4K eksternal tidak tersedia
    • Mode HiDPI maksimum dibatasi ke 3360×1890, sehingga 3840×2160 HiDPI yang sebelumnya bisa digunakan di generasi lama (M2/M3) kini tidak memungkinkan
    • Pengguna harus memilih antara teks buram pada mode non-HiDPI atau teks tajam tetapi ruang kerja lebih sempit
  • Batasan ini berasal dari perubahan struktur firmware Display Coprocessor (DCP), bukan batasan hardware
    • Secara spesifikasi M5 Max mendukung 8K@60Hz, tetapi kemampuan yang dilaporkan DCP sama dengan M2 Max
    • Pada generasi M4/M5, framebuffer budget dialokasikan ulang per pipe, sehingga anggaran jalur 4K standar menyusut dari 7680 piksel menjadi 6720 piksel
    • Hasil disassembly firmware DCP menunjukkan nilai 6720 (0x1A40) ada sebagai konstanta hard-coded

Lingkungan pengujian dan hasil perbandingan

Item M5 Max (bermasalah) M2 Max (normal)
Chip Apple M5 Max Apple M2 Max
Model ID Mac17,6 Mac14,6
Core GPU 40 38
macOS 26.4 (25E246) 26.4 (25E246)
Layar LG HDR 4K 32UN880 LG HDR 4K 32UN880
Koneksi USB-C/Thunderbolt (HBR3, 8.1Gbps, 4 lanes) Sama
Mode HiDPI maksimum 3360×1890 3840×2160
  • Pada kedua sistem, parameter DCP seperti MaxActivePixelRate, MaxW, MaxH, MaxBpc identik
  • Pada output system_profiler, backing store M5 Max ditampilkan sebagai 6720×3780, dan UI sebagai 3360×1890 HiDPI
  • Dalam daftar HiDPI modes, entri 3840×2160@2x juga tidak ada

Perubahan struktur framebuffer dan pipe

  • M2 Max menggunakan satu anggaran per controller (MaxSrcRectWidth=7680)
  • M5 Max berubah ke struktur anggaran per sub-pipe (MaxSrcRectWidthForPipe=(6720,7680,7680,7680))
    • Output 4K single-stream hanya memakai sub-pipe 0 (6720)
    • Output 8K memakai 2 sub-pipe (0,2)
  • Akibatnya, 4K HiDPI (backing store 7680×4320) tidak bisa dibuat karena melebihi anggaran sub-pipe 0
Sub-pipe MaxSrcRectWidth Fungsi
0 6720 Single stream (layar standar)
1–3 7680 Multi-pipe (8K dan sejenisnya)
  • Perbandingan MaxVideoSrcDownscalingWidth
    Controller MaxSrcRectWidthForPipe[0] MaxVideoSrcDownscalingWidth Rasio
    Layar internal 5120 10744 2.1x
    Layar eksternal 6720 6720 1.0x
    • Layar internal punya ruang scaler, tetapi layar eksternal tidak, sehingga 3840×2160 HiDPI tidak memungkinkan
  • MaxSrcRectWidthForPipe dan MaxVideoSrcDownscalingWidth dikunci saat driver dimuat dan tidak bisa diubah saat runtime
    • Mengganti port, mode clamshell, atau memodifikasi EDID tetap menghasilkan nilai 6720 yang sama

Analisis firmware DCP

  • File firmware berada di jalur /System/Volumes/Preboot/<UUID>/restore/Firmware/dcp/, dan M5 Max memakai t605xdcp.im4p
    • Berada dalam keadaan terkompresi LZFSE (4.1MB → 16.4MB) dan tidak terenkripsi, sehingga bisa diekstrak dengan img4tool
  • Properti terkait HiDPI seperti MaxVideoSrcDownscalingWidth, MaxSrcRectWidthForPipe, IOMFBMaxSrcPixels, ExternalAppleLook semuanya didefinisikan di dalam firmware ini
  • Fungsi IOMFB::UPPipe::verify_downscaling(SwapRequest *) memverifikasi lebar source yang diminta berdasarkan MaxVideoSrcDownscalingWidth
  • Hasil analisis Ghidra
    • Sub-pipe 0 layar eksternal: 0x1A40 (6720)
    • Sub-pipe 1~3: 0x1E00 (7680)
    • Sub-pipe 0 layar internal: 0x1400 (5120)
    • Tinggi semua Sub-pipe: 0x1200 (4608)
  • Batasan bekerja dalam dua tahap
    1. MaxSrcRectWidthForPipe[0] (6720) → membatasi pada tahap enumerasi mode
    2. MaxVideoSrcDownscalingWidth (6720) → membatasi pada tahap verifikasi runtime
  • Karena pipe lain pada controller yang sama mendukung 7680, ini menegaskan bahwa batasan tersebut adalah kebijakan firmware, bukan keterbatasan hardware

Upaya penyelesaian masalah

  • Display Override Plist

    • Menambahkan resolusi HiDPI 7680×4320 ke /Library/Displays/.../DisplayVendorID-1e6d/DisplayProductID-7750
    • Tidak berpengaruh pada M5 Max, tetapi bekerja normal pada M2 Max
    • WindowServer pada M5 Max tidak mengenumerasi mode tersebut
  • Patch EDID via software

    • Menyisipkan EDID yang dimodifikasi ke IODisplayEDID (4095×4095, maksimum pixel clock 655.35MHz, dll.)
    • Tidak berpengaruh
    • Pengembang BetterDisplay melaporkan kasus berhasil memperoleh framebuffer 8K lewat software EDID override pada M4
    • Namun panel 4K tidak bisa benar-benar menampilkan sinyal 8K, jadi ini bukan solusi praktis
  • Flash EDID via hardware

    • Menambahkan mode 7680×4320@60Hz (VIC 199) ke EDID lalu mem-flash ke EEPROM monitor LG
    • DCP memperbarui MaxW=7680, MaxH=4320, tetapi batas 6720 pada sub-pipe 0 tetap ada
    • Jika timing 8K dijadikan default, mode 3840×2160@2x memang muncul, tetapi macOS mencoba mengeluarkan sinyal 8K sungguhan sehingga layar tidak bisa menampilkannya
  • Modifikasi IOKit Registry

    • Mencoba langsung mengubah properti DCP seperti DisplayHints, ConnectionMapping
    • Driver kernel (AppleDisplayCrossbar) menolak penulisan (kIOReturnUnsupported)
  • Upaya lain

    • Menghapus cache WindowServer, mengurangi jumlah layar terhubung, berpindah ke HDMI, memanggil API privat SkyLight (SLConfigureDisplayWithDisplayMode) semuanya gagal
    • Saat menyamar sebagai layar Apple (menyisipkan Apple Vendor ID ke EDID), monitor tampil sebagai “Apple Pro Display X” tetapi ExternalAppleLook=No dan anggaran tidak berubah
  • Ringkasan hasil penulisan properti IOKit

    Service Method Hasil
    IOMobileFramebufferShim IORegistryEntrySetCFProperty kIOReturnUnsupported
    AppleDisplayCrossbar dkk. IORegistryEntrySetCFProperty kIOReturnNotReady
    IOAVController IORegistryEntrySetCFProperty Accepted (namun tidak diteruskan ke DCP)

Pengujian boot arg RuntimeProperty

  • Di firmware ada fungsi IOMobileFramebuffer::parse_RTP_boot_args() yang menunjukkan kemungkinan override properti saat boot
    • Contoh: iomfb_RuntimeProperty_ExternalAppleLook, iomfb_enable_bw_check, iomfb_dual_pipe_policy, dll.
  • Pengujian dilakukan lewat sudo nvram boot-args= dengan SIP dan Startup Security yang sudah dilonggarkan, tetapi firmware DCP tidak merespons
    • Diduga jalur kode tersebut hanya aktif untuk keperluan pengembangan

Solusi sementara lewat Virtual Display Mirror

  • Dibuat alat CLI force-hidpi yang memanfaatkan API privat SLVirtualDisplay milik SkyLight untuk membuat virtual display (7680×4320) lalu mem-mirror panel 4K sungguhan secara hardware
    • Jalur hardware mirror melewati pemeriksaan verify_downscaling
    • Pada system_profiler, ini tampil sebagai “Hardware Mirror: Yes”
  • Dengan cara ini, 3840×2160 HiDPI bisa diwujudkan
    • Teks terlihat tajam dan UI macOS dirender dengan densitas 2x yang normal
    • Virtual display memakai PQ (ST 2084) EOTF dan menerapkan koreksi gamma untuk panel SDR
  • Kekurangan
    • Alat harus terus berjalan, dan jika dihentikan sistem kembali ke 1.0x
    • Display tambahan muncul di System Settings
    • Rendering teks sedikit berbeda dibanding HiDPI native di M2 Max
    • Karena bergantung pada API privat, ada risiko tidak stabil setelah update macOS

Ringkasan penyebab dan kemungkinan perbaikan

  • M2 Max: anggaran 7680 piksel per controller → 3840×2160 HiDPI memungkinkan
  • M5 Max: berubah ke struktur sub-pipe sehingga single-stream pipe (0) dibatasi ke 6720
  • Akibatnya, batas maksimum 4K HiDPI turun menjadi 3360×1890
  • Modifikasi EDID, mengganti port, atau mengubah jumlah layar tidak bisa mengatasinya
  • Solusi fundamental adalah Apple memperbaiki firmware DCP (t605xdcp.im4p)
    1. Menaikkan konstanta hard-coded 0x1A40 → 0x1E00
    2. Mengizinkan backing store HiDPI multi-pipe bahkan pada single pipe
    3. Mengizinkan alokasi dinamis berdasarkan layar yang terhubung
    4. Mengekspos properti runtime atau boot arg
  • Apple Feedback FB22365722 sudah diajukan
  • Apple disebut sudah mengetahui masalah ini, dan saat ini merespons dengan menambahkan peringatan batas resolusi skala di halaman produk

Ringkasan perintah diagnosis

  • ioreg -l -w0 | grep "IOMFBMaxSrcPixels" : memeriksa anggaran framebuffer per pipe
  • ioreg -l -w0 | grep "MaxVideoSrcDownscalingWidth" : memeriksa batas scaler
  • system_profiler SPDisplaysDataType : ringkasan layar
  • CGSGetNumberOfDisplayModes : memeriksa daftar mode HiDPI

Contoh operasi normal pada M2 Max

  • Mode HiDPI 3840×2160@2x tersedia
  • Parameter DCP: MaxW=3840, MaxH=2160, MaxActivePixelRate=497,664,000
  • IOMFBMaxSrcPixels menunjukkan MaxSrcRectWidth=7680
  • Pada layar LG HDR 4K yang sama, mode HiDPI penuh bisa digunakan

2 komentar

 
cnaa97 21 hari lalu

Hal-hal dasarnya tolong dibereskan dengan lebih pasti dulu..

 
GN⁺ 21 hari lalu
Komentar Hacker News
  • Saya baru membeli MacBook Pro M5 Pro pertama saya dan agak menyesal
    Laptopnya sendiri luar biasa, tetapi tidak kompatibel dengan baik dengan monitor LG 38WN95C-W saya (3840x1600@144Hz, USB-C)
    Dengan BetterDisplay, 3360x1400 HiDPI memang bisa, tetapi saya kehilangan ruang layar yang sudah biasa saya pakai
    Saya tidak menyangka M5 akan lebih buruk daripada generasi sebelumnya. Apple melakukan banyak hal dengan baik, tetapi mereka gagal di hal mendasar seperti ini
    Sepertinya sekarang saya harus bertanya ke Apple Intelligence bagaimana menjelaskan kepada istri saya bahwa saya butuh monitor baru

    • Saya juga mengalami masalah serupa, dan setelah mengirim email ke Tim Cook masalahnya terselesaikan
      Ternyata itu adalah bug DisplayPort DSC di mana macOS sejak Catalina tidak mendukung refresh rate di atas 60Hz
      Tim dukungan Apple hanya mengulang diagnosis selama beberapa minggu lalu menutupnya sebagai “WontFix”, tetapi setelah email itu, masalahnya diperbaiki di Sonoma
      Tautan forum terkait
      • Saya tidak benar-benar berharap email ke CEO akan diteruskan, tetapi siapa tahu, jadi saya juga mengirimkannya
      • Saya juga upgrade dari M1 Pro ke M5 Pro, tetapi bahkan dengan kombinasi dock dan monitor yang sama, 4K di atas 60Hz tidak berfungsi
        Masalah ini muncul setelah pindah dari macOS Sequoia ke Tahoe
      • Saya juga baru saja mengirim email. Ini masalah yang benar-benar konyol
      • Dari cerita ini saya baru sadar, jadi itu alasan MacOS saya terasa lebih lambat daripada Windows pada monitor 144Hz yang sama
      • Ini belum benar-benar diperbaiki. Apple menjalankan ProDisplay XDR dengan memanipulasi DP 1.4,
        dan mungkin menegosiasikan dengan berpura-pura ke monitor non-Apple bahwa GPU hanya mendukung 1.2.
        Masalah kali ini mungkin masih satu garis dengan itu
  • Terlihat jelas penulis mengerahkan usaha luar biasa untuk menyelesaikan masalah ini.
    Sangat disayangkan Apple baru menyadari masalah setelah orang harus sampai sejauh ini

    • Saya juga kesulitan dengan pengaturan PIP/PBP di 57" G9 ultrawide
      Pada akhirnya saya menyelesaikannya dengan membuka batasan Mac di BetterDisplay, lalu menggabungkan kabel DisplayLink dan dongle HDMI bertenaga
      5120x1440 @ lodpi terlalu buram, tetapi akhirnya stabil di 10240x2880 @ 120Hz HDR
      Saya tertawa melihat judulnya. Penderitaan OP terasa sangat relate
    • Saya juga menghabiskan sepanjang akhir pekan memutar otak mencari solusi, tetapi tidak ada jalan memutar yang memadai
    • Saya juga pernah mengalami masalah serupa, dan menelusuri masalah hardware dengan Claude atau GPT cukup membantu karena cepat memberi langkah-langkah pemecahan
      Penulis kemungkinan juga memulai dengan pengetahuan display yang hampir nol
  • Saya juga hampir gila karena monitor 4K eksternal terlihat buram di M4 MacBook baru saya
    Menyalin pengaturan lama pun tidak menyelesaikannya, dan saya mulai curiga apakah Apple hanya mengoptimalkan untuk display buatannya sendiri

    • Cara macOS menangani resolusi dan scaling masih terasa aneh
      Bahkan Windows 11 tidak punya masalah seperti ini, tetapi di macOS teks terlihat canggung pada monitor non-Apple
      Dulu pada era Intel Mac saya juga mengalami masalah ini saat terhubung lewat dock Thunderbolt
      Saya berharap mereka kembali mendukung opsi subpixel rendering
    • Saya tidak paham kenapa “lodpi” dianggap buram.
      Saya sudah 8 tahun memakai monitor 43" 4K pada skala 1x, dan tidak merasakan perbedaan antara Linux, M1, dan M4
    • Saya juga mencoba semua kombinasi lewat BetterDisplay, tetapi font tetap buram. Pada monitor 5k2k besar, ini terasa sangat menjengkelkan
    • Melihat kualitas macOS secara keseluruhan yang belakangan ini tidak stabil, besar kemungkinan ini cuma akibat buruknya pengelolaan perusahaan
  • Kalau monitor Anda mungkin punya EDID yang bermasalah, ini bisa diatasi dengan aplikasi CLI screenresolution
    Dengan itu saya bisa mengatur resolusi dan refresh rate sesuka hati, dan memakainya dengan stabil hingga 100Hz

    • Terima kasih. Namun sepertinya tool ini hanya mengubah resolusi dan refresh rate, dan tidak bisa mengontrol scaling HiDPI
  • Apakah penulis mencoba membuat display 4K itu dirender sebagai framebuffer 8K lalu di-downscale?
    Saya penasaran apa keuntungannya dibanding 4K low-DPI biasa. Apakah ini semacam anti-aliasing gratis?

    • Benar. Saat bukan pada skala 2x, kualitas rendering teks di macOS buruk, jadi itulah alasannya
    • Intinya untuk mencegah penurunan kualitas saat scaling pada resolusi non-native
      Di Windows, teks bisa terlihat buram pada scaling 1.5x, tetapi di macOS framebuffer 6K di-downscale ke 4K agar ketajaman tetap terjaga
    • Saya juga memakai cara yang sama dengan BetterDisplay
      Bahkan pada monitor 2K, jika framebuffer virtual 5K diperkecil ke 2K, hasilnya jauh lebih tajam daripada 2K bawaan macOS
  • Saya juga mengalami masalah serupa di M5 Air
    Monitor 4K 60Hz baik-baik saja, tetapi saat dua monitor gaming 4K refresh rate tinggi dihubungkan sekaligus, salah satunya tidak terdeteksi
    Setelah mencoba mengganti kabel, saya akhirnya sadar penyebabnya adalah batas bandwidth

  • Ini bukan konfigurasi Retina yang umum.
    Framebuffer-nya jauh lebih besar daripada resolusi sebenarnya lalu di-downscale, jadi ini pengaturan yang tidak lazim
    Karena kebanyakan pengguna tidak menginginkan konfigurasi seperti ini, tampaknya Apple tidak terlalu peduli

    • Saya hanya menghubungkan LG UltraFine 4K standar ke M5 MacBook Pro, jadi saya tidak paham kenapa ini dianggap konfigurasi tidak normal
    • Bukankah itu semacam supersampling 2x? Untuk anti-aliasing yang sempurna, memang kira-kira sebanyak itu yang dibutuhkan
    • Saya juga setuju bahwa ini konfigurasi yang tidak normal. Saya heran kenapa harus merender dengan piksel 2x lalu mengecilkannya lagi menjadi setengah
    • Tetapi bahkan laptop Windows kelas bawah bisa menangani resolusi seperti ini tanpa kesulitan,
      jadi agak mengecewakan bahwa Mac, yang dianggap platform andalan untuk kreator, tidak bisa melakukannya
  • Kalau HiDPI, bukankah itu 1080p@2x? Apakah itu masih memungkinkan?

    • Benar. Pada display 3840x2160, yang umum di macOS adalah memakai 1920x1080@2x
      Tetapi saya tidak mengerti kenapa harus memakai buffer 7680x4320.
      Di M4 Mac saya memakai display 4K dengan buffer 5120x2880(2560x1440@2x) dan itu berjalan baik
      Ini di macOS Sequoia
    • Saya juga kurang paham inti tulisan ini. 4K HiDPI tidak ada pada monitor 4K.
      Itu sebenarnya hanya 2160p@2x pada monitor 8K. Skala 100% di 4K memang tidak enak dilihat di OS mana pun
    • Pada akhirnya yang dimaksud sepertinya adalah konfigurasi 2160p@2x yang tidak biasa
  • Tulisan ini akan lebih meyakinkan kalau ada screenshot perbandingan blur teks

    • Terima kasih atas masukannya. Memotret dengan akurat memang tidak mudah, tetapi setelah pulang kerja saya berencana menambahkan foto dan memperbarui tulisan ini