Se detecta una limitación de resolución HiDPI en pantallas externas 4K con chips Apple Silicon M4 y M5
(smcleod.net)- 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,MaxHyMaxBpcson 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 modestampoco 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
MaxVideoSrcDownscalingWidthControlador 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
MaxSrcRectWidthForPipeyMaxVideoSrcDownscalingWidthquedan 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 usat605xdcp.im4p- Está en estado de compresión LZFSE (4.1MB → 16.4MB) y no está cifrado, por lo que puede extraerse con
img4tool
- Está en estado de compresión LZFSE (4.1MB → 16.4MB) y no está cifrado, por lo que puede extraerse con
- 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 usandoMaxVideoSrcDownscalingWidth - 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)
- Sub-pipe 0 de pantalla externa:
- La limitación funciona en dos etapas
MaxSrcRectWidthForPipe[0](6720) → limita durante la etapa de enumeración de modosMaxVideoSrcDownscalingWidth(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
- Se añadió la resolución HiDPI 7680×4320 en
-
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
- Se insertó un EDID modificado en
-
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=7680yMaxH=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
DisplayHintsyConnectionMapping - El controlador del kernel (
AppleDisplayCrossbar) rechaza la escritura (kIOReturnUnsupported)
- Se intentó modificar directamente propiedades del DCP como
-
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=Noy el presupuesto no cambia
- Borrar la caché de WindowServer, reducir el número de pantallas conectadas, cambiar a HDMI y llamar a la API privada de SkyLight (
-
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.
- Ej.:
- 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 privadaSLVirtualDisplayde 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_profileraparece como “Hardware Mirror: Yes”
- La ruta de duplicación por hardware evita la verificación
- 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)- Aumentar la constante codificada 0x1A40 → 0x1E00
- Permitir un backing store HiDPI multi-pipe incluso en single pipe
- Permitir asignación dinámica según la pantalla conectada
- 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 pipeioreg -l -w0 | grep "MaxVideoSrcDownscalingWidth": comprobar la limitación del escaladorsystem_profiler SPDisplaysDataType: resumen de pantallasCGSGetNumberOfDisplayModes: 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
IOMFBMaxSrcPixelsse confirmaMaxSrcRectWidth=7680 - Con la misma pantalla LG HDR 4K puede usarse el modo HiDPI completo
2 comentarios
Lo básico sí deberían dejarlo bien resuelto...
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
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
El problema apareció después de cambiar de macOS Sequoia a Tahoe
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
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
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
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
Llevo 8 años usando un monitor 4K de 43" a escala 1x, y no noto diferencia entre Linux, M1 y M4
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
¿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?
En Windows, al usar escalado 1.5x el texto puede verse borroso, pero macOS reduce un framebuffer 6K a 4K para mantener la nitidez
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
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?
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
Eso sería simplemente 2160p@2x en un monitor 8K. El 4K al 100% se ve mal en cualquier sistema operativo
Creo que sería más convincente si el artículo tuviera capturas comparando el desenfoque del texto