1fn _naga_inverse_4x4_f32(m: mat4x4<f32>) -> mat4x4<f32> { 2 let sub_factor00: f32 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; 3 let sub_factor01: f32 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; 4 let sub_factor02: f32 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; 5 let sub_factor03: f32 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; 6 let sub_factor04: f32 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; 7 let sub_factor05: f32 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; 8 let sub_factor06: f32 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; 9 let sub_factor07: f32 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; 10 let sub_factor08: f32 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; 11 let sub_factor09: f32 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; 12 let sub_factor10: f32 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; 13 let sub_factor11: f32 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; 14 let sub_factor12: f32 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; 15 let sub_factor13: f32 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; 16 let sub_factor14: f32 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; 17 let sub_factor15: f32 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; 18 let sub_factor16: f32 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; 19 let sub_factor17: f32 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; 20 let sub_factor18: f32 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; 23 adj[0][0] = (m[1][1] * sub_factor00 - m[1][2] * sub_factor01 + m[1][3] * sub_factor02); 24 adj[1][0] = - (m[1][0] * sub_factor00 - m[1][2] * sub_factor03 + m[1][3] * sub_factor04); 25 adj[2][0] = (m[1][0] * sub_factor01 - m[1][1] * sub_factor03 + m[1][3] * sub_factor05); 26 adj[3][0] = - (m[1][0] * sub_factor02 - m[1][1] * sub_factor04 + m[1][2] * sub_factor05); 27 adj[0][1] = - (m[0][1] * sub_factor00 - m[0][2] * sub_factor01 + m[0][3] * sub_factor02); 28 adj[1][1] = (m[0][0] * sub_factor00 - m[0][2] * sub_factor03 + m[0][3] * sub_factor04); 29 adj[2][1] = - (m[0][0] * sub_factor01 - m[0][1] * sub_factor03 + m[0][3] * sub_factor05); 30 adj[3][1] = (m[0][0] * sub_factor02 - m[0][1] * sub_factor04 + m[0][2] * sub_factor05); 31 adj[0][2] = (m[0][1] * sub_factor06 - m[0][2] * sub_factor07 + m[0][3] * sub_factor08); 32 adj[1][2] = - (m[0][0] * sub_factor06 - m[0][2] * sub_factor09 + m[0][3] * sub_factor10); 33 adj[2][2] = (m[0][0] * sub_factor11 - m[0][1] * sub_factor09 + m[0][3] * sub_factor12); 34 adj[3][2] = - (m[0][0] * sub_factor08 - m[0][1] * sub_factor10 + m[0][2] * sub_factor12); 35 adj[0][3] = - (m[0][1] * sub_factor13 - m[0][2] * sub_factor14 + m[0][3] * sub_factor15); 36 adj[1][3] = (m[0][0] * sub_factor13 - m[0][2] * sub_factor16 + m[0][3] * sub_factor17); 37 adj[2][3] = - (m[0][0] * sub_factor14 - m[0][1] * sub_factor16 + m[0][3] * sub_factor18); 38 adj[3][3] = (m[0][0] * sub_factor15 - m[0][1] * sub_factor17 + m[0][2] * sub_factor18); 40 let det = (m[0][0] * adj[0][0] + m[0][1] * adj[1][0] + m[0][2] * adj[2][0] + m[0][3] * adj[3][0]); 42 return adj * (1 / det);