diff options
author | Paul Lemire <paul.lemire350@gmail.com> | 2017-03-13 16:14:36 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2017-08-11 12:17:23 +0000 |
commit | b46cc98eca89a5adef4b03fb990c782c61ec6bfb (patch) | |
tree | f832ee3fd99830c62dd0cb74c28b51fd924a3f96 /src/core/transforms/vector3d_sse_p.h | |
parent | cacbf5e2a60224520c7f824ac24502d63281faf3 (diff) |
Matrix4x4: simd (AVX2 and SSE) matrix classes
Change-Id: I8a4d8542a12a9ec6631f76515c0da41cd1c679fe
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/core/transforms/vector3d_sse_p.h')
-rw-r--r-- | src/core/transforms/vector3d_sse_p.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/core/transforms/vector3d_sse_p.h b/src/core/transforms/vector3d_sse_p.h index bf0f2c1ac..a299d1db9 100644 --- a/src/core/transforms/vector3d_sse_p.h +++ b/src/core/transforms/vector3d_sse_p.h @@ -178,6 +178,14 @@ public: return ((_mm_movemask_ps(_mm_cmpeq_ps(m_xyzw, _mm_set_ps1(0.0f))) & 0x7) == 0x7); } +#ifdef __AVX2__ + QT3DCORE_PRIVATE_EXPORT Vector3D_SSE unproject(const Matrix4x4_AVX2 &modelView, const Matrix4x4_AVX2 &projection, const QRect &viewport) const; + QT3DCORE_PRIVATE_EXPORT Vector3D_SSE project(const Matrix4x4_AVX2 &modelView, const Matrix4x4_AVX2 &projection, const QRect &viewport) const; +#else + QT3DCORE_PRIVATE_EXPORT Vector3D_SSE unproject(const Matrix4x4_SSE &modelView, const Matrix4x4_SSE &projection, const QRect &viewport) const; + QT3DCORE_PRIVATE_EXPORT Vector3D_SSE project(const Matrix4x4_SSE &modelView, const Matrix4x4_SSE &projection, const QRect &viewport) const; +#endif + Q_ALWAYS_INLINE float x() const { return _mm_cvtss_f32(m_xyzw); } Q_ALWAYS_INLINE float y() const @@ -342,11 +350,11 @@ public: friend class Matrix4x4_SSE; friend class Vector4D_SSE; - friend QT3DCORE_PRIVATE_EXPORT Vector3D_SSE operator*(Vector3D_SSE vector, Matrix4x4_SSE matrix); - friend QT3DCORE_PRIVATE_EXPORT Vector3D_SSE operator*(Matrix4x4_SSE matrix, Vector3D_SSE vector); + friend QT3DCORE_PRIVATE_EXPORT Vector3D_SSE operator*(const Vector3D_SSE &vector, const Matrix4x4_SSE &matrix); + friend QT3DCORE_PRIVATE_EXPORT Vector3D_SSE operator*(const Matrix4x4_SSE &matrix, const Vector3D_SSE &vector); - friend QT3DCORE_PRIVATE_EXPORT Vector3D_SSE operator*(Vector3D_SSE vector, Matrix4x4_AVX2 matrix); - friend QT3DCORE_PRIVATE_EXPORT Vector3D_SSE operator*(Matrix4x4_AVX2 matrix, Vector3D_SSE vector); + friend QT3DCORE_PRIVATE_EXPORT Vector3D_SSE operator*(const Vector3D_SSE &vector, const Matrix4x4_AVX2 &matrix); + friend QT3DCORE_PRIVATE_EXPORT Vector3D_SSE operator*(const Matrix4x4_AVX2 &matrix, const Vector3D_SSE &vector); friend Q_ALWAYS_INLINE const Vector3D_SSE operator+(Vector3D_SSE v1, Vector3D_SSE v2) { return v1 += v2; } friend Q_ALWAYS_INLINE const Vector3D_SSE operator-(Vector3D_SSE v1, Vector3D_SSE v2) { return v1 -= v2; } |