- A 4-vector doubles as a unit quaternion in (x, y, z, w) order:
QuanternionMultiply, QuanternionConjugate, QuanternionFromAxisAngle,
QuanternionFromUnitVectors (shortest arc), QuanternionNlerp and
QuanternionSlerp, next to the existing QuanternionFromBasis.
- MatrixRowMajor gains Rotation (from a quaternion), TRS, InverseAffine,
Transpose and Decompose. The 4x4 transforms row vectors and the 4x3
column vectors (the VkTransformMatrixKHR layout); each of these means the
same transform in both. The 4x3 Rotation copied the 4x4's rows, which
rotated by the inverse.
- The static Normalize no longer assumes three components.
- Tests: Quaternion, and Matrix extended.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NEON backend for VectorF32 on AArch64: one float32x4_t per vector
(Len * Packing <= 4), with a vectorised sin/cos port of the SSE helpers.
VectorF16 gets a native float16x8_t path when the target has ARMv8.2-FP16
arithmetic. Without it VectorF16 aliases VectorF32, which converts
fp16 <-> fp32 on Load/Store.
The scalar fallback gains the batched Dot that MatrixRowMajor relies on.
Test tiers added for armv8-a and armv8.2-a+fp16.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>