1717#error DirectX Math requires C++
1818#endif
1919
20- #define DIRECTX_MATH_VERSION 307
20+ #define DIRECTX_MATH_VERSION 308
2121
2222
2323#if defined(_MSC_VER) && !defined(_M_ARM) && !defined(_M_ARM64) && (!_MANAGED) && (!_M_CEE) && (!defined(_M_IX86_FP) || (_M_IX86_FP > 1)) && !defined(_XM_NO_INTRINSICS_) && !defined(_XM_VECTORCALL_)
3232#define XM_CALLCONV __fastcall
3333#endif
3434
35+ #if defined(_MSC_VER) && (_MSC_VER < 1800)
36+ #define XM_CTOR_DEFAULT {}
37+ #else
38+ #define XM_CTOR_DEFAULT =default ;
39+ #endif
40+
3541
3642
3743#if !defined(_XM_ARM_NEON_INTRINSICS_) && !defined(_XM_SSE_INTRINSICS_) && !defined(_XM_NO_INTRINSICS_)
117123
118124#if defined(_XM_NO_MOVNT_)
119125#define XM_STREAM_PS ( p, a ) _mm_store_ps( p, a )
126+ #define XM_SFENCE ()
120127#else
121128#define XM_STREAM_PS ( p, a ) _mm_stream_ps( p, a )
129+ #define XM_SFENCE () _mm_sfence()
122130#endif
123131
124132#define XM_PERMUTE_PS ( v, c ) _mm_shuffle_ps( v, v, c )
@@ -413,7 +421,7 @@ __declspec(align(16)) struct XMMATRIX
413421 XMVECTOR r[4 ];
414422#endif
415423
416- XMMATRIX () {}
424+ XMMATRIX () XM_CTOR_DEFAULT
417425 XMMATRIX (FXMVECTOR R0, FXMVECTOR R1, FXMVECTOR R2, CXMVECTOR R3) { r[0 ] = R0; r[1 ] = R1; r[2 ] = R2; r[3 ] = R3; }
418426 XMMATRIX (float m00, float m01, float m02, float m03,
419427 float m10, float m11, float m12, float m13,
@@ -453,7 +461,7 @@ struct XMFLOAT2
453461 float x;
454462 float y;
455463
456- XMFLOAT2 () {}
464+ XMFLOAT2 () XM_CTOR_DEFAULT
457465 XMFLOAT2 (float _x, float _y) : x(_x), y(_y) {}
458466 explicit XMFLOAT2 (_In_reads_(2 ) const float *pArray) : x(pArray[0 ]), y(pArray[1 ]) {}
459467
@@ -463,7 +471,7 @@ struct XMFLOAT2
463471// 2D Vector; 32 bit floating point components aligned on a 16 byte boundary
464472__declspec (align(16 )) struct XMFLOAT2A : public XMFLOAT2
465473{
466- XMFLOAT2A () : XMFLOAT2 () {}
474+ XMFLOAT2A () XM_CTOR_DEFAULT
467475 XMFLOAT2A (float _x, float _y) : XMFLOAT2 (_x, _y) {}
468476 explicit XMFLOAT2A (_In_reads_ (2 ) const float *pArray) : XMFLOAT2 (pArray) {}
469477
@@ -477,7 +485,7 @@ struct XMINT2
477485 int32_t x;
478486 int32_t y;
479487
480- XMINT2 () {}
488+ XMINT2 () XM_CTOR_DEFAULT
481489 XMINT2 (int32_t _x, int32_t _y) : x(_x), y(_y) {}
482490 explicit XMINT2 (_In_reads_(2 ) const int32_t *pArray) : x(pArray[0 ]), y(pArray[1 ]) {}
483491
@@ -490,7 +498,7 @@ struct XMUINT2
490498 uint32_t x;
491499 uint32_t y;
492500
493- XMUINT2 () {}
501+ XMUINT2 () XM_CTOR_DEFAULT
494502 XMUINT2 (uint32_t _x, uint32_t _y) : x(_x), y(_y) {}
495503 explicit XMUINT2 (_In_reads_(2 ) const uint32_t *pArray) : x(pArray[0 ]), y(pArray[1 ]) {}
496504
@@ -505,7 +513,7 @@ struct XMFLOAT3
505513 float y;
506514 float z;
507515
508- XMFLOAT3 () {}
516+ XMFLOAT3 () XM_CTOR_DEFAULT
509517 XMFLOAT3 (float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
510518 explicit XMFLOAT3 (_In_reads_(3 ) const float *pArray) : x(pArray[0 ]), y(pArray[1 ]), z(pArray[2 ]) {}
511519
@@ -515,7 +523,7 @@ struct XMFLOAT3
515523// 3D Vector; 32 bit floating point components aligned on a 16 byte boundary
516524__declspec (align(16 )) struct XMFLOAT3A : public XMFLOAT3
517525{
518- XMFLOAT3A () : XMFLOAT3 () {}
526+ XMFLOAT3A () XM_CTOR_DEFAULT
519527 XMFLOAT3A (float _x, float _y, float _z) : XMFLOAT3 (_x, _y, _z) {}
520528 explicit XMFLOAT3A (_In_reads_ (3 ) const float *pArray) : XMFLOAT3 (pArray) {}
521529
@@ -530,7 +538,7 @@ struct XMINT3
530538 int32_t y;
531539 int32_t z;
532540
533- XMINT3 () {}
541+ XMINT3 () XM_CTOR_DEFAULT
534542 XMINT3 (int32_t _x, int32_t _y, int32_t _z) : x(_x), y(_y), z(_z) {}
535543 explicit XMINT3 (_In_reads_(3 ) const int32_t *pArray) : x(pArray[0 ]), y(pArray[1 ]), z(pArray[2 ]) {}
536544
@@ -544,7 +552,7 @@ struct XMUINT3
544552 uint32_t y;
545553 uint32_t z;
546554
547- XMUINT3 () {}
555+ XMUINT3 () XM_CTOR_DEFAULT
548556 XMUINT3 (uint32_t _x, uint32_t _y, uint32_t _z) : x(_x), y(_y), z(_z) {}
549557 explicit XMUINT3 (_In_reads_(3 ) const uint32_t *pArray) : x(pArray[0 ]), y(pArray[1 ]), z(pArray[2 ]) {}
550558
@@ -560,7 +568,7 @@ struct XMFLOAT4
560568 float z;
561569 float w;
562570
563- XMFLOAT4 () {}
571+ XMFLOAT4 () XM_CTOR_DEFAULT
564572 XMFLOAT4 (float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) {}
565573 explicit XMFLOAT4 (_In_reads_(4 ) const float *pArray) : x(pArray[0 ]), y(pArray[1 ]), z(pArray[2 ]), w(pArray[3 ]) {}
566574
@@ -570,7 +578,7 @@ struct XMFLOAT4
570578// 4D Vector; 32 bit floating point components aligned on a 16 byte boundary
571579__declspec (align(16 )) struct XMFLOAT4A : public XMFLOAT4
572580{
573- XMFLOAT4A () : XMFLOAT4 () {}
581+ XMFLOAT4A () XM_CTOR_DEFAULT
574582 XMFLOAT4A (float _x, float _y, float _z, float _w) : XMFLOAT4 (_x, _y, _z, _w) {}
575583 explicit XMFLOAT4A (_In_reads_ (4 ) const float *pArray) : XMFLOAT4 (pArray) {}
576584
@@ -586,7 +594,7 @@ struct XMINT4
586594 int32_t z;
587595 int32_t w;
588596
589- XMINT4 () {}
597+ XMINT4 () XM_CTOR_DEFAULT
590598 XMINT4 (int32_t _x, int32_t _y, int32_t _z, int32_t _w) : x(_x), y(_y), z(_z), w(_w) {}
591599 explicit XMINT4 (_In_reads_(4 ) const int32_t *pArray) : x(pArray[0 ]), y(pArray[1 ]), z(pArray[2 ]), w(pArray[3 ]) {}
592600
@@ -601,7 +609,7 @@ struct XMUINT4
601609 uint32_t z;
602610 uint32_t w;
603611
604- XMUINT4 () {}
612+ XMUINT4 () XM_CTOR_DEFAULT
605613 XMUINT4 (uint32_t _x, uint32_t _y, uint32_t _z, uint32_t _w) : x(_x), y(_y), z(_z), w(_w) {}
606614 explicit XMUINT4 (_In_reads_(4 ) const uint32_t *pArray) : x(pArray[0 ]), y(pArray[1 ]), z(pArray[2 ]), w(pArray[3 ]) {}
607615
@@ -623,7 +631,7 @@ struct XMFLOAT3X3
623631 float m[3 ][3 ];
624632 };
625633
626- XMFLOAT3X3 () {}
634+ XMFLOAT3X3 () XM_CTOR_DEFAULT
627635 XMFLOAT3X3 (float m00, float m01, float m02,
628636 float m10, float m11, float m12,
629637 float m20, float m21, float m22);
@@ -651,7 +659,7 @@ struct XMFLOAT4X3
651659 float m[4 ][3 ];
652660 };
653661
654- XMFLOAT4X3 () {}
662+ XMFLOAT4X3 () XM_CTOR_DEFAULT
655663 XMFLOAT4X3 (float m00, float m01, float m02,
656664 float m10, float m11, float m12,
657665 float m20, float m21, float m22,
@@ -668,7 +676,7 @@ struct XMFLOAT4X3
668676// 4x3 Matrix: 32 bit floating point components aligned on a 16 byte boundary
669677__declspec (align(16 )) struct XMFLOAT4X3A : public XMFLOAT4X3
670678{
671- XMFLOAT4X3A () : XMFLOAT4X3 () {}
679+ XMFLOAT4X3A () XM_CTOR_DEFAULT
672680 XMFLOAT4X3A (float m00, float m01, float m02,
673681 float m10, float m11, float m12,
674682 float m20, float m21, float m22,
@@ -698,7 +706,7 @@ struct XMFLOAT4X4
698706 float m[4 ][4 ];
699707 };
700708
701- XMFLOAT4X4 () {}
709+ XMFLOAT4X4 () XM_CTOR_DEFAULT
702710 XMFLOAT4X4 (float m00, float m01, float m02, float m03,
703711 float m10, float m11, float m12, float m13,
704712 float m20, float m21, float m22, float m23,
@@ -714,7 +722,7 @@ struct XMFLOAT4X4
714722// 4x4 Matrix: 32 bit floating point components aligned on a 16 byte boundary
715723__declspec (align(16 )) struct XMFLOAT4X4A : public XMFLOAT4X4
716724{
717- XMFLOAT4X4A () : XMFLOAT4X4 () {}
725+ XMFLOAT4X4A () XM_CTOR_DEFAULT
718726 XMFLOAT4X4A (float m00, float m01, float m02, float m03,
719727 float m10, float m11, float m12, float m13,
720728 float m20, float m21, float m22, float m23,
@@ -1672,6 +1680,7 @@ XMGLOBALCONST XMVECTORF32 g_XMNegIdentityR2 = {0.0f, 0.0f,-1.0f, 0.0f};
16721680XMGLOBALCONST XMVECTORF32 g_XMNegIdentityR3 = {0 .0f , 0 .0f , 0 .0f ,-1 .0f };
16731681XMGLOBALCONST XMVECTORU32 g_XMNegativeZero = {0x80000000 , 0x80000000 , 0x80000000 , 0x80000000 };
16741682XMGLOBALCONST XMVECTORU32 g_XMNegate3 = {0x80000000 , 0x80000000 , 0x80000000 , 0x00000000 };
1683+ XMGLOBALCONST XMVECTORU32 g_XMMaskXY = {0xFFFFFFFF , 0xFFFFFFFF , 0x00000000 , 0x00000000 };
16751684XMGLOBALCONST XMVECTORU32 g_XMMask3 = {0xFFFFFFFF , 0xFFFFFFFF , 0xFFFFFFFF , 0x00000000 };
16761685XMGLOBALCONST XMVECTORU32 g_XMMaskX = {0xFFFFFFFF , 0x00000000 , 0x00000000 , 0x00000000 };
16771686XMGLOBALCONST XMVECTORU32 g_XMMaskY = {0x00000000 , 0xFFFFFFFF , 0x00000000 , 0x00000000 };
@@ -1779,6 +1788,12 @@ XMGLOBALCONST XMVECTORF32 g_XMLogEst6 = {+0.057148f, +0.057148f, +0.05
17791788XMGLOBALCONST XMVECTORF32 g_XMLogEst7 = {-0 .010578f , -0 .010578f , -0 .010578f , -0 .010578f };
17801789XMGLOBALCONST XMVECTORF32 g_XMLgE = {+1 .442695f , +1 .442695f , +1 .442695f , +1 .442695f };
17811790XMGLOBALCONST XMVECTORF32 g_XMInvLgE = {+6 .93147182e-1f , +6 .93147182e-1f , +6 .93147182e-1f , +6 .93147182e-1f };
1791+ XMGLOBALCONST XMVECTORF32 g_UByteMax = {255 .0f , 255 .0f , 255 .0f , 255 .0f };
1792+ XMGLOBALCONST XMVECTORF32 g_ByteMin = {-127 .0f , -127 .0f , -127 .0f , -127 .0f };
1793+ XMGLOBALCONST XMVECTORF32 g_ByteMax = {127 .0f , 127 .0f , 127 .0f , 127 .0f };
1794+ XMGLOBALCONST XMVECTORF32 g_ShortMin = {-32767 .0f , -32767 .0f , -32767 .0f , -32767 .0f };
1795+ XMGLOBALCONST XMVECTORF32 g_ShortMax = {32767 .0f , 32767 .0f , 32767 .0f , 32767 .0f };
1796+ XMGLOBALCONST XMVECTORF32 g_UShortMax = {65535 .0f , 65535 .0f , 65535 .0f , 65535 .0f };
17821797
17831798/* ***************************************************************************
17841799 *
0 commit comments