| 41 | // V3PrepareCross would help here, but it's not on all platforms yet... |
| 42 | |
| 43 | PX_FORCE_INLINE void transformFast(const FloatVArg wa, const Vec3VArg va, const Vec3VArg pa, |
| 44 | const FloatVArg wb, const Vec3VArg vb, const Vec3VArg pb, |
| 45 | FloatV& wo, Vec3V& vo, Vec3V& po) |
| 46 | { |
| 47 | wo = FSub(FMul(wa, wb), V3Dot(va, vb)); |
| 48 | vo = V3ScaleAdd(va, wb, V3ScaleAdd(vb, wa, V3Cross(va, vb))); |
| 49 | |
| 50 | const Vec3V t1 = V3Scale(pb, FScaleAdd(wa, wa, FLoad(-0.5f))); |
| 51 | const Vec3V t2 = V3ScaleAdd(V3Cross(va, pb), wa, t1); |
| 52 | const Vec3V t3 = V3ScaleAdd(va, V3Dot(va, pb), t2); |
| 53 | |
| 54 | po = V3ScaleAdd(t3, FLoad(2.f), pa); |
| 55 | } |
| 56 | |
| 57 | PX_FORCE_INLINE void transformInvFast(const FloatVArg wa, const Vec3VArg va, const Vec3VArg pa, |
| 58 | const FloatVArg wb, const Vec3VArg vb, const Vec3VArg pb, |
no test coverage detected