1 puntos por GN⁺ 29 일 전 | 2 comentarios | Compartir por WhatsApp
  • En la generación M4·M5 no se admite el modo 3840×2160@2x HiDPI en monitores externos 4K, y el máximo posible es 3360×1890
  • Esta limitación se debe a un cambio en la estructura del firmware del Display Coprocessor (DCP), no a un problema de rendimiento del hardware
  • En el M5 Max, el presupuesto de framebuffer se reasignó por pipe, reduciendo el ancho del pipe de flujo único a 6720 píxeles
  • Se probaron varios métodos, como modificar el EDID, cambiar de puerto y ajustar propiedades del controlador, pero ninguno funcionó
  • Actualmente, la única solución completa sería que Apple corrija el firmware del DCP; como alternativa temporal, se puede lograr 2x HiDPI mediante duplicación con pantalla virtual

Análisis de la limitación HiDPI en pantallas externas 4K con Apple Silicon M4/M5

  • En las generaciones Apple Silicon M4 y M5, no se ofrece el modo HiDPI 2x completo (3840×2160@2x) en monitores externos 4K
    • El modo HiDPI máximo está limitado a 3360×1890, por lo que ya no es posible usar 3840×2160 HiDPI como sí ocurría en generaciones anteriores (M2/M3)
    • El usuario debe elegir entre texto borroso en modo no HiDPI o un espacio de trabajo nítido pero más reducido
  • Esta limitación proviene de un cambio en la estructura del firmware del Display Coprocessor (DCP), no de una limitación de hardware
    • Según las especificaciones, el M5 Max admite 8K@60Hz, pero la funcionalidad que reporta el DCP es la misma que en el M2 Max
    • En las generaciones M4/M5, el presupuesto de framebuffer se reasignó por pipe, y el presupuesto de la ruta 4K estándar se redujo de 7680 píxeles a 6720 píxeles
    • El desensamblado del firmware DCP muestra que el valor 6720 (0x1A40) existe como una constante codificada de forma fija

Entorno de pruebas y resultados comparativos

Elemento M5 Max (con problema) M2 Max (funciona correctamente)
Chip Apple M5 Max Apple M2 Max
ID de modelo Mac17,6 Mac14,6
Núcleos GPU 40 38
macOS 26.4 (25E246) 26.4 (25E246)
Pantalla LG HDR 4K 32UN880 LG HDR 4K 32UN880
Conexión USB-C/Thunderbolt (HBR3, 8.1Gbps, 4 lanes) Igual
Modo HiDPI máximo 3360×1890 3840×2160
  • En ambos sistemas, los parámetros del DCP como MaxActivePixelRate, MaxW, MaxH y MaxBpc son iguales
  • En la salida de system_profiler, el backing store del M5 Max aparece como 6720×3780, y la UI como 3360×1890 HiDPI
  • En la lista de HiDPI modes tampoco aparece la entrada 3840×2160@2x

Cambios en la estructura de framebuffer y pipes

  • El M2 Max usa un presupuesto único por controlador (MaxSrcRectWidth=7680)
  • El M5 Max cambió a una estructura de presupuesto por sub-pipe (MaxSrcRectWidthForPipe=(6720,7680,7680,7680))
    • La salida 4K de flujo único usa solo el sub-pipe 0 (6720)
    • La salida 8K usa 2 sub-pipes (0,2)
  • Como resultado, el 4K HiDPI (backing store de 7680×4320) supera el presupuesto del sub-pipe 0 y no puede generarse
Sub-pipe MaxSrcRectWidth Uso
0 6720 Flujo único (pantalla estándar)
1–3 7680 Multi-pipe (8K, etc.)
  • Comparación de MaxVideoSrcDownscalingWidth
    Controlador MaxSrcRectWidthForPipe[0] MaxVideoSrcDownscalingWidth Proporción
    Pantalla interna 5120 10744 2.1x
    Pantalla externa 6720 6720 1.0x
    • La pantalla interna tiene margen en el escalador, pero la externa no, por lo que 3840×2160 HiDPI no es posible
  • MaxSrcRectWidthForPipe y MaxVideoSrcDownscalingWidth quedan fijados al cargar el controlador, por lo que no pueden modificarse en tiempo de ejecución
    • Incluso al cambiar de puerto, usar modo clamshell o modificar el EDID, el valor 6720 permanece igual

Análisis del firmware DCP

  • El archivo de firmware está en la ruta /System/Volumes/Preboot/<UUID>/restore/Firmware/dcp/, y el M5 Max usa t605xdcp.im4p
    • Está en estado de compresión LZFSE (4.1MB → 16.4MB) y no está cifrado, por lo que puede extraerse con img4tool
  • Las propiedades relacionadas con HiDPI (MaxVideoSrcDownscalingWidth, MaxSrcRectWidthForPipe, IOMFBMaxSrcPixels, ExternalAppleLook) están definidas dentro de este firmware
  • La función IOMFB::UPPipe::verify_downscaling(SwapRequest *) valida el ancho de origen solicitado usando MaxVideoSrcDownscalingWidth
  • Resultados del análisis con Ghidra
    • Sub-pipe 0 de pantalla externa: 0x1A40 (6720)
    • Sub-pipes 1~3: 0x1E00 (7680)
    • Sub-pipe 0 de pantalla interna: 0x1400 (5120)
    • Altura de todos los sub-pipes: 0x1200 (4608)
  • La limitación funciona en dos etapas
    1. MaxSrcRectWidthForPipe[0] (6720) → limita durante la etapa de enumeración de modos
    2. MaxVideoSrcDownscalingWidth (6720) → limita durante la validación en tiempo de ejecución
  • Como otros pipes del mismo controlador sí admiten 7680, se confirma que es una política del firmware y no una restricción de hardware

Intentos de solución

  • Display Override Plist

    • Se añadió la resolución HiDPI 7680×4320 en /Library/Displays/.../DisplayVendorID-1e6d/DisplayProductID-7750
    • En el M5 Max no tuvo efecto; en el M2 Max funcionó normalmente
    • WindowServer del M5 Max no enumera ese modo
  • Parche de software para EDID

    • Se insertó un EDID modificado en IODisplayEDID (4095×4095, reloj máximo de píxel 655.35MHz, etc.)
    • Sin efecto
    • Un desarrollador de BetterDisplay reportó un caso exitoso en M4 al obtener un framebuffer 8K mediante override de EDID por software
    • Sin embargo, una pantalla 4K no puede mostrar una señal 8K real, por lo que no es una solución práctica
  • Flasheo de hardware del EDID

    • Se añadió el modo 7680×4320@60Hz (VIC 199) al EDID y luego se flasheó en la EEPROM del monitor LG
    • El DCP actualiza MaxW=7680 y MaxH=4320, pero se mantiene la limitación de 6720 en el sub-pipe 0
    • Al fijar el timing 8K como predeterminado, se genera el modo 3840×2160@2x, pero macOS intenta emitir una señal 8K real y no puede mostrarse
  • Modificación del registro IOKit

    • Se intentó modificar directamente propiedades del DCP como DisplayHints y ConnectionMapping
    • El controlador del kernel (AppleDisplayCrossbar) rechaza la escritura (kIOReturnUnsupported)
  • Otros intentos

    • Borrar la caché de WindowServer, reducir el número de pantallas conectadas, cambiar a HDMI y llamar a la API privada de SkyLight (SLConfigureDisplayWithDisplayMode) también fallaron
    • Al hacerse pasar por una pantalla Apple (insertando Apple Vendor ID en el EDID), aparece como “Apple Pro Display X”, pero ExternalAppleLook=No y el presupuesto no cambia
  • Resumen de resultados de escritura de propiedades IOKit

    Servicio Método Resultado
    IOMobileFramebufferShim IORegistryEntrySetCFProperty kIOReturnUnsupported
    AppleDisplayCrossbar y otros IORegistryEntrySetCFProperty kIOReturnNotReady
    IOAVController IORegistryEntrySetCFProperty Accepted (pero no se transmite al DCP)

Prueba de argumentos de arranque RuntimeProperty

  • En el firmware existe la función IOMobileFramebuffer::parse_RTP_boot_args(), lo que sugiere la posibilidad de redefinir propiedades al arrancar
    • Ej.: iomfb_RuntimeProperty_ExternalAppleLook, iomfb_enable_bw_check, iomfb_dual_pipe_policy, etc.
  • Se hicieron pruebas con sudo nvram boot-args= tras relajar SIP y Startup Security, pero el firmware DCP no reaccionó
    • Se presume que esa ruta de código solo está habilitada para desarrollo

Solución temporal con Virtual Display Mirror

  • Se creó la herramienta CLI force-hidpi, que usa la API privada SLVirtualDisplay de SkyLight para crear una pantalla virtual (7680×4320) y luego duplicar por hardware el panel 4K real
    • La ruta de duplicación por hardware evita la verificación verify_downscaling
    • En system_profiler aparece como “Hardware Mirror: Yes”
  • Con este método sí es posible implementar 3840×2160 HiDPI
    • El texto se ve nítido y la UI de macOS se renderiza con la densidad 2x normal
    • La pantalla virtual usa PQ (ST 2084) EOTF y aplica corrección gamma para paneles SDR
  • Desventajas
    • La herramienta debe ejecutarse permanentemente; si se cierra, vuelve a 1.0x
    • En la configuración del sistema aparece una pantalla adicional
    • El renderizado del texto difiere ligeramente del HiDPI nativo del M2 Max
    • Depende de APIs privadas, así que podría volverse inestable con futuras actualizaciones de macOS

Resumen de la causa y posibilidades de corrección

  • M2 Max: presupuesto de 7680 píxeles por controlador → permite 3840×2160 HiDPI
  • M5 Max: cambio a estructura por sub-pipe, con el pipe de flujo único (0) limitado a 6720
  • Como resultado, el máximo de 4K HiDPI se reduce a 3360×1890
  • No puede cambiarse mediante modificación de EDID, cambio de puerto o ajuste del número de pantallas
  • La solución de fondo es que Apple modifique el firmware DCP (t605xdcp.im4p)
    1. Aumentar la constante codificada 0x1A40 → 0x1E00
    2. Permitir un backing store HiDPI multi-pipe incluso en single pipe
    3. Permitir asignación dinámica según la pantalla conectada
    4. Exponer propiedades en tiempo de ejecución o argumentos de arranque
  • Se envió el Apple Feedback FB22365722
  • Apple conoce el problema y, por ahora, está respondiendo añadiendo una advertencia sobre la limitación de resolución escalada en la página del producto

Resumen de comandos de diagnóstico

  • ioreg -l -w0 | grep "IOMFBMaxSrcPixels" : comprobar el presupuesto de framebuffer por pipe
  • ioreg -l -w0 | grep "MaxVideoSrcDownscalingWidth" : comprobar la limitación del escalador
  • system_profiler SPDisplaysDataType : resumen de pantallas
  • CGSGetNumberOfDisplayModes : comprobar la lista de modos HiDPI

Ejemplo de funcionamiento correcto en M2 Max

  • Existe el modo 3840×2160@2x HiDPI
  • Parámetros DCP: MaxW=3840, MaxH=2160, MaxActivePixelRate=497,664,000
  • En IOMFBMaxSrcPixels se confirma MaxSrcRectWidth=7680
  • Con la misma pantalla LG HDR 4K puede usarse el modo HiDPI completo

2 comentarios

 
cnaa97 29 일 전

Lo básico sí deberían dejarlo bien resuelto...

 
GN⁺ 29 일 전
Comentarios de Hacker News
  • Hace poco compré por primera vez una MacBook Pro M5 Pro y la verdad me estoy arrepintiendo un poco
    La laptop en sí es excelente, pero no es realmente compatible con mi monitor LG 38WN95C-W (3840x1600@144Hz, USB-C)
    Con BetterDisplay puedo usar 3360x1400 HiDPI, pero pierdo espacio de pantalla al que ya estaba acostumbrado
    No esperaba que la M5 fuera peor que la generación anterior. Apple hace muchas cosas bien, pero falla en cosas básicas como esta
    Ahora supongo que tendré que preguntarle a Apple Intelligence cómo explicarle a mi esposa que necesito un monitor nuevo

    • A mí me pasó algo parecido, pero se resolvió después de mandarle un correo a Tim Cook
      Era un bug de DisplayPort DSC por el que macOS no soportaba tasas de refresco mayores a 60Hz desde Catalina
      El equipo de soporte de Apple se pasó semanas repitiendo diagnósticos y al final lo cerró como “WontFix”, pero después del correo quedó corregido en Sonoma
      Enlace al foro relacionado
      • No espero realmente que un correo al CEO llegue a algún lado, pero por si acaso, yo también envié uno
      • Yo también actualicé de M1 Pro a M5 Pro, y con la misma combinación de dock y monitor tampoco consigo más de 4K 60Hz
        El problema apareció después de cambiar de macOS Sequoia a Tahoe
      • Yo también acabo de enviar el correo. Es un problema realmente absurdo
      • Me acabo de enterar por esto, así que esa era la razón por la que mi MacOS se sentía más lento que Windows en el mismo monitor de 144Hz
      • No está del todo arreglado. Apple manipuló DP 1.4 para hacer funcionar el ProDisplay XDR,
        y puede que haya negociado fingiendo ante monitores que no son de Apple que la GPU solo soportaba 1.2.
        Este problema podría ser una continuación de eso
  • Se nota que el autor hizo un esfuerzo enorme para resolver este problema.
    Da pena que Apple solo se dé por enterada cuando uno tiene que llegar tan lejos

    • Yo también sufrí con una ultrawide G9 de 57" por la configuración PIP/PBP
      Al final lo resolví quitando las limitaciones de Mac con BetterDisplay, y combinando un cable DisplayLink con un dongle HDMI con alimentación
      5120x1440 @ lodpi se veía demasiado borroso, pero logré estabilizarlo en 10240x2880 @ 120Hz HDR
      Me dio risa leer el título. Me identifiqué demasiado con el dolor del OP
    • Yo también me quebré la cabeza todo el fin de semana buscando una solución, pero no había una alternativa decente
    • A mí me pasó algo parecido, y explorar el problema de hardware con Claude o GPT fue útil porque me sugirieron rápidamente pasos para resolverlo
      El autor probablemente también empezó casi sin conocimientos de pantallas
  • Yo también casi me vuelvo loco porque en mi nueva MacBook M4 un monitor 4K externo se veía borroso
    Ni siquiera replicando la configuración anterior se arregló, y me hizo sospechar si Apple no estará optimizando solo para sus propias pantallas

    • La forma en que macOS maneja la resolución y el escalado sigue siendo extraña
      Incluso Windows 11 no tiene este problema, pero en macOS el texto se ve raro en monitores que no son de Apple
      Ya había sufrido esto en la época de las Mac Intel al conectar un dock Thunderbolt
      Ojalá volvieran a dar soporte a la opción de renderizado subpíxel
    • No entiendo por qué dicen que “lodpi” se ve borroso.
      Llevo 8 años usando un monitor 4K de 43" a escala 1x, y no noto diferencia entre Linux, M1 y M4
    • Yo también probé todas las combinaciones con BetterDisplay, pero las fuentes seguían viéndose borrosas. En un monitor grande 5k2k era especialmente frustrante
    • Viendo lo inestable que anda la calidad general de macOS últimamente, es muy posible que esto solo sea mala gestión interna de la empresa
  • Si acaso es un monitor con el EDID dañado, tal vez se pueda arreglar con la app CLI screenresolution
    Con eso pude fijar resoluciones y tasas de refresco arbitrarias y usarlo de forma estable hasta 100Hz

    • Gracias. Aunque parece que esta herramienta solo cambia resolución y tasa de refresco, y no controla el escalado HiDPI
  • ¿Será que el autor está intentando renderizar en un framebuffer 8K y luego reescalarlo para una pantalla 4K?
    Me pregunto qué ventaja tendría frente a un 4K simple en low-DPI. ¿Es como una especie de antialiasing gratis?

    • Sí. macOS tiene mala calidad de renderizado de texto cuando no está en escala 2x, así que por eso lo hacen
    • La idea clave es evitar la pérdida de calidad al escalar en resoluciones no nativas
      En Windows, al usar escalado 1.5x el texto puede verse borroso, pero macOS reduce un framebuffer 6K a 4K para mantener la nitidez
    • Yo también uso BetterDisplay de esa misma forma
      Incluso en un monitor 2K, si reduzco un framebuffer virtual 5K a 2K, se ve mucho más nítido que el 2K nativo de macOS
  • Yo también tuve un problema parecido en una M5 Air
    Un monitor 4K a 60Hz funciona bien, pero si conecto dos monitores gamer 4K de alta tasa de refresco al mismo tiempo, uno de ellos no es detectado
    Después de cambiar cables varias veces, entendí que al final era una limitación de ancho de banda

  • Esta no es una configuración Retina normal.
    Es una configuración peculiar donde el framebuffer es mucho más grande que la resolución real y luego se reduce
    Como la mayoría de usuarios no quiere algo así, parece que Apple no le presta atención

    • Yo solo conecté un LG UltraFine 4K estándar a una MacBook Pro M5, así que no entiendo por qué eso sería una configuración anormal
    • ¿No sería algo así como un supersampling 2x? Para un antialiasing perfecto, haría falta algo así
    • Yo también estoy de acuerdo con que es una configuración anormal. No entiendo por qué habría que renderizar al doble de píxeles para luego volver a reducirlo a la mitad
    • Pero hasta una laptop Windows de gama de entrada maneja este tipo de resolución sin problemas,
      así que decepciona un poco que Mac, que se vende como la plataforma por excelencia para creadores, no pueda con algo así
  • Si es HiDPI, ¿no sería entonces 1080p@2x? ¿Eso sigue siendo posible?

    • Sí. En una pantalla 3840x2160, lo normal en macOS es usar 1920x1080@2x
      Pero no entiendo por qué usarían un buffer de 7680x4320.
      Yo uso una pantalla 4K en mi Mac M4 con un buffer de 5120x2880 (2560x1440@2x) y funciona bien
      Hablo de macOS Sequoia
    • La verdad no termino de entender el punto del artículo. En un monitor 4K no existe 4K HiDPI.
      Eso sería simplemente 2160p@2x en un monitor 8K. El 4K al 100% se ve mal en cualquier sistema operativo
    • Al final parece que se refiere a una configuración anormal de 2160p@2x
  • Creo que sería más convincente si el artículo tuviera capturas comparando el desenfoque del texto

    • Gracias por la observación. No es fácil tomar una foto precisa, pero después del trabajo voy a actualizarlo agregando imágenes