Timon Gehr wrote:
Are they really a general solution? How do you use vector ops to implement an efficient matrix multiply, for instance?
struct Matrix4 { float4 x, y, z, w; auto transform(Matrix4 mat) { Matrix4 rmat; float4 cx = {mat.x.x, mat.y.x, mat.z.x, mat.w.x}; float4 cy = {mat.x.y, mat.y.y, mat.z.y, mat.w.y}; float4 cz = {mat.x.z, mat.y.z, mat.z.z, mat.w.z}; float4 cw = {mat.x.w, mat.y.w, mat.z.w, mat.w.w}; float4 rx = {mat.x.x, mat.x.y, mat.x.z, mat.x.w}; float4 ry = {mat.y.x, mat.y.y, mat.y.z, mat.y.w}; float4 rz = {mat.z.x, mat.z.y, mat.z.z, mat.z.w}; float4 rw = {mat.w.x, mat.w.y, mat.w.z, mat.w.w}; rmat.x = cx * rx; // simd rmat.y = cy * ry; // simd rmat.z = cz * rz; // simd rmat.w = cw * rw; // simd return rmat; } }