
Hace menos de una semana, los desarrolladores de SDL (Simple DirectMedia Layer) renovaron la discusión sobre si Wayland debería configurarse como preferido sobre X11, y se solicitó revertir el compromiso que establecía a Wayland como preferido debido a problemas con la necesidad de usar quince-v1. y protocolos commit-timing-v1. Esto se mencionó brevemente en nuestro artículo reciente sobre SDL 3.
Cito la descripción del problema:
Esto devuelve el compromiso f9f7db4.
Wayland tiene muchos problemas sin resolver relacionados con la representación del bloqueo de suspensión de la superficie y una falla fundamental en la implementación FIFO (vsync), que resulta en una degradación del rendimiento relacionada con la GPU.
Esto no significa que «debamos arreglar FIFO en Mesa/otros controladores», sino que es completamente imposible arreglarlo sin un protocolo adicional, en este caso fifo-v11.
Sin este protocolo, vkQueuePresent o glSwapBuffers deben pausar la devolución de llamada del «marco» después de presentar la imagen. La única razón por la que podemos salirnos con la nuestra en SteamOS es porque Gamescope implementa lo que es esencialmente fifo-v1 y lo usamos allí.
El otro lado es la pausa en la superficie, un problema muy similar al descrito anteriormente con respecto a la devolución de llamada del marco utilizada de esta manera y el bloqueo. Si la ventana SDL está oculta, vkQueuePresent bloqueará el FIFO, algo que generalmente NO les gusta a los juegos. Esto se resuelve mediante una combinación de fifo-v1 y commit-timing-v1.
Los juegos y aplicaciones generales que favorecen a Wayland sobre X11 no tienen ningún beneficio, solo un gran impacto en el rendimiento y no se pueden utilizar en este momento.
Por lo tanto, debemos revertir este cambio hasta que se lancen fifo-v1 y commit-timing-v1 y al menos en una versión estable para los principales compositores.
Si bien SDL ha estado intentando usar Wayland de forma predeterminada durante los últimos dos años y tuvo que revertir debido a una serie de problemas con el software de terceros (controladores NVIDIA, desbordamiento de eventos de libwayland, libdecor no maneja fallas de carga de complementos, la superposición de Steam no funciona con Wayland). , etc.).
La situación es prometedora ahora porque parece que los problemas pendientes de Wayland se están abordando y los desarrolladores son conscientes y hacen todo lo posible para resolverlos. El PR que se suponía recuperaría el comportamiento de Wayland en comparación con X11 se cerró nuevamente y la fusión se canceló con una nueva solución (y un nuevo problema) propuesta. Para citar a Sam Lantinga:
¡Gracias a todos por la retroalimentación!
Parece que la gente de Wayland es consciente de estos problemas y está avanzando para resolverlos. Dejaré Wayland como predeterminado por ahora mientras hacen esto para que a las personas les resulte más fácil realizar pruebas y proporcionar comentarios. Reevaluaremos esto a medida que nos acerquemos al lanzamiento completo.
@Joshua-Ashton, ¿puedes crear problemas individuales que afecten esto y crear una lista de problemas en el informe de solicitud de fusión original para realizar un seguimiento?
Voy a bloquear esta conversación por ahora para que podamos centrarnos en el desarrollo.
Y:
Dado que los problemas de rendimiento que causaron este PR se abordan mediante una combinación de fifo-v1 y commit-timing-v1, verifiquemos la presencia de estos protocolos antes de usar el Wayland predeterminado.
@ Joshua-Ashton, estoy cerrando este PR. ¿Puedes abrir uno nuevo que implemente esto?
Para aquellos que sigan este cambio, este cambio garantizará que las aplicaciones Vulkan de alto rendimiento, como los juegos, funcionen mejor de forma predeterminada. Esperemos que estos protocolos estén disponibles pronto, pero en cualquier caso el usuario tiene el control final sobre el backend utilizado a través de la variable de entorno SDL_VIDEO_DRIVER.
La buena noticia es que se ha implementado un mecanismo y, en lugar de eliminar Wayland de forma predeterminada en todas las situaciones, solo sucederá después de verificar los protocolos fifo-v1 y commit-timing-v1.
No dudes en seguir este hilo que rastrea el problema que acabas de crear: