mirror of
https://github.com/microsoft/DirectXMath
synced 2024-11-29 07:11:05 +00:00
160 lines
8.3 KiB
Markdown
160 lines
8.3 KiB
Markdown
# DirectXMath
|
|
|
|
https://github.com/Microsoft/DirectXMath
|
|
|
|
Release available for download on [GitHub](https://github.com/microsoft/DirectXMath/releases)
|
|
|
|
## Release History
|
|
|
|
### April 2020 (3.15)
|
|
* 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
|
|
|
|
### August 2019 (3.14)
|
|
* 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
|
|
|
|
### July 2018 (3.13)
|
|
* ``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
|
|
|
|
### February 2018 (3.12)
|
|
* ARM64 use of fused multiply-accumulate intriniscs
|
|
* Conformance fix for XMConvertFloatToHalf
|
|
* Minor code cleanup
|
|
|
|
### June 2017 (3.11)
|
|
* 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
|
|
|
|
### January 2017 (3.10)
|
|
* 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
|
|
|
|
### June 2016 (3.09)
|
|
* 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
|
|
|
|
### May 2016
|
|
* DirectXMath 3.08 released under the MIT license
|
|
|
|
### November 2015 (3.08)
|
|
* 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
|
|
|
|
### April 2015 (3.07)
|
|
* 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
|
|
|
|
### October 2013 (3.06)
|
|
* Fixed load/store of XMFLOAT3SE to properly match the ``DXGI_FORMAT_R9G9B9E5_SHAREDEXP``
|
|
* Added ``XMLoadUDecN4_XR`` and ``XMStoreUDecN4_XR`` to match ``DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM``
|
|
* Added ``XMColorRGBToSRGB`` and ``XMColorSRGBToRGB`` to convert linear RGB <-> sRGB
|
|
|
|
### July 2013 (3.05)
|
|
* 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/`` or ``operator/=``
|
|
|
|
### March 2013 (3.04)
|
|
* ``XMVectorExp2``, ``XMVectorLog2``, ``XMVectorExpE``, and ``XMVectorLogE`` functions added to provide base-e support in addition to the existing base-2 support
|
|
* ``XMVectorExp`` and ``XMVectorLog`` 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
|
|
|
|
### March 2012 (3.03)
|
|
* *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
|
|
|
|
### February 2012 (3.02)
|
|
* 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
|
|
|
|
### September 2011 (3.00)
|
|
* 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
|
|
|
|
### July 2012 (XNAMath 2.05)
|
|
* Template forms have been added for `XMVectorPermute`, `XMVectorSwizzle`, `XMVectorShiftLeft`, `XMVectorRotateLeft`, `XMVectorRotateRight`, and `XMVectorInsert`
|
|
* The `XM_STRICT_XMMATRIX` compilation define has been added for opaque `XMMATRIX`.
|
|
* Stream stride and count arguments have been changed to `size_t`
|
|
* The ``pDeterminant`` parameter of `XMMatrixInverse` is now optional
|
|
* Additional operator= overloads for `XMBYTEN4`, `XMBYTE4`, `XMUBYTEN4`, and `XMUBYTE4` types are now available
|
|
|
|
### February 2011 (XNAMath 2.04)
|
|
* 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` and `XMVectorCeiling`
|
|
|
|
|
|
### June 2010 (XNAMath 2.03)
|
|
* 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
|
|
|
|
### February 2010 (XNAMath 2.02)
|
|
* Fixes to `XMStoreColor`, `XMQuaternionRotationMatrix`, `XMVectorATan2`, and `XMVectorATan2Est`
|
|
|
|
### August 2009 (XNAMath 2.01)
|
|
* 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`` and ``DXGI_FORMAT_R11G11B10_FLOAT``)
|
|
|
|
### March 2009 (XNAMath 2.00)
|
|
* Initial release (based on the Xbox 360 Xbox math library)
|