3 votos

El rendimiento de los juegos se reduce a la mitad con la duplicación de pantalla en macOS

Cuando ejecuto Portal en mi MBP sin una pantalla externa conectada, obtengo unos sólidos 60 fps. Cuando me conecto y reflejo otra pantalla (con la misma resolución y configuración del juego) baja a 30 fps, a veces a 20, y tiene un impacto muy notable en la experiencia de juego.

Es lo mismo independientemente del puerto de salida de vídeo que utilice. El ahorro de energía de los gráficos está desactivado.

He tratado de encontrar la confirmación de que la duplicación de pantalla afecta negativamente al rendimiento, pero sólo he tropezado con afirmaciones de que no lo hace y no debería hacerlo. Pero he probado esto muchas veces y es muy reproducible.

  • ¿Cómo se implementa el mirroring / por qué afecta tanto al rendimiento?
  • ¿La única forma de conseguir un rendimiento decente en el juego es comprar un teclado externo y cerrar la tapa / pegar un imán a la pantalla / utilizar un hack de terminal?

MBP 15" mediados de 2014

Actualización de V-sync

Como Phong sospechaba correctamente, está relacionado con vsync. Sin él consigo unos ridículos 150+ fps y una buena capacidad de respuesta, aunque me resisto a desactivarlo por el tearing.

Sin embargo, sigue siendo un misterio cómo el screen mirroring interactúa y afecta a vsync.

La pantalla del MBP es de 60 Hz, y la pantalla externa también recibe una señal de 60 Hz. Cambiar la resolución del juego no afecta a la señal de vídeo (siempre 1080p), pero al igualar la resolución de salida y la del juego (por ejemplo, 720p@60) siguen apareciendo síntomas similares.

7voto

Andreas Scherer Puntos 161

Me parece que tienes Sincronización vertical activado. Esta función bloquea la velocidad de fotogramas a una fracción de la tasa de refresco de la pantalla (1, ½, ⅓ ) para evitar la aparición de artefactos visuales (concretamente, el "tearing") y las velocidades de fotogramas desbocadas (que pueden dañar la GPU). Una buena indicación de esto es una tasa de fotogramas que salta de 30 a 60 FPS y viceversa, sin nada entre medias.

Reflejando está afectando al rendimiento lo suficiente como para que la tasa de fotogramas caiga por debajo de los 60 FPS. Incluso si de otro modo obtendrías 59 FPS, Sincronización vertical bajaría su velocidad de fotogramas a 30 FPS.

Esto también puede provocar un retraso en la entrada. Dado que la pantalla/cursor se redibuja con la mitad (o un tercio) de frecuencia, el retardo entre el movimiento del ratón y el resultado en la pantalla sería el doble o el triple.

Entra en la configuración de vídeo de Portal y Desactivar Sincronización vertical . No juego a Portal, pero casi todos los juegos tienen esa opción. Puede que se llame V-Sync .

Es posible que tenga que cambiar de Ventana modo a Pantalla completa . Como MacOS obliga a V-Sync para el escritorio principal, V-Sync puede seguir aplicándose mientras se juega en una ventana.

Para minimizar los efectos adversos de las V-Sync Muchos juegos ofrecen la opción de limitar la velocidad de fotogramas. Si esa opción está disponible, prueba a establecer un máximo de, por ejemplo,. 90 FPS o incluso 60 FPS . Esto ofrece a menudo lo mejor de ambos mundos.

Comprueba si una combinación de estas soluciones resuelve tu problema.

Si prefiere mantener V-Sync muchos juegos ofrecen una opción para activar Triple amortiguación . Esto ayudará a suavizar la velocidad de los fotogramas (minimizando así las caídas repentinas de la velocidad de los fotogramas). Activarlo también puede provocar un aumento del retraso de entrada, aunque normalmente no es tan grave como el causado por la caída de 30 FPS.

Una última sugerencia sería tratar de extender su escritorio en la pantalla externa como una Espacio en su lugar (posible con Yosemite y superiores, creo). ¿Su caso de uso requiere siquiera Reflejando ? No estoy muy familiarizado con esto en el Mac, pero no veo por qué no sería posible.

Explicación a vuelo de pájaro de las causas de las caídas de la tasa de fotogramas con Mirroring:
Con Reflejando En este caso, su Mac tiene que mostrar el mismo cuadro en su pantalla interna y en su pantalla externa. Además de hacer que sus pantallas esperen la una a la otra, esto implica un "trabajo" adicional que incluye el tiempo de cómputo y la gestión del búfer (para asegurarse de que están mostrando lo mismo al mismo tiempo), así como el retraso de ida y vuelta a través de su cable externo o, peor aún, de Wi-Fi/Bluetooth.

Mientras esto sucede, tu GPU está renderizando el siguiente cuadro en su buffer interno, pero no lo envía a tu pantalla hasta que recibe el OK (debido a V-Sync ). Durante este periodo de espera, tu GPU está efectivamente en pausa, sin renderizar fotogramas adicionales (a menos que haya Triple o N-Buffering disponible), lo que reduce aún más tu tasa de fotogramas. A continuación, dependiendo de en qué punto del ciclo de refresco se encuentre la pantalla más lenta, la visualización del siguiente fotograma puede retrasarse de nuevo hasta la siguiente fracción.

Tienes que tener en cuenta que para renderizar tu juego a 60 FPS, tu subsistema gráfico sólo tiene 33ms para realizar todo ese trabajo extra (menos el tiempo que necesita la GPU para renderizar esos fotogramas en primer lugar). Sólo el viaje de ida y vuelta a la pantalla externa puede llevar un par de milisegundos. El trabajo de sincronización es en sí mismo costoso (en términos de tiempo). No es imposible que la sincronización de dos pantallas lleve más de 20 o 30 milisegundos.

Ahora bien, en el párrafo anterior estaba asumiendo que tu GPU estaba lista con el siguiente fotograma para cuando tus pantallas terminaran de dibujar el actual. Imagina que no es así. Pues bien, ahora las pantallas están hambrientas y son las que acaban esperando a la GPU. Probablemente acabes bajando a la siguiente fracción de tu frecuencia de refresco más lenta. Lo que podría significar una caída de 1-2 FPS V-Sync Fuera de se convierte en un 30 FPS con él En .

Así que usted está tratando de sincronizar dos pantallas (a través de Reflejando ), y luego tratar de sincronizarlos con su GPU (a través de V-Sync ). El resultado es potencialmente mucha, mucha, mucha espera.

No es raro que se produzca cierta degradación del rendimiento cuando se conectan subsistemas con niveles de rendimiento dispares. Por eso se crearon los buffers y las operaciones asíncronas.

Al sincronizar, un retraso en cualquier parte provoca retrasos en todas partes.

Para maximizar el rendimiento, es mejor dejar que cada uno haga su trabajo en su propio tiempo.

0voto

J.Doe Puntos 90

Condensando algo de información sobre lo que ha funcionado al final:

  • Vsync activado
  • Escritorios separados en cada monitor
  • Mueve el escritorio principal (la barra de menú en la configuración de la pantalla de MacOS) a la pantalla en la que quieres jugar. El portal puede seleccionar un monitor en el juego, pero MacOS se equivocará con el cursor de todos modos a menos que juegues en la pantalla principal, así que esa opción es inútil.
  • Baja la otra pantalla.

Lo mismo para Portal 2. A diferencia del primer juego, también es compatible con el triple búfer.

Utilizando aplicaciones como DisableMonitor sólo complica las cosas. De alguna manera terminas con el sistema de coordenadas del monitor deshabilitado (y el fondo del escritorio) superpuesto al habilitado, haciendo que los cursores aparezcan donde no están. El desarrollador parece haber tomado precauciones por el aspecto de esta línea: CGWindowListCopyWindowInfo(kCGWindowListExcludeDesktopElements, kCGNullWindowID) pero parece que eso no se mantiene, al menos no en MacOS Sierra.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X