https://github.com/Microsoft/DirectXMath
Release available for download on GitHub
- Fixed close-to-zero bug in the implementation of
TriangleTests::Intersects
- Renamed implementation namespace from
DirectX::Internal
toDirectX::MathInternal
to avoid some conformance issues with other libraries - CMake project updates including support for ARM64EC
- Added GitHub Actions YAML files
- Fix to address MinGW issue with
__cpuid
in cpuid.h vs. intrin.h - Additional updates for clang/LLVM and GNUC
- Minor comment updates
- Hot-fix to address
-Wunsafe-buffer-usage
warnings from clang v16 - Hot-fix to address MinGW issue with
__cpuid
in cpuid.h vs. intrin.h - CMake project updates including pkg-config file generation
- C++20 spaceship operators for XMFLOAT2, XMFLOAT3, etc. when building with
/std:c++20 /Zc:_cplusplus
- Improved conformance for ARM64 when using
/Zc:arm64-aliased-neon-types-
- Minor code review
- CMake project updated to require 3.20 or later
- Added Azure Dev Ops Pipeline YAML files
- Hot-fix to address
-Wreserved-identifier
warnings with clang v13 - C++20 spaceship operators for XMFLOAT2, XMFLOAT3, etc. when building with
/std:c++20 /Zc:_cplusplus
- Minor CMake project update
- Added ColorsLinear namespace to DirectXColors.h with linear versions of .NET colors
- Optimized the
XMMatrixRotationRollPitchYaw(FromVector)
functions - Fixed overread problem for 16bpp GPU types Load functions:
XMUNIBBLE4
,XMU555
,XMU565
,XMBYTEN2
,XMBYTE2
,XMUBYTEN2
,XMUBYTE2
XM_CACHE_LINE_SIZE
updated for ARM/ARM64 targets to 128 bytes- A few comments added to improve IntelliSense experience
- Conformance improvements for GNU compiler
- Minor code cleanup
- Hot-fixes to resolve build breaks for clang/LLVM and GCC on ARM64
XM_ALIGNED_DATA
andXM_ALIGNED_STRUCT
macros updated to use C++17alignas
when available
- Added
XMVectorLog10
/XMVectorExp10
- Added
XMColorRGBToYUV_UHD
/XMColorYUVToRGB_UHD
for Rec. 2020 YUV - Added optional
rhcoords
parameter for BoundingFrustumCreateFromMatrix
- Added use of Intel® Short Vector Matrix Library (SVML) supported by VS 2019
- Opt-in with
_XM_SVML_INTRINSICS_
; opt-out with_XM_DISABLE_INTEL_SVML_
- Opt-in with
- Fixed denorm handling for
XMConvertFloatToHalf
- Fixed flush (too small for denorm) handling for
XMStoreFloat3PK
- Fixed clamping bug in
XMStoreByteN4
- Cleaned up ARM-NEON intrinsics type issues for improved portability on GNUC
- Fixed
GXMVECTOR
for x86__vectorcall
- Code review
- Added
XMMatrixVectorTensorProduct
for creating a matrix from two vectors - Use of m256 registers and FMA3 with
/arch:AVX2
for stream and some matrix functions - Optimized load/stores for SSE2 float2 & float3 functions
- Optimized some instruction choices for better AMD CPU support
- Improved conformance for clang/LLVM, GCC, and MinGW compilers
- Code review (
constexpr
/noexcept
usage) - Retired VS 2015 support
- Added float control around IsNan functions to resolve issue with VS 2019 with
/fp:fast
- XMVerifyCPUSupport updated for clang/LLVM cpuid implementation on x86/x64
- Added support for clang/LLVM built-in platform defines as well as the MSVC ones
- Cleaned up ARM-NEON intrinsics type issues for improved portability
- Removed unneeded malloc.h include in DirectXMath.h
- Whitespace cleanup
XMFLOAT3X4
,XMFLOAT3X4A
, and associated Load/Store functions- Move/copy constructors and assignment operators for C++ types
- Minor fix for XMVectorClamp behavior with NaN
- Fixed compilation warnings with VS 2017 (15.7 update), Intel C++ 18.0 compiler, and clang 6
- Retired VS 2013 support
- Minor code cleanup
- ARM64 use of fused multiply-accumulate intriniscs
- Conformance fix for XMConvertFloatToHalf
- Minor code cleanup
- AVX optimization of XMMatrixMultiply and XMMatrixMultiplyTranspose
- AVX2 optimization for XMVectorSplatX
- FMA3 optimization of XMVectorMultiplyAdd and XMVectorNegativeMultiplySubtract (implied by /arch:AVX2)
- Conformance fixes to support compilation with Clang 3.7
- Added XMVectorSum for horizontal adds
- ARMv8 intrinsics use for ARM64 platform (division, rounding, half-precision conversion)
- Added SSE3 codepaths using opt-in
_XM_SSE3_INTRINSICS_
- XMVectorRound fix for no-intrinsics to match round to nearest (even)
- XMStoreFloat3SE fix when max channel isn't a perfect power of 2
- constexpr conformance fix and workaround for compiler bug in VS 2015 RTM
- Remove support for VS 2012 compilers
- Remove
__vector4i
deprecated type
- Includes support for additional optimizations when built with /arch:AVX or /arch:AVX2
- Added use of constexpr for type constructors, XMConvertToRadians, and XMConvertToDegrees
- Marked
__vector4i
,XMXDEC4
,XMDECN4
,XMDEC4
, and associated Load & Store functions as deprecated.- These are vestiges of Xbox 360 support and will be removed in a future release
- Renamed parameter in XMMatrixPerspectiveFov* to reduce user confusion when relying on IntelliSense
- XMU565, XMUNIBBLE4 constructors take uint8_t instead of int8_t
- DirectXMath 3.08 released under the MIT license
- Added use of
_mm_sfence
for Stream methods - Fixed bug with non-uniform scaling transforms for BoundingOrientedBox
- Added asserts for Near/FarZ in XMMatrix* methods
- Added use of
=default
for PODs with VS 2013/2015 - Additional SSE and ARM-NEON optimizations for PackedVector functions
- Fix customer reported bugs in BoundingBox methods
- Fix customer reported bug in XMStoreFloat3SE
- Fix customer reported bug in XMVectorATan2, XMVectorATan2Est
- Fix customer reported bug in XMVectorRound
- Fixed load/store of XMFLOAT3SE to properly match the
DXGI_FORMAT_R9G9B9E5_SHAREDEXP
- Added
XMLoadUDecN4_XR
andXMStoreUDecN4_XR
to matchDXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM
- Added
XMColorRGBToSRGB
andXMColorSRGBToRGB
to convert linear RGB <-> sRGB
- Use x86/x64
__vectorcall
calling-convention when available (XM_CALLCONV
,HXMVECTOR
,FXMMATRIX
introduced) - Fixed bug with XMVectorFloor and XMVectorCeiling when given whole odd numbers (i.e. 105.0)
- Improved XMVectorRound algorithm
- ARM-NEON optimizations for XMVectorExp2, XMVectorLog2, XMVectorExpE, and XMVectorLogE
- ARM-NEON code paths use multiply-by-scalar intrinsics when supported
- Additional optimizations for ARM-NEON Stream functions
- Fixed potential warning C4723 using
operator/
oroperator/=
XMVectorExp2
,XMVectorLog2
,XMVectorExpE
, andXMVectorLogE
functions added to provide base-e support in addition to the existing base-2 supportXMVectorExp
andXMVectorLog
are now aliases for XMVectorExp2 and XMVectorLog2- Additional optimizations for Stream functions
- XMVector3Cross now ensures w component is zero on ARM
- XMConvertHalfToFloat and XMConvertFloatToHalf now use IEEE 754 standard float16 behavior for INF/QNAN
- Updated matrix version Transform for BoundingOrientedBox and BoundingFrustum to handle scaling
- breaking change Removed union members from XMMATRIX type to make it a fully 'opaque' type
- Marked single-parameter C++ constructors for XMFLOAT2, XMFLOAT2A, XMFLOAT3, XMFLOAT3A, XMFLOAT4, and XMFLOAT4A explicit
- ARM-NEON intrinsics (selected by default for the ARM platform)
- Reworked XMVectorPermute, change of
XM_PERMUTE_
defines, removal of XMVectorPermuteControl - Addition of
XM_SWIZZLE_
defines - Optimizations for transcendental functions
- Template forms for permute, swizzle, shift-left, rotate-left, rotation-right, and insert
- Removal of deprecated types and functions
XM_CACHE_LINE_SIZE
define, XMVectorExpEst, XMVectorLogEst, XMVectorPowEst, XMVectorSinHEs, XMVectorCosHEst, XMVectorTanHEst, XMVector2InBoundsR, XMVector3InBoundsR, XMVector4InBoundsR
- Removed
XM_STRICT_VECTOR4
; XMVECTOR in NO-INTRINSICS always defined without .x, .y, .z, .w, .v, or .u - Additional bounding types
- SAL fixes and improvements
- Renamed and reorganized the headers
- Introduced C++ namespaces
- Removed the Xbox 360-specific GPU types
- HENDN3, XMHEND3, XMUHENDN3, XMUHEND3, XMDHENN3, XMDHEN3, XMUDHENN3, XMUDHEN3, XMXICON4, XMXICO4, XMICON4, XMICO4, XMUICON4, XMUICO4
- Template forms have been added for
XMVectorPermute
,XMVectorSwizzle
,XMVectorShiftLeft
,XMVectorRotateLeft
,XMVectorRotateRight
, andXMVectorInsert
- The
XM_STRICT_XMMATRIX
compilation define has been added for opaqueXMMATRIX
. - Stream stride and count arguments have been changed to
size_t
- The
pDeterminant
parameter ofXMMatrixInverse
is now optional - Additional operator= overloads for
XMBYTEN4
,XMBYTE4
,XMUBYTEN4
, andXMUBYTE4
types are now available
- Addition of new data types and associated load-store functions:
XMBYTEN2, XMBYTE2, XMUBYTEN2, XMUBYTE2
XMLoadByteN2, XMLoadByte2, XMLoadUByteN2, XMLoadUByte2
XMStoreByteN2, XMStoreByte2, XMStoreUByteN2, XMStoreUByte2
XMINT2, XMUINT2, XMINT3, XMUINT3, XMINT4, XMUINT4
XMLoadSInt2, XMLoadUInt2, XMLoadSInt3, XMLoadUInt3, XMLoadSInt4, XMLoadUInt4
XMStoreSInt2, XMStoreUInt2, XMStoreSInt3, XMStoreUInt3, XMStoreSInt4, XMStoreUInt4
- Marked most single-parameter C++ constructors with
explicit
keyword - Corrected range issues with SSE implementations of
XMVectorFloor
andXMVectorCeiling
- Addition of
XMVectorDivide
to optimize SSE2 vector division operations - Unified handling of floating-point specials between the Windows SSE2 and no-intrinsics implementations
- Use of Visual Studio style SAL annotations
- Modifications to the C++ declarations for
XMFLOAT2A/3A/4A/4X3A/4X4A
to better support these types in C++ templates
- Fixes to
XMStoreColor
,XMQuaternionRotationMatrix
,XMVectorATan2
, andXMVectorATan2Est
- Adds
XM_STRICT_VECTOR4
. This opt-in directive disallows the usage of XboxMath-like member accessors such as .x, .y, and .z. This makes it easier to write portable XNA Math code. - Added conversion support for the following Windows graphics formats:
- 16-bit color formats (565, 555X, 5551)
- 4-bits per channel color formats (4444)
- Unique Direct3D 10/11 formats (
DXGI_FORMAT_R9G9B9E5_SHAREDEXP
andDXGI_FORMAT_R11G11B10_FLOAT
)
- Initial release (based on the Xbox 360 Xbox math library)