[Alyssa Rosenzweig] ha estado trabajando incansablemente en los angeles ingeniería inversa de los angeles GPU integrada en los angeles arquitectura M1 de Apple como parte del esfuerzo de Asahi Linux. Si no está familiarizado, ese es el proyecto que agrega soporte al kernel de Linux y al espacio de usuario para los angeles línea de productos Apple M1. Ella ha hecho un gran progreso, e incluso obtuvo un renderizado primitivo trabajando con su propio código fuente abierto, hace poco más de un año.
Sin embargo, tratando de madurar al conductor, se ha topado con un obstáculo. Para los angeles representación compleja, algo en los angeles GPU se rompe y al marco simplemente le faltan fragmentos de contenido. Algunas pruebas inteligentes descubrieron el desencadenante exacto de los angeles falla: demasiados datos de vértices totales. En pocas palabras, es “los angeles cantidad de vértices (complejidad de geometría) multiplicada por los angeles cantidad de datos por vértice (complejidad de ‘sombreado’)”. Eso… casi suena como un búfer llenándose, pero en los angeles propia GPU. Este no es un búfer con el que el controlador interactúe directamente, por lo que toda esta investigación debe hacerse a ciegas. El controlador de Apple no tiene representaciones corruptas como esta, entonces, ¿qué está pasando?
[Alyssa] abandona un curso intensivo rápido sobre el diseño de GPU, principalmente los angeles diferencia entre las GPU de escritorio que usan memoria dedicada y las GPU móviles con memoria unificada. El M1 cae en esa segunda categoría, usando un búfer de mosaicos para almacenar en caché los resultados del renderizado mientras construye un marco. Ese tilebuffer tiene un tamaño fijo. Está el desbordamiento que bloquea los angeles representación del marco. Entonces, ¿cómo se supone que el conductor debe manejar esto? Los angeles respuesta tradicional es simplemente asignar un búfer más grande, pero no es así como funciona el M1. En cambio, cuando el búfer se llena, los angeles GPU activa un procesamiento parcial, que eat los datos del búfer. El problema es que el renderizado parcial se envía a los angeles pantalla en lugar de mezclarse correctamente con el resto del renderizado. ¿Por qué? Volvamos a capturar los comandos utilizados por el controlador de Apple.
El controlador hace algo extraño, configura dos programas separados de carga y almacenamiento. Sabiendo que el búfer de renderizado se mueve a mitad del renderizado, esto empieza a tener sentido. Una función es para un render parcial, los angeles otra para el ultimate. Omita los angeles configuración de uno de estos, y cuando los angeles GPU necesita los angeles función que falta, elimina los angeles referencia a un puntero nulo y explota los angeles representación. Por lo tanto, suministre las funciones que faltan, obtenga los angeles configuración correcta y el renderizado se completa correctamente. ¡Por fin! Los angeles victoria nunca sabe tan dulce como cuando se trata de perseguir a un insecto desconcertante como este.
¿Necesita más Asahi Linux en su vida? [Hector Martin] hizo una entrevista en FLOSS Weekly los angeles semana pasada, dándonos un resumen del proyecto.
Pasaporte En Linea