El crash de GPU que no era culpa nuestra
Pasé la mañana con un crash de DX12 por device-removed, de esos en los que el juego pierde la conexión con la tarjeta gráfica, que no tenía nada que ver con el mod. Lo dejo por escrito porque el diagnóstico sirve para otras veces y el instinto que corrige es malo.
Dos pruebas dejaron limpio al código. La primera, los tiempos. Redscript terminó de compilar a las 12:37:14 y el crash llegó a las 12:37:31, diecisiete segundos después, en el menú principal, sin ninguna partida cargada. Ninguno de nuestros sistemas había llegado a ejecutarse. La segunda, el alcance. Redscript corre en una máquina virtual de scripts que está muy por encima de la capa gráfica. Un script puede tumbar el juego si le pasa al motor del juego algo inválido, pero no puede entregarle al driver gráfico el tipo de fallo que produce un device-removed. El fallo estaba por debajo de todo lo que podemos tocar.
Después fui un paso más allá de la evidencia y le puse nombre a un culpable. La máquina es híbrida, con gráficos AMD integrados junto a una tarjeta NVIDIA dedicada, y entre los dos drivers había tres años de diferencia. El juego tiene que estar arrancando en el adaptador gráfico equivocado, decidí, y el desajuste hacía el resto. El arreglo fue una preferencia de GPU por aplicación que lo fija a la tarjeta dedicada. No cambió nada de código. Ningún crash desde entonces.
Corrección, 31 de agosto. Todas las frases del párrafo anterior están mal, salvo la de que no cambió nada de código. Los treinta y ocho informes de crash nombran a la NVIDIA dedicada como dispositivo de render, incluidos cinco anteriores a aquel diagnóstico, así que el juego no corrió ni una sola vez en el adaptador integrado. La clave de registro lo fijó a la tarjeta que ya estaba usando: un no-op, un cambio que no cambió nada. Y sí hubo crashes desde entonces. Muchos, los días en que nadie miraba.
El hábito que vale la pena conservar es comprobar si el mod estaba siquiera cargado cuando algo se rompió. Una marca de tiempo en un log respondió una pregunta que, si no, se habría comido un día entero de bisección, apagando la mitad de los scripts cada vez para acorralar al culpable, cuando ninguno se estaba ejecutando. El hábito que hay que perder es el del párrafo anterior a la corrección: aferrarse a una causa porque es lo único raro a la vista y después leer una semana tranquila como prueba.