summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-01-18 13:01:28 +0100
committerLéo Lam <leo@leolam.fr>2022-01-18 19:04:27 +0100
commit98aeceed40166ed33ab50dac2e2bd36b1f471f99 (patch)
tree70c885fdf06193a4212f9ab9a0927c1b4c1c1e44 /lib
parent7d8f0ed308c3f768883ce2fca26fbb378c9bf245 (diff)
ksys/phys: Add more RigidBody functions
And fix a bunch of hkVector4f / hkSimdFloat32 interop matching issues.
Diffstat (limited to 'lib')
-rw-r--r--lib/hkStubs/Havok/Common/Base/Math/Matrix/hkTransformf.h6
-rw-r--r--lib/hkStubs/Havok/Common/Base/Math/Vector/hkSimdFloat32.h10
-rw-r--r--lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.h1
-rw-r--r--lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.inl22
-rw-r--r--lib/hkStubs/Havok/Common/Base/Types/Geometry/Aabb/hkAabb.h13
5 files changed, 37 insertions, 15 deletions
diff --git a/lib/hkStubs/Havok/Common/Base/Math/Matrix/hkTransformf.h b/lib/hkStubs/Havok/Common/Base/Math/Matrix/hkTransformf.h
index 2c27cd33..175b3a0c 100644
--- a/lib/hkStubs/Havok/Common/Base/Math/Matrix/hkTransformf.h
+++ b/lib/hkStubs/Havok/Common/Base/Math/Matrix/hkTransformf.h
@@ -21,6 +21,8 @@ public:
HK_FORCE_INLINE void set(const hkRotationf& r, hkVector4fParameter t);
HK_FORCE_INLINE void set(hkQuaternionfParameter q, hkVector4fParameter t);
+
+ HK_FORCE_INLINE static const hkTransformf& getIdentity();
HK_FORCE_INLINE void setIdentity();
hkRotationf m_rotation;
@@ -56,6 +58,10 @@ inline void hkTransformf::set(const hkQuaternionf& q, const hkVector4f& t) {
m_translation = t;
}
+inline const hkTransformf& hkTransformf::getIdentity() {
+ return reinterpret_cast<const hkTransformf&>(g_vectorfConstants[HK_QUADREAL_1000]);
+}
+
inline void hkTransformf::setIdentity() {
m_rotation.setIdentity();
m_translation.setZero();
diff --git a/lib/hkStubs/Havok/Common/Base/Math/Vector/hkSimdFloat32.h b/lib/hkStubs/Havok/Common/Base/Math/Vector/hkSimdFloat32.h
index fc4633e9..ebb3a3eb 100644
--- a/lib/hkStubs/Havok/Common/Base/Math/Vector/hkSimdFloat32.h
+++ b/lib/hkStubs/Havok/Common/Base/Math/Vector/hkSimdFloat32.h
@@ -60,6 +60,8 @@ public:
void setAbs(hkSimdFloat32Parameter x);
+ HK_FORCE_INLINE m128 toQuad() const;
+
Storage m_real;
};
@@ -150,3 +152,11 @@ inline void hkSimdFloat32::setAbs(hkSimdFloat32Parameter x) {
m_real[i] = std::abs(x.m_real[i]);
#endif
}
+
+inline m128 hkSimdFloat32::toQuad() const {
+#ifdef HK_SIMD_FLOAT32_AARCH64_NEON
+ return vcombine_f32(m_real, m_real);
+#else
+ return m_real;
+#endif
+}
diff --git a/lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.h b/lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.h
index 62a1ae12..598ca3a7 100644
--- a/lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.h
+++ b/lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.h
@@ -31,6 +31,7 @@ public:
HK_FORCE_INLINE void setXYZ(hkVector4fParameter xyz);
HK_FORCE_INLINE void setXYZ_W(hkVector4fParameter xyz, hkSimdFloat32Parameter w);
HK_FORCE_INLINE void setAll(hkFloat32 x);
+ HK_FORCE_INLINE void setAll(hkSimdFloat32Parameter x);
HK_FORCE_INLINE void setZero();
// ========== Vector operations
diff --git a/lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.inl b/lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.inl
index ed42e7fe..fb00d055 100644
--- a/lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.inl
+++ b/lib/hkStubs/Havok/Common/Base/Math/Vector/hkVector4f.inl
@@ -55,6 +55,10 @@ inline void hkVector4f::setAll(hkReal x) {
v = {x, x, x, x};
}
+inline void hkVector4f::setAll(hkSimdFloat32Parameter x) {
+ v = x.toQuad();
+}
+
inline void hkVector4f::setZero() {
setAll(0);
}
@@ -96,11 +100,7 @@ inline void hkVector4f::mul(hkSimdFloat32Parameter a) {
}
inline void hkVector4f::setMul(hkVector4fParameter a, hkSimdFloat32Parameter r) {
-#ifdef HK_VECTOR4F_AARCH64_NEON
- v = vmulq_n_f32(a.v, r);
-#else
- v *= r.val();
-#endif
+ v = a.v * r.toQuad();
}
inline void hkVector4f::setMul(hkSimdFloat32Parameter r, hkVector4fParameter a) {
@@ -108,19 +108,11 @@ inline void hkVector4f::setMul(hkSimdFloat32Parameter r, hkVector4fParameter a)
}
inline void hkVector4f::setAdd(hkVector4fParameter a, hkSimdFloat32Parameter b) {
-#ifdef HK_VECTOR4F_AARCH64_NEON
- v = vaddq_f32(a.v, vdupq_n_f32(b));
-#else
- v += b.val();
-#endif
+ v = a.v + b.toQuad();
}
inline void hkVector4f::setSub(hkVector4fParameter a, hkSimdFloat32Parameter b) {
-#ifdef HK_VECTOR4F_AARCH64_NEON
- v = vsubq_f32(a.v, vdupq_n_f32(b));
-#else
- v -= b.val();
-#endif
+ v = a.v - b.toQuad();
}
inline void hkVector4f::setReciprocal(hkVector4fParameter a) {
diff --git a/lib/hkStubs/Havok/Common/Base/Types/Geometry/Aabb/hkAabb.h b/lib/hkStubs/Havok/Common/Base/Types/Geometry/Aabb/hkAabb.h
index 07084ded..2a9a79a1 100644
--- a/lib/hkStubs/Havok/Common/Base/Types/Geometry/Aabb/hkAabb.h
+++ b/lib/hkStubs/Havok/Common/Base/Types/Geometry/Aabb/hkAabb.h
@@ -11,6 +11,19 @@ public:
hkAabb() {}
HK_FORCE_INLINE hkAabb(const hkVector4& min, const hkVector4& max) : m_min(min), m_max(max) {}
+ HK_FORCE_INLINE void getExtents(hkVector4& e) const;
+ HK_FORCE_INLINE void getCenter(hkVector4& center) const;
+
hkVector4 m_min;
hkVector4 m_max;
};
+
+inline void hkAabb::getExtents(hkVector4& e) const {
+ e.setSub(m_max, m_min);
+}
+
+inline void hkAabb::getCenter(hkVector4& center) const {
+ hkVector4 s;
+ s.setAdd(m_min, m_max);
+ center.setMul(s, hkSimdReal::getConstant<HK_QUADREAL_INV_2>());
+}