1
0
mirror of https://github.com/microsoft/DirectXMath synced 2024-11-25 13:40:03 +00:00
DirectXMath/HISTORY.md
Chuck Walbourn e24041c613 April 2020
2020-04-23 16:38:50 -07:00

8.3 KiB

DirectXMath

https://github.com/Microsoft/DirectXMath

Release available for download on GitHub

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)