hkSseVector4Util.inl
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:4k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* 
  2.  * 
  3.  * Confidential Information of Telekinesys Research Limited (t/a Havok). Not for disclosure or distribution without Havok's
  4.  * prior written consent. This software contains code, techniques and know-how which is confidential and proprietary to Havok.
  5.  * Level 2 and Level 3 source code contains trade secrets of Havok. Havok Software (C) Copyright 1999-2009 Telekinesys Research Limited t/a Havok. All Rights Reserved. Use of this software is subject to the terms of an end user license agreement.
  6.  * 
  7.  */
  8. #define HK_VECTOR4UTIL_mulSigns4
  9. inline void HK_CALL hkVector4Util::mulSigns4( hkVector4& inout, const hkVector4& signs)
  10. {
  11. static HK_ALIGN16( const hkUint32 signmask[4] ) =
  12. { 0x80000000, 0x80000000, 0x80000000, 0x80000000 };
  13. inout.getQuad() = _mm_xor_ps( inout.getQuad(),
  14. _mm_and_ps(signs.getQuad(), *(const hkQuadReal*)&signmask));
  15. }
  16. #define HK_VECTOR4UTIL_rotateInversePoints
  17. inline void HK_CALL hkVector4Util::rotateInversePoints( const hkRotation& r, const hkVector4* vectorsIn, int numVectors, hkVector4* vectorsOut )
  18. {
  19. checkRegisters( 0x70000000 );
  20. hkQuadReal c0 = r.getColumn(0).getQuad();
  21. hkQuadReal c1 = r.getColumn(1).getQuad();
  22. hkQuadReal c2 = r.getColumn(2).getQuad();
  23. HK_TRANSPOSE3(c0,c1,c2);
  24. HK_ASSERT2( 0xf0200104, numVectors > 0, "At least one element required");
  25. for( int i = 0; i < numVectors; ++i )
  26. {
  27. hkQuadReal b = vectorsIn[i].getQuad();
  28. const hkQuadReal b0 = _mm_shuffle_ps( b, b, _MM_SHUFFLE(0,0,0,0));
  29. const hkQuadReal r0 = _mm_mul_ps( c0, b0 );
  30. const hkQuadReal b1 = _mm_shuffle_ps( b, b, _MM_SHUFFLE(1,1,1,1));
  31. const hkQuadReal r1 = _mm_mul_ps( c1, b1 );
  32. const hkQuadReal b2 = _mm_shuffle_ps( b, b, _MM_SHUFFLE(2,2,2,2));
  33. const hkQuadReal r2 = _mm_mul_ps( c2, b2 );
  34. vectorsOut[i].getQuad() = _mm_add_ps( _mm_add_ps(r0, r1), r2 );
  35. }
  36. }
  37. #define HK_VECTOR4UTIL_exitMmx
  38. inline void HK_CALL hkVector4Util::exitMmx()
  39. {
  40. _mm_empty();
  41. }
  42. #define HK_VECTOR4UTIL_dot3_3vs3
  43. inline void HK_CALL hkVector4Util::dot3_3vs3(const hkVector4& a0, const hkVector4& b0, const hkVector4& a1, const hkVector4& b1, const hkVector4& a2, const hkVector4& b2, hkVector4& dotsOut)
  44. {
  45. register hkQuadReal c0 = _mm_mul_ps( a0.getQuad(), b0.getQuad());
  46. register hkQuadReal c1 = _mm_mul_ps( a1.getQuad(), b1.getQuad());
  47. register hkQuadReal c2 = _mm_mul_ps( a2.getQuad(), b2.getQuad());
  48. HK_TRANSPOSE3(c0,c1,c2);
  49. dotsOut.getQuad() = _mm_add_ps( _mm_add_ps(c0, c1), c2 );
  50. }
  51. #define HK_VECTOR4UTIL_dot3_1vs4
  52. inline void HK_CALL hkVector4Util::dot3_1vs4( const hkVector4& vectorIn, const hkVector4& a0, const hkVector4& a1, const hkVector4& a2, const hkVector4& a3, hkVector4& dotsOut)
  53. {
  54. register hkQuadReal c0 = _mm_mul_ps( a0.getQuad(), vectorIn.getQuad());
  55. register hkQuadReal c1 = _mm_mul_ps( a1.getQuad(), vectorIn.getQuad());
  56. register hkQuadReal c2 = _mm_mul_ps( a2.getQuad(), vectorIn.getQuad());
  57. register hkQuadReal c3 = _mm_mul_ps( a3.getQuad(), vectorIn.getQuad());
  58. _MM_TRANSPOSE4_PS(c0,c1,c2,c3);
  59. dotsOut.getQuad() = _mm_add_ps( _mm_add_ps(c0, c1), c2 );
  60. }
  61. #define HK_VECTOR4UTIL_dot3_2vs2
  62. inline void HK_CALL hkVector4Util::dot3_2vs2( const hkVector4& a0, const hkVector4& a2, const hkVector4& b0, const hkVector4& b1, hkVector4& dotsOut)
  63. {
  64. register hkQuadReal c0 = _mm_mul_ps( a0.getQuad(), b0.getQuad());
  65. register hkQuadReal c1 = _mm_mul_ps( a0.getQuad(), b1.getQuad());
  66. register hkQuadReal c2 = _mm_mul_ps( a2.getQuad(), b0.getQuad());
  67. register hkQuadReal c3 = _mm_mul_ps( a2.getQuad(), b1.getQuad());
  68. _MM_TRANSPOSE4_PS(c0,c1,c2,c3);
  69. dotsOut.getQuad() = _mm_add_ps( _mm_add_ps(c0, c1), c2 );
  70. }
  71. /*
  72. * Havok SDK - NO SOURCE PC DOWNLOAD, BUILD(#20090216)
  73. * Confidential Information of Havok.  (C) Copyright 1999-2009
  74. * Telekinesys Research Limited t/a Havok. All Rights Reserved. The Havok
  75. * Logo, and the Havok buzzsaw logo are trademarks of Havok.  Title, ownership
  76. * rights, and intellectual property rights in the Havok software remain in
  77. * Havok and/or its suppliers.
  78. * Use of this software for evaluation purposes is subject to and indicates
  79. * acceptance of the End User licence Agreement for this product. A copy of
  80. * the license is included with this software and is also available at www.havok.com/tryhavok.
  81. */