Havok: Add hkMathHeaderConstants

This commit is contained in:
Léo Lam 2022-01-14 23:52:53 +01:00
parent c771cd4cb0
commit ddb704bc22
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
6 changed files with 94 additions and 0 deletions

View File

@ -13,6 +13,7 @@ add_library(hkStubs OBJECT
Havok/Common/Base/DebugUtil/MultiThreadCheck/hkMultiThreadCheck.h
Havok/Common/Base/Math/hkMath.h
Havok/Common/Base/Math/Header/hkMathHeaderConstants.h
Havok/Common/Base/Math/Matrix/hkMatrix3.h
Havok/Common/Base/Math/Matrix/hkMatrix3f.h
Havok/Common/Base/Math/Matrix/hkRotation.h

View File

@ -0,0 +1,70 @@
#pragma once
enum hkVectorConstant {
HK_QUADREAL_BEGIN,
HK_QUADREAL_MINUS1,
HK_QUADREAL_0,
HK_QUADREAL_1,
HK_QUADREAL_2,
HK_QUADREAL_3,
HK_QUADREAL_4,
HK_QUADREAL_5,
HK_QUADREAL_6,
HK_QUADREAL_7,
HK_QUADREAL_8,
HK_QUADREAL_15,
HK_QUADREAL_16,
HK_QUADREAL_255,
HK_QUADREAL_256,
HK_QUADREAL_2_POW_23,
HK_QUADREAL_INV_0,
HK_QUADREAL_INV_1,
HK_QUADREAL_INV_2,
HK_QUADREAL_INV_3,
HK_QUADREAL_INV_4,
HK_QUADREAL_INV_5,
HK_QUADREAL_INV_6,
HK_QUADREAL_INV_7,
HK_QUADREAL_INV_8,
HK_QUADREAL_INV_15,
HK_QUADREAL_INV_127,
HK_QUADREAL_INV_226,
HK_QUADREAL_INV_255,
HK_QUADREAL_1000,
HK_QUADREAL_0100,
HK_QUADREAL_0010,
HK_QUADREAL_0001,
HK_QUADREAL_MAX,
HK_QUADREAL_HIGH,
HK_QUADREAL_EPS,
HK_QUADREAL_EPS_SQRD,
HK_QUADREAL_MIN,
HK_QUADREAL_MINUS_MAX,
HK_QUADREAL_MINUS_MIN,
HK_QUADREAL_m11m11,
HK_QUADREAL_1m11m1,
HK_QUADREAL_1010,
HK_QUADREAL_1100,
HK_QUADREAL_0011,
HK_QUADREAL_1248,
HK_QUADREAL_8421,
HK_QUADREAL_PACK_HALF,
HK_QUADREAL_PACK16_UNIT_VEC,
HK_QUADREAL_UNPACK16_UNIT_VEC,
HK_QUADREAL_PI,
HK_QUADREAL_PI_HALF,
HK_QUADREAL_PI_QUARTER,
HK_QUADREAL_FOUR_PI_THIRD,
HK_QUADREAL_TWO_PI,
HK_QUADREAL_FOUR_PI,
HK_QUADREAL_DEG2RAD,
HK_QUADREAL_RAD2DEG,
HK_QUADREAL_END
};
#define hkSimdReal_1 (hkSimdReal::getConstant<HK_QUADREAL_1>())
extern const m128 g_vectorfConstants[HK_QUADREAL_END];

View File

@ -18,6 +18,8 @@ public:
#ifdef HK_SIMD_FLOAT32_AARCH64_NEON
// NOLINTNEXTLINE(google-explicit-constructor)
hkSimdFloat32(const float& x) { m_real = vdup_n_f32(x); }
// NOLINTNEXTLINE(google-explicit-constructor)
hkSimdFloat32(__attribute__((vector_size(2 * sizeof(float)))) float x) { m_real = x; }
hkFloat32 val() const { return m_real[0]; }
#else
hkSimdFloat32(float x) : m_real{x} {} // NOLINT(google-explicit-constructor)
@ -26,6 +28,9 @@ public:
operator float() const { return val(); } // NOLINT(google-explicit-constructor)
template <int Constant>
HK_FORCE_INLINE static hkSimdFloat32 getConstant();
void setAbs(hkSimdFloat32Parameter x);
#ifdef HK_SIMD_FLOAT32_AARCH64_NEON
@ -35,6 +40,15 @@ public:
#endif
};
template <int Constant>
inline hkSimdFloat32 hkSimdFloat32::getConstant() {
#ifdef HK_SIMD_FLOAT32_AARCH64_NEON
return vget_low_f32(g_vectorfConstants[Constant]);
#else
return g_vectorfConstants[Constant][0];
#endif
}
inline void hkSimdFloat32::setAbs(hkSimdFloat32Parameter x) {
#ifdef HK_SIMD_FLOAT32_AARCH64_NEON
m_real = vabs_f32(m_real);

View File

@ -146,6 +146,9 @@ public:
// ========== Load/store
template <int Constant>
HK_FORCE_INLINE static const hkVector4f& getConstant();
/// Store N floats to out.
template <int N>
void store(hkFloat32* out) const;

View File

@ -354,6 +354,11 @@ inline hkSimdFloat32 hkVector4f::lengthSquared() const {
return dot<N>(*this);
}
template <int Constant>
inline const hkVector4f& hkVector4f::getConstant() {
return reinterpret_cast<const hkVector4f&>(g_vectorfConstants[Constant]);
}
template <int N>
inline void hkVector4f::store(hkFloat32* out) const {
static_assert(1 <= N && N <= 4, "invalid N");

View File

@ -4,6 +4,7 @@
#include <Havok/Common/Base/Types/hkBaseTypes.h>
#include <Havok/Common/Base/Math/Header/hkMathHeaderConstants.h>
#include <Havok/Common/Base/Math/Matrix/hkMatrix3.h>
#include <Havok/Common/Base/Math/Matrix/hkRotation.h>
#include <Havok/Common/Base/Math/Matrix/hkTransform.h>