Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1 | pmbaty | 1 | /*++ |
| 2 | |||
| 3 | Copyright (c) Microsoft Corporation. All rights reserved. |
||
| 4 | |||
| 5 | Module Name: |
||
| 6 | |||
| 7 | xnamath.h |
||
| 8 | |||
| 9 | Abstract: |
||
| 10 | |||
| 11 | XNA math library for Windows and Xbox 360 |
||
| 12 | --*/ |
||
| 13 | |||
| 14 | #if defined(_MSC_VER) && (_MSC_VER > 1000) |
||
| 15 | #pragma once |
||
| 16 | #endif |
||
| 17 | |||
| 18 | #ifndef __XNAMATH_H__ |
||
| 19 | #define __XNAMATH_H__ |
||
| 20 | |||
| 21 | #ifdef __XBOXMATH_H__ |
||
| 22 | #error XNAMATH and XBOXMATH are incompatible in the same compilation module. Use one or the other. |
||
| 23 | #endif |
||
| 24 | |||
| 25 | #define XNAMATH_VERSION 201 |
||
| 26 | |||
| 27 | #if !defined(_XM_X64_) && !defined(_XM_X86_) |
||
| 28 | #if defined(_M_AMD64) || defined(_AMD64_) |
||
| 29 | #define _XM_X64_ |
||
| 30 | #elif defined(_M_IX86) || defined(_X86_) |
||
| 31 | #define _XM_X86_ |
||
| 32 | #endif |
||
| 33 | #endif |
||
| 34 | |||
| 35 | #if defined(_XM_X86_) || defined(_XM_X64_) |
||
| 36 | #define _XM_SSE_INTRINSICS_ |
||
| 37 | #if !defined(__cplusplus) && !defined(_XM_NO_INTRINSICS_) |
||
| 38 | #error xnamath.h only supports C compliation for Xbox 360 targets and no intrinsics cases for x86/x64 |
||
| 39 | #endif |
||
| 40 | #elif defined(_XBOX_VER) |
||
| 41 | #if !defined(__VMX128_SUPPORTED) && !defined(_XM_NO_INTRINSICS_) |
||
| 42 | #error xnamath.h requires VMX128 compiler support for XBOX 360 |
||
| 43 | #endif // !__VMX128_SUPPORTED && !_XM_NO_INTRINSICS_ |
||
| 44 | #define _XM_VMX128_INTRINSICS_ |
||
| 45 | #else |
||
| 46 | #error xnamath.h only supports x86, x64, or XBox 360 targets |
||
| 47 | #endif |
||
| 48 | |||
| 49 | |||
| 50 | #if defined(_XM_SSE_INTRINSICS_) |
||
| 51 | #ifndef _XM_NO_INTRINSICS_ |
||
| 52 | #include <xmmintrin.h> |
||
| 53 | #include <emmintrin.h> |
||
| 54 | #endif |
||
| 55 | #elif defined(_XM_VMX128_INTRINSICS_) |
||
| 56 | #error This version of xnamath.h is for Windows use only |
||
| 57 | #endif |
||
| 58 | |||
| 59 | #if defined(_XM_SSE_INTRINSICS_) |
||
| 60 | #pragma warning(push) |
||
| 61 | #pragma warning(disable:4985) |
||
| 62 | #endif |
||
| 63 | #include <math.h> |
||
| 64 | #if defined(_XM_SSE_INTRINSICS_) |
||
| 65 | #pragma warning(pop) |
||
| 66 | #endif |
||
| 67 | |||
| 68 | #include <sal.h> |
||
| 69 | |||
| 70 | #if !defined(XMINLINE) |
||
| 71 | #if !defined(XM_NO_MISALIGNED_VECTOR_ACCESS) |
||
| 72 | #define XMINLINE __inline |
||
| 73 | #else |
||
| 74 | #define XMINLINE __forceinline |
||
| 75 | #endif |
||
| 76 | #endif |
||
| 77 | |||
| 78 | #if !defined(XMFINLINE) |
||
| 79 | #define XMFINLINE __forceinline |
||
| 80 | #endif |
||
| 81 | |||
| 82 | #if !defined(XMDEBUG) |
||
| 83 | #if defined(_DEBUG) |
||
| 84 | #define XMDEBUG |
||
| 85 | #endif |
||
| 86 | #endif // !XMDEBUG |
||
| 87 | |||
| 88 | #if !defined(XMASSERT) |
||
| 89 | #if defined(_PREFAST_) |
||
| 90 | #define XMASSERT(Expression) __analysis_assume((Expression)) |
||
| 91 | #elif defined(XMDEBUG) // !_PREFAST_ |
||
| 92 | #define XMASSERT(Expression) ((VOID)((Expression) || (XMAssert(#Expression, __FILE__, __LINE__), 0))) |
||
| 93 | #else // !XMDEBUG |
||
| 94 | #define XMASSERT(Expression) ((VOID)0) |
||
| 95 | #endif // !XMDEBUG |
||
| 96 | #endif // !XMASSERT |
||
| 97 | |||
| 98 | #if !defined(XM_NO_ALIGNMENT) |
||
| 99 | #define _DECLSPEC_ALIGN_16_ __declspec(align(16)) |
||
| 100 | #else |
||
| 101 | #define _DECLSPEC_ALIGN_16_ |
||
| 102 | #endif |
||
| 103 | |||
| 104 | |||
| 105 | #if defined(_MSC_VER) && (_MSC_VER<1500) && (_MSC_VER>=1400) |
||
| 106 | #define _XM_ISVS2005_ |
||
| 107 | #endif |
||
| 108 | |||
| 109 | #if defined(_MSC_VER) && (_MSC_VER<1600) && (_MSC_VER>=1500) |
||
| 110 | #define _XM_ISVS2008_ |
||
| 111 | #endif |
||
| 112 | |||
| 113 | /**************************************************************************** |
||
| 114 | * |
||
| 115 | * Constant definitions |
||
| 116 | * |
||
| 117 | ****************************************************************************/ |
||
| 118 | |||
| 119 | #define XM_PI 3.141592654f |
||
| 120 | #define XM_2PI 6.283185307f |
||
| 121 | #define XM_1DIVPI 0.318309886f |
||
| 122 | #define XM_1DIV2PI 0.159154943f |
||
| 123 | #define XM_PIDIV2 1.570796327f |
||
| 124 | #define XM_PIDIV4 0.785398163f |
||
| 125 | |||
| 126 | #define XM_SELECT_0 0x00000000 |
||
| 127 | #define XM_SELECT_1 0xFFFFFFFF |
||
| 128 | |||
| 129 | #define XM_PERMUTE_0X 0x00010203 |
||
| 130 | #define XM_PERMUTE_0Y 0x04050607 |
||
| 131 | #define XM_PERMUTE_0Z 0x08090A0B |
||
| 132 | #define XM_PERMUTE_0W 0x0C0D0E0F |
||
| 133 | #define XM_PERMUTE_1X 0x10111213 |
||
| 134 | #define XM_PERMUTE_1Y 0x14151617 |
||
| 135 | #define XM_PERMUTE_1Z 0x18191A1B |
||
| 136 | #define XM_PERMUTE_1W 0x1C1D1E1F |
||
| 137 | |||
| 138 | #define XM_CRMASK_CR6 0x000000F0 |
||
| 139 | #define XM_CRMASK_CR6TRUE 0x00000080 |
||
| 140 | #define XM_CRMASK_CR6FALSE 0x00000020 |
||
| 141 | #define XM_CRMASK_CR6BOUNDS XM_CRMASK_CR6FALSE |
||
| 142 | |||
| 143 | #define XM_CACHE_LINE_SIZE 64 |
||
| 144 | |||
| 145 | /**************************************************************************** |
||
| 146 | * |
||
| 147 | * Macros |
||
| 148 | * |
||
| 149 | ****************************************************************************/ |
||
| 150 | |||
| 151 | // Unit conversion |
||
| 152 | |||
| 153 | XMFINLINE FLOAT XMConvertToRadians(FLOAT fDegrees) { return fDegrees * (XM_PI / 180.0f); } |
||
| 154 | XMFINLINE FLOAT XMConvertToDegrees(FLOAT fRadians) { return fRadians * (180.0f / XM_PI); } |
||
| 155 | |||
| 156 | // Condition register evaluation proceeding a recording (Rc) comparison |
||
| 157 | |||
| 158 | #define XMComparisonAllTrue(CR) (((CR) & XM_CRMASK_CR6TRUE) == XM_CRMASK_CR6TRUE) |
||
| 159 | #define XMComparisonAnyTrue(CR) (((CR) & XM_CRMASK_CR6FALSE) != XM_CRMASK_CR6FALSE) |
||
| 160 | #define XMComparisonAllFalse(CR) (((CR) & XM_CRMASK_CR6FALSE) == XM_CRMASK_CR6FALSE) |
||
| 161 | #define XMComparisonAnyFalse(CR) (((CR) & XM_CRMASK_CR6TRUE) != XM_CRMASK_CR6TRUE) |
||
| 162 | #define XMComparisonMixed(CR) (((CR) & XM_CRMASK_CR6) == 0) |
||
| 163 | #define XMComparisonAllInBounds(CR) (((CR) & XM_CRMASK_CR6BOUNDS) == XM_CRMASK_CR6BOUNDS) |
||
| 164 | #define XMComparisonAnyOutOfBounds(CR) (((CR) & XM_CRMASK_CR6BOUNDS) != XM_CRMASK_CR6BOUNDS) |
||
| 165 | |||
| 166 | |||
| 167 | #define XMMin(a, b) (((a) < (b)) ? (a) : (b)) |
||
| 168 | #define XMMax(a, b) (((a) > (b)) ? (a) : (b)) |
||
| 169 | |||
| 170 | /**************************************************************************** |
||
| 171 | * |
||
| 172 | * Data types |
||
| 173 | * |
||
| 174 | ****************************************************************************/ |
||
| 175 | |||
| 176 | #pragma warning(push) |
||
| 177 | #pragma warning(disable:4201) |
||
| 178 | |||
| 179 | #if !defined (_XM_X86_) && !defined(_XM_X64_) |
||
| 180 | #pragma bitfield_order(push) |
||
| 181 | #pragma bitfield_order(lsb_to_msb) |
||
| 182 | #endif // !_XM_X86_ && !_XM_X64_ |
||
| 183 | |||
| 184 | #if defined(_XM_NO_INTRINSICS_) && !defined(_XBOX_VER) |
||
| 185 | // The __vector4 structure is an intrinsic on Xbox but must be separately defined |
||
| 186 | // for x86/x64 |
||
| 187 | typedef struct __vector4 |
||
| 188 | { |
||
| 189 | union |
||
| 190 | { |
||
| 191 | float vector4_f32[4]; |
||
| 192 | unsigned int vector4_u32[4]; |
||
| 193 | #ifndef XM_STRICT_VECTOR4 |
||
| 194 | struct |
||
| 195 | { |
||
| 196 | FLOAT x; |
||
| 197 | FLOAT y; |
||
| 198 | FLOAT z; |
||
| 199 | FLOAT w; |
||
| 200 | }; |
||
| 201 | FLOAT v[4]; |
||
| 202 | UINT u[4]; |
||
| 203 | #endif // !XM_STRICT_VECTOR4 |
||
| 204 | }; |
||
| 205 | } __vector4; |
||
| 206 | #endif // _XM_NO_INTRINSICS_ |
||
| 207 | |||
| 208 | #if (defined (_XM_X86_) || defined(_XM_X64_)) && defined(_XM_NO_INTRINSICS_) |
||
| 209 | typedef UINT __vector4i[4]; |
||
| 210 | #else |
||
| 211 | typedef __declspec(align(16)) UINT __vector4i[4]; |
||
| 212 | #endif |
||
| 213 | |||
| 214 | // Vector intrinsic: Four 32 bit floating point components aligned on a 16 byte |
||
| 215 | // boundary and mapped to hardware vector registers |
||
| 216 | #if defined(_XM_SSE_INTRINSICS_) && !defined(_XM_NO_INTRINSICS_) |
||
| 217 | typedef __m128 XMVECTOR; |
||
| 218 | #else |
||
| 219 | typedef __vector4 XMVECTOR; |
||
| 220 | #endif |
||
| 221 | |||
| 222 | // Conversion types for constants |
||
| 223 | typedef _DECLSPEC_ALIGN_16_ struct XMVECTORF32 { |
||
| 224 | union { |
||
| 225 | float f[4]; |
||
| 226 | XMVECTOR v; |
||
| 227 | }; |
||
| 228 | |||
| 229 | #if defined(__cplusplus) |
||
| 230 | inline operator XMVECTOR() const { return v; } |
||
| 231 | #if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) |
||
| 232 | inline operator __m128i() const { return reinterpret_cast<const __m128i *>(&v)[0]; } |
||
| 233 | inline operator __m128d() const { return reinterpret_cast<const __m128d *>(&v)[0]; } |
||
| 234 | #endif |
||
| 235 | #endif // __cplusplus |
||
| 236 | } XMVECTORF32; |
||
| 237 | |||
| 238 | typedef _DECLSPEC_ALIGN_16_ struct XMVECTORI32 { |
||
| 239 | union { |
||
| 240 | INT i[4]; |
||
| 241 | XMVECTOR v; |
||
| 242 | }; |
||
| 243 | #if defined(__cplusplus) |
||
| 244 | inline operator XMVECTOR() const { return v; } |
||
| 245 | #if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) |
||
| 246 | inline operator __m128i() const { return reinterpret_cast<const __m128i *>(&v)[0]; } |
||
| 247 | inline operator __m128d() const { return reinterpret_cast<const __m128d *>(&v)[0]; } |
||
| 248 | #endif |
||
| 249 | #endif // __cplusplus |
||
| 250 | } XMVECTORI32; |
||
| 251 | |||
| 252 | typedef _DECLSPEC_ALIGN_16_ struct XMVECTORU8 { |
||
| 253 | union { |
||
| 254 | BYTE u[16]; |
||
| 255 | XMVECTOR v; |
||
| 256 | }; |
||
| 257 | #if defined(__cplusplus) |
||
| 258 | inline operator XMVECTOR() const { return v; } |
||
| 259 | #if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) |
||
| 260 | inline operator __m128i() const { return reinterpret_cast<const __m128i *>(&v)[0]; } |
||
| 261 | inline operator __m128d() const { return reinterpret_cast<const __m128d *>(&v)[0]; } |
||
| 262 | #endif |
||
| 263 | #endif // __cplusplus |
||
| 264 | } XMVECTORU8; |
||
| 265 | |||
| 266 | typedef _DECLSPEC_ALIGN_16_ struct XMVECTORU32 { |
||
| 267 | union { |
||
| 268 | UINT u[4]; |
||
| 269 | XMVECTOR v; |
||
| 270 | }; |
||
| 271 | #if defined(__cplusplus) |
||
| 272 | inline operator XMVECTOR() const { return v; } |
||
| 273 | #if !defined(_XM_NO_INTRINSICS_) && defined(_XM_SSE_INTRINSICS_) |
||
| 274 | inline operator __m128i() const { return reinterpret_cast<const __m128i *>(&v)[0]; } |
||
| 275 | inline operator __m128d() const { return reinterpret_cast<const __m128d *>(&v)[0]; } |
||
| 276 | #endif |
||
| 277 | #endif // __cplusplus |
||
| 278 | } XMVECTORU32; |
||
| 279 | |||
| 280 | // Fix-up for (1st-3rd) XMVECTOR parameters that are pass-in-register for x86 and Xbox 360, but not for other targets |
||
| 281 | #if defined(_XM_VMX128_INTRINSICS_) && !defined(_XM_NO_INTRINISCS_) |
||
| 282 | typedef const XMVECTOR FXMVECTOR; |
||
| 283 | #elif defined(_XM_X86_) && !defined(_XM_NO_INTRINISCS_) |
||
| 284 | typedef const XMVECTOR FXMVECTOR; |
||
| 285 | #elif defined(__cplusplus) |
||
| 286 | typedef const XMVECTOR& FXMVECTOR; |
||
| 287 | #else |
||
| 288 | typedef const XMVECTOR FXMVECTOR; |
||
| 289 | #endif |
||
| 290 | |||
| 291 | // Fix-up for (4th+) XMVECTOR parameters to pass in-register for Xbox 360 and by reference otherwise |
||
| 292 | #if defined(_XM_VMX128_INTRINSICS_) && !defined(_XM_NO_INTRINISCS_) |
||
| 293 | typedef const XMVECTOR CXMVECTOR; |
||
| 294 | #elif defined(__cplusplus) |
||
| 295 | typedef const XMVECTOR& CXMVECTOR; |
||
| 296 | #else |
||
| 297 | typedef const XMVECTOR CXMVECTOR; |
||
| 298 | #endif |
||
| 299 | |||
| 300 | // Vector operators |
||
| 301 | #if defined(__cplusplus) && !defined(XM_NO_OPERATOR_OVERLOADS) |
||
| 302 | |||
| 303 | XMVECTOR operator+ (FXMVECTOR V); |
||
| 304 | XMVECTOR operator- (FXMVECTOR V); |
||
| 305 | |||
| 306 | XMVECTOR& operator+= (XMVECTOR& V1, FXMVECTOR V2); |
||
| 307 | XMVECTOR& operator-= (XMVECTOR& V1, FXMVECTOR V2); |
||
| 308 | XMVECTOR& operator*= (XMVECTOR& V1, FXMVECTOR V2); |
||
| 309 | XMVECTOR& operator/= (XMVECTOR& V1, FXMVECTOR V2); |
||
| 310 | XMVECTOR& operator*= (XMVECTOR& V, FLOAT S); |
||
| 311 | XMVECTOR& operator/= (XMVECTOR& V, FLOAT S); |
||
| 312 | |||
| 313 | XMVECTOR operator+ (FXMVECTOR V1, FXMVECTOR V2); |
||
| 314 | XMVECTOR operator- (FXMVECTOR V1, FXMVECTOR V2); |
||
| 315 | XMVECTOR operator* (FXMVECTOR V1, FXMVECTOR V2); |
||
| 316 | XMVECTOR operator/ (FXMVECTOR V1, FXMVECTOR V2); |
||
| 317 | XMVECTOR operator* (FXMVECTOR V, FLOAT S); |
||
| 318 | XMVECTOR operator* (FLOAT S, FXMVECTOR V); |
||
| 319 | XMVECTOR operator/ (FXMVECTOR V, FLOAT S); |
||
| 320 | |||
| 321 | #endif // __cplusplus && !XM_NO_OPERATOR_OVERLOADS |
||
| 322 | |||
| 323 | // Matrix type: Sixteen 32 bit floating point components aligned on a |
||
| 324 | // 16 byte boundary and mapped to four hardware vector registers |
||
| 325 | #if (defined(_XM_X86_) || defined(_XM_X64_)) && defined(_XM_NO_INTRINSICS_) |
||
| 326 | typedef struct _XMMATRIX |
||
| 327 | #else |
||
| 328 | typedef _DECLSPEC_ALIGN_16_ struct _XMMATRIX |
||
| 329 | #endif |
||
| 330 | { |
||
| 331 | union |
||
| 332 | { |
||
| 333 | XMVECTOR r[4]; |
||
| 334 | struct |
||
| 335 | { |
||
| 336 | FLOAT _11, _12, _13, _14; |
||
| 337 | FLOAT _21, _22, _23, _24; |
||
| 338 | FLOAT _31, _32, _33, _34; |
||
| 339 | FLOAT _41, _42, _43, _44; |
||
| 340 | }; |
||
| 341 | FLOAT m[4][4]; |
||
| 342 | }; |
||
| 343 | |||
| 344 | #ifdef __cplusplus |
||
| 345 | |||
| 346 | _XMMATRIX() {}; |
||
| 347 | _XMMATRIX(FXMVECTOR R0, FXMVECTOR R1, FXMVECTOR R2, CXMVECTOR R3); |
||
| 348 | _XMMATRIX(FLOAT m00, FLOAT m01, FLOAT m02, FLOAT m03, |
||
| 349 | FLOAT m10, FLOAT m11, FLOAT m12, FLOAT m13, |
||
| 350 | FLOAT m20, FLOAT m21, FLOAT m22, FLOAT m23, |
||
| 351 | FLOAT m30, FLOAT m31, FLOAT m32, FLOAT m33); |
||
| 352 | _XMMATRIX(CONST FLOAT *pArray); |
||
| 353 | |||
| 354 | FLOAT operator() (UINT Row, UINT Column) CONST { return m[Row][Column]; } |
||
| 355 | FLOAT& operator() (UINT Row, UINT Column) { return m[Row][Column]; } |
||
| 356 | |||
| 357 | _XMMATRIX& operator= (CONST _XMMATRIX&); |
||
| 358 | |||
| 359 | #ifndef XM_NO_OPERATOR_OVERLOADS |
||
| 360 | _XMMATRIX& operator*= (CONST _XMMATRIX&); |
||
| 361 | _XMMATRIX operator* (CONST _XMMATRIX&) CONST; |
||
| 362 | #endif // !XM_NO_OPERATOR_OVERLOADS |
||
| 363 | |||
| 364 | #endif // __cplusplus |
||
| 365 | |||
| 366 | } XMMATRIX; |
||
| 367 | |||
| 368 | // Fix-up for XMMATRIX parameters to pass in-register on Xbox 360, by reference otherwise |
||
| 369 | #if defined(_XM_VMX128_INTRINSICS_) |
||
| 370 | typedef const XMMATRIX CXMMATRIX; |
||
| 371 | #elif defined(__cplusplus) |
||
| 372 | typedef const XMMATRIX& CXMMATRIX; |
||
| 373 | #else |
||
| 374 | typedef const XMMATRIX CXMMATRIX; |
||
| 375 | #endif |
||
| 376 | |||
| 377 | // 16 bit floating point number consisting of a sign bit, a 5 bit biased |
||
| 378 | // exponent, and a 10 bit mantissa |
||
| 379 | //typedef WORD HALF; |
||
| 380 | typedef USHORT HALF; |
||
| 381 | |||
| 382 | // 2D Vector; 32 bit floating point components |
||
| 383 | typedef struct _XMFLOAT2 |
||
| 384 | { |
||
| 385 | FLOAT x; |
||
| 386 | FLOAT y; |
||
| 387 | |||
| 388 | #ifdef __cplusplus |
||
| 389 | |||
| 390 | _XMFLOAT2() {}; |
||
| 391 | _XMFLOAT2(FLOAT _x, FLOAT _y) : x(_x), y(_y) {}; |
||
| 392 | _XMFLOAT2(CONST FLOAT *pArray); |
||
| 393 | |||
| 394 | _XMFLOAT2& operator= (CONST _XMFLOAT2& Float2); |
||
| 395 | |||
| 396 | #endif // __cplusplus |
||
| 397 | |||
| 398 | } XMFLOAT2; |
||
| 399 | |||
| 400 | // 2D Vector; 32 bit floating point components aligned on a 16 byte boundary |
||
| 401 | typedef __declspec(align(16)) XMFLOAT2 XMFLOAT2A; |
||
| 402 | |||
| 403 | // 2D Vector; 16 bit floating point components |
||
| 404 | typedef struct _XMHALF2 |
||
| 405 | { |
||
| 406 | HALF x; |
||
| 407 | HALF y; |
||
| 408 | |||
| 409 | #ifdef __cplusplus |
||
| 410 | |||
| 411 | _XMHALF2() {}; |
||
| 412 | _XMHALF2(HALF _x, HALF _y) : x(_x), y(_y) {}; |
||
| 413 | _XMHALF2(CONST HALF *pArray); |
||
| 414 | _XMHALF2(FLOAT _x, FLOAT _y); |
||
| 415 | _XMHALF2(CONST FLOAT *pArray); |
||
| 416 | |||
| 417 | _XMHALF2& operator= (CONST _XMHALF2& Half2); |
||
| 418 | |||
| 419 | #endif // __cplusplus |
||
| 420 | |||
| 421 | } XMHALF2; |
||
| 422 | |||
| 423 | // 2D Vector; 16 bit signed normalized integer components |
||
| 424 | typedef struct _XMSHORTN2 |
||
| 425 | { |
||
| 426 | SHORT x; |
||
| 427 | SHORT y; |
||
| 428 | |||
| 429 | #ifdef __cplusplus |
||
| 430 | |||
| 431 | _XMSHORTN2() {}; |
||
| 432 | _XMSHORTN2(SHORT _x, SHORT _y) : x(_x), y(_y) {}; |
||
| 433 | _XMSHORTN2(CONST SHORT *pArray); |
||
| 434 | _XMSHORTN2(FLOAT _x, FLOAT _y); |
||
| 435 | _XMSHORTN2(CONST FLOAT *pArray); |
||
| 436 | |||
| 437 | _XMSHORTN2& operator= (CONST _XMSHORTN2& ShortN2); |
||
| 438 | |||
| 439 | #endif // __cplusplus |
||
| 440 | |||
| 441 | } XMSHORTN2; |
||
| 442 | |||
| 443 | // 2D Vector; 16 bit signed integer components |
||
| 444 | typedef struct _XMSHORT2 |
||
| 445 | { |
||
| 446 | SHORT x; |
||
| 447 | SHORT y; |
||
| 448 | |||
| 449 | #ifdef __cplusplus |
||
| 450 | |||
| 451 | _XMSHORT2() {}; |
||
| 452 | _XMSHORT2(SHORT _x, SHORT _y) : x(_x), y(_y) {}; |
||
| 453 | _XMSHORT2(CONST SHORT *pArray); |
||
| 454 | _XMSHORT2(FLOAT _x, FLOAT _y); |
||
| 455 | _XMSHORT2(CONST FLOAT *pArray); |
||
| 456 | |||
| 457 | _XMSHORT2& operator= (CONST _XMSHORT2& Short2); |
||
| 458 | |||
| 459 | #endif // __cplusplus |
||
| 460 | |||
| 461 | } XMSHORT2; |
||
| 462 | |||
| 463 | // 2D Vector; 16 bit unsigned normalized integer components |
||
| 464 | typedef struct _XMUSHORTN2 |
||
| 465 | { |
||
| 466 | USHORT x; |
||
| 467 | USHORT y; |
||
| 468 | |||
| 469 | #ifdef __cplusplus |
||
| 470 | |||
| 471 | _XMUSHORTN2() {}; |
||
| 472 | _XMUSHORTN2(USHORT _x, USHORT _y) : x(_x), y(_y) {}; |
||
| 473 | _XMUSHORTN2(CONST USHORT *pArray); |
||
| 474 | _XMUSHORTN2(FLOAT _x, FLOAT _y); |
||
| 475 | _XMUSHORTN2(CONST FLOAT *pArray); |
||
| 476 | |||
| 477 | _XMUSHORTN2& operator= (CONST _XMUSHORTN2& UShortN2); |
||
| 478 | |||
| 479 | #endif // __cplusplus |
||
| 480 | |||
| 481 | } XMUSHORTN2; |
||
| 482 | |||
| 483 | // 2D Vector; 16 bit unsigned integer components |
||
| 484 | typedef struct _XMUSHORT2 |
||
| 485 | { |
||
| 486 | USHORT x; |
||
| 487 | USHORT y; |
||
| 488 | |||
| 489 | #ifdef __cplusplus |
||
| 490 | |||
| 491 | _XMUSHORT2() {}; |
||
| 492 | _XMUSHORT2(USHORT _x, USHORT _y) : x(_x), y(_y) {}; |
||
| 493 | _XMUSHORT2(CONST USHORT *pArray); |
||
| 494 | _XMUSHORT2(FLOAT _x, FLOAT _y); |
||
| 495 | _XMUSHORT2(CONST FLOAT *pArray); |
||
| 496 | |||
| 497 | _XMUSHORT2& operator= (CONST _XMUSHORT2& UShort2); |
||
| 498 | |||
| 499 | #endif // __cplusplus |
||
| 500 | |||
| 501 | } XMUSHORT2; |
||
| 502 | |||
| 503 | // 3D Vector; 32 bit floating point components |
||
| 504 | typedef struct _XMFLOAT3 |
||
| 505 | { |
||
| 506 | FLOAT x; |
||
| 507 | FLOAT y; |
||
| 508 | FLOAT z; |
||
| 509 | |||
| 510 | #ifdef __cplusplus |
||
| 511 | |||
| 512 | _XMFLOAT3() {}; |
||
| 513 | _XMFLOAT3(FLOAT _x, FLOAT _y, FLOAT _z) : x(_x), y(_y), z(_z) {}; |
||
| 514 | _XMFLOAT3(CONST FLOAT *pArray); |
||
| 515 | |||
| 516 | _XMFLOAT3& operator= (CONST _XMFLOAT3& Float3); |
||
| 517 | |||
| 518 | #endif // __cplusplus |
||
| 519 | |||
| 520 | } XMFLOAT3; |
||
| 521 | |||
| 522 | // 3D Vector; 32 bit floating point components aligned on a 16 byte boundary |
||
| 523 | typedef __declspec(align(16)) XMFLOAT3 XMFLOAT3A; |
||
| 524 | |||
| 525 | // 3D Vector; 11-11-10 bit normalized components packed into a 32 bit integer |
||
| 526 | // The normalized 3D Vector is packed into 32 bits as follows: a 10 bit signed, |
||
| 527 | // normalized integer for the z component and 11 bit signed, normalized |
||
| 528 | // integers for the x and y components. The z component is stored in the |
||
| 529 | // most significant bits and the x component in the least significant bits |
||
| 530 | // (Z10Y11X11): [32] zzzzzzzz zzyyyyyy yyyyyxxx xxxxxxxx [0] |
||
| 531 | typedef struct _XMHENDN3 |
||
| 532 | { |
||
| 533 | union |
||
| 534 | { |
||
| 535 | struct |
||
| 536 | { |
||
| 537 | INT x : 11; // -1023/1023 to 1023/1023 |
||
| 538 | INT y : 11; // -1023/1023 to 1023/1023 |
||
| 539 | INT z : 10; // -511/511 to 511/511 |
||
| 540 | }; |
||
| 541 | UINT v; |
||
| 542 | }; |
||
| 543 | |||
| 544 | #ifdef __cplusplus |
||
| 545 | |||
| 546 | _XMHENDN3() {}; |
||
| 547 | _XMHENDN3(UINT Packed) : v(Packed) {}; |
||
| 548 | _XMHENDN3(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 549 | _XMHENDN3(CONST FLOAT *pArray); |
||
| 550 | |||
| 551 | operator UINT () { return v; } |
||
| 552 | |||
| 553 | _XMHENDN3& operator= (CONST _XMHENDN3& HenDN3); |
||
| 554 | _XMHENDN3& operator= (CONST UINT Packed); |
||
| 555 | |||
| 556 | #endif // __cplusplus |
||
| 557 | |||
| 558 | } XMHENDN3; |
||
| 559 | |||
| 560 | // 3D Vector; 11-11-10 bit components packed into a 32 bit integer |
||
| 561 | // The 3D Vector is packed into 32 bits as follows: a 10 bit signed, |
||
| 562 | // integer for the z component and 11 bit signed integers for the |
||
| 563 | // x and y components. The z component is stored in the |
||
| 564 | // most significant bits and the x component in the least significant bits |
||
| 565 | // (Z10Y11X11): [32] zzzzzzzz zzyyyyyy yyyyyxxx xxxxxxxx [0] |
||
| 566 | typedef struct _XMHEND3 |
||
| 567 | { |
||
| 568 | union |
||
| 569 | { |
||
| 570 | struct |
||
| 571 | { |
||
| 572 | INT x : 11; // -1023 to 1023 |
||
| 573 | INT y : 11; // -1023 to 1023 |
||
| 574 | INT z : 10; // -511 to 511 |
||
| 575 | }; |
||
| 576 | UINT v; |
||
| 577 | }; |
||
| 578 | |||
| 579 | #ifdef __cplusplus |
||
| 580 | |||
| 581 | _XMHEND3() {}; |
||
| 582 | _XMHEND3(UINT Packed) : v(Packed) {}; |
||
| 583 | _XMHEND3(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 584 | _XMHEND3(CONST FLOAT *pArray); |
||
| 585 | |||
| 586 | operator UINT () { return v; } |
||
| 587 | |||
| 588 | _XMHEND3& operator= (CONST _XMHEND3& HenD3); |
||
| 589 | _XMHEND3& operator= (CONST UINT Packed); |
||
| 590 | |||
| 591 | #endif // __cplusplus |
||
| 592 | |||
| 593 | } XMHEND3; |
||
| 594 | |||
| 595 | // 3D Vector; 11-11-10 bit normalized components packed into a 32 bit integer |
||
| 596 | // The normalized 3D Vector is packed into 32 bits as follows: a 10 bit unsigned, |
||
| 597 | // normalized integer for the z component and 11 bit unsigned, normalized |
||
| 598 | // integers for the x and y components. The z component is stored in the |
||
| 599 | // most significant bits and the x component in the least significant bits |
||
| 600 | // (Z10Y11X11): [32] zzzzzzzz zzyyyyyy yyyyyxxx xxxxxxxx [0] |
||
| 601 | typedef struct _XMUHENDN3 |
||
| 602 | { |
||
| 603 | union |
||
| 604 | { |
||
| 605 | struct |
||
| 606 | { |
||
| 607 | UINT x : 11; // 0/2047 to 2047/2047 |
||
| 608 | UINT y : 11; // 0/2047 to 2047/2047 |
||
| 609 | UINT z : 10; // 0/1023 to 1023/1023 |
||
| 610 | }; |
||
| 611 | UINT v; |
||
| 612 | }; |
||
| 613 | |||
| 614 | #ifdef __cplusplus |
||
| 615 | |||
| 616 | _XMUHENDN3() {}; |
||
| 617 | _XMUHENDN3(UINT Packed) : v(Packed) {}; |
||
| 618 | _XMUHENDN3(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 619 | _XMUHENDN3(CONST FLOAT *pArray); |
||
| 620 | |||
| 621 | operator UINT () { return v; } |
||
| 622 | |||
| 623 | _XMUHENDN3& operator= (CONST _XMUHENDN3& UHenDN3); |
||
| 624 | _XMUHENDN3& operator= (CONST UINT Packed); |
||
| 625 | |||
| 626 | #endif // __cplusplus |
||
| 627 | |||
| 628 | } XMUHENDN3; |
||
| 629 | |||
| 630 | // 3D Vector; 11-11-10 bit components packed into a 32 bit integer |
||
| 631 | // The 3D Vector is packed into 32 bits as follows: a 10 bit unsigned |
||
| 632 | // integer for the z component and 11 bit unsigned integers |
||
| 633 | // for the x and y components. The z component is stored in the |
||
| 634 | // most significant bits and the x component in the least significant bits |
||
| 635 | // (Z10Y11X11): [32] zzzzzzzz zzyyyyyy yyyyyxxx xxxxxxxx [0] |
||
| 636 | typedef struct _XMUHEND3 |
||
| 637 | { |
||
| 638 | union |
||
| 639 | { |
||
| 640 | struct |
||
| 641 | { |
||
| 642 | UINT x : 11; // 0 to 2047 |
||
| 643 | UINT y : 11; // 0 to 2047 |
||
| 644 | UINT z : 10; // 0 to 1023 |
||
| 645 | }; |
||
| 646 | UINT v; |
||
| 647 | }; |
||
| 648 | |||
| 649 | #ifdef __cplusplus |
||
| 650 | |||
| 651 | _XMUHEND3() {}; |
||
| 652 | _XMUHEND3(UINT Packed) : v(Packed) {}; |
||
| 653 | _XMUHEND3(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 654 | _XMUHEND3(CONST FLOAT *pArray); |
||
| 655 | |||
| 656 | operator UINT () { return v; } |
||
| 657 | |||
| 658 | _XMUHEND3& operator= (CONST _XMUHEND3& UHenD3); |
||
| 659 | _XMUHEND3& operator= (CONST UINT Packed); |
||
| 660 | |||
| 661 | #endif // __cplusplus |
||
| 662 | |||
| 663 | } XMUHEND3; |
||
| 664 | |||
| 665 | // 3D Vector; 10-11-11 bit normalized components packed into a 32 bit integer |
||
| 666 | // The normalized 3D Vector is packed into 32 bits as follows: a 10 bit signed, |
||
| 667 | // normalized integer for the x component and 11 bit signed, normalized |
||
| 668 | // integers for the y and z components. The z component is stored in the |
||
| 669 | // most significant bits and the x component in the least significant bits |
||
| 670 | // (Z11Y11X10): [32] zzzzzzzz zzzyyyyy yyyyyyxx xxxxxxxx [0] |
||
| 671 | typedef struct _XMDHENN3 |
||
| 672 | { |
||
| 673 | union |
||
| 674 | { |
||
| 675 | struct |
||
| 676 | { |
||
| 677 | INT x : 10; // -511/511 to 511/511 |
||
| 678 | INT y : 11; // -1023/1023 to 1023/1023 |
||
| 679 | INT z : 11; // -1023/1023 to 1023/1023 |
||
| 680 | }; |
||
| 681 | UINT v; |
||
| 682 | }; |
||
| 683 | |||
| 684 | #ifdef __cplusplus |
||
| 685 | |||
| 686 | _XMDHENN3() {}; |
||
| 687 | _XMDHENN3(UINT Packed) : v(Packed) {}; |
||
| 688 | _XMDHENN3(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 689 | _XMDHENN3(CONST FLOAT *pArray); |
||
| 690 | |||
| 691 | operator UINT () { return v; } |
||
| 692 | |||
| 693 | _XMDHENN3& operator= (CONST _XMDHENN3& DHenN3); |
||
| 694 | _XMDHENN3& operator= (CONST UINT Packed); |
||
| 695 | |||
| 696 | #endif // __cplusplus |
||
| 697 | |||
| 698 | } XMDHENN3; |
||
| 699 | |||
| 700 | // 3D Vector; 10-11-11 bit components packed into a 32 bit integer |
||
| 701 | // The 3D Vector is packed into 32 bits as follows: a 10 bit signed, |
||
| 702 | // integer for the x component and 11 bit signed integers for the |
||
| 703 | // y and z components. The w component is stored in the |
||
| 704 | // most significant bits and the x component in the least significant bits |
||
| 705 | // (Z11Y11X10): [32] zzzzzzzz zzzyyyyy yyyyyyxx xxxxxxxx [0] |
||
| 706 | typedef struct _XMDHEN3 |
||
| 707 | { |
||
| 708 | union |
||
| 709 | { |
||
| 710 | struct |
||
| 711 | { |
||
| 712 | INT x : 10; // -511 to 511 |
||
| 713 | INT y : 11; // -1023 to 1023 |
||
| 714 | INT z : 11; // -1023 to 1023 |
||
| 715 | }; |
||
| 716 | UINT v; |
||
| 717 | }; |
||
| 718 | |||
| 719 | #ifdef __cplusplus |
||
| 720 | |||
| 721 | _XMDHEN3() {}; |
||
| 722 | _XMDHEN3(UINT Packed) : v(Packed) {}; |
||
| 723 | _XMDHEN3(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 724 | _XMDHEN3(CONST FLOAT *pArray); |
||
| 725 | |||
| 726 | operator UINT () { return v; } |
||
| 727 | |||
| 728 | _XMDHEN3& operator= (CONST _XMDHEN3& DHen3); |
||
| 729 | _XMDHEN3& operator= (CONST UINT Packed); |
||
| 730 | |||
| 731 | #endif // __cplusplus |
||
| 732 | |||
| 733 | } XMDHEN3; |
||
| 734 | |||
| 735 | // 3D Vector; 10-11-11 bit normalized components packed into a 32 bit integer |
||
| 736 | // The normalized 3D Vector is packed into 32 bits as follows: a 10 bit unsigned, |
||
| 737 | // normalized integer for the x component and 11 bit unsigned, normalized |
||
| 738 | // integers for the y and z components. The w component is stored in the |
||
| 739 | // most significant bits and the x component in the least significant bits |
||
| 740 | // (Z11Y11X10): [32] zzzzzzzz zzzyyyyy yyyyyyxx xxxxxxxx [0] |
||
| 741 | typedef struct _XMUDHENN3 |
||
| 742 | { |
||
| 743 | union |
||
| 744 | { |
||
| 745 | struct |
||
| 746 | { |
||
| 747 | UINT x : 10; // 0/1023 to 1023/1023 |
||
| 748 | UINT y : 11; // 0/2047 to 2047/2047 |
||
| 749 | UINT z : 11; // 0/2047 to 2047/2047 |
||
| 750 | }; |
||
| 751 | UINT v; |
||
| 752 | }; |
||
| 753 | |||
| 754 | #ifdef __cplusplus |
||
| 755 | |||
| 756 | _XMUDHENN3() {}; |
||
| 757 | _XMUDHENN3(UINT Packed) : v(Packed) {}; |
||
| 758 | _XMUDHENN3(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 759 | _XMUDHENN3(CONST FLOAT *pArray); |
||
| 760 | |||
| 761 | operator UINT () { return v; } |
||
| 762 | |||
| 763 | _XMUDHENN3& operator= (CONST _XMUDHENN3& UDHenN3); |
||
| 764 | _XMUDHENN3& operator= (CONST UINT Packed); |
||
| 765 | |||
| 766 | #endif // __cplusplus |
||
| 767 | |||
| 768 | } XMUDHENN3; |
||
| 769 | |||
| 770 | // 3D Vector; 10-11-11 bit components packed into a 32 bit integer |
||
| 771 | // The 3D Vector is packed into 32 bits as follows: a 10 bit unsigned, |
||
| 772 | // integer for the x component and 11 bit unsigned integers |
||
| 773 | // for the y and z components. The w component is stored in the |
||
| 774 | // most significant bits and the x component in the least significant bits |
||
| 775 | // (Z11Y11X10): [32] zzzzzzzz zzzyyyyy yyyyyyxx xxxxxxxx [0] |
||
| 776 | typedef struct _XMUDHEN3 |
||
| 777 | { |
||
| 778 | union |
||
| 779 | { |
||
| 780 | struct |
||
| 781 | { |
||
| 782 | UINT x : 10; // 0 to 1023 |
||
| 783 | UINT y : 11; // 0 to 2047 |
||
| 784 | UINT z : 11; // 0 to 2047 |
||
| 785 | }; |
||
| 786 | UINT v; |
||
| 787 | }; |
||
| 788 | |||
| 789 | #ifdef __cplusplus |
||
| 790 | |||
| 791 | _XMUDHEN3() {}; |
||
| 792 | _XMUDHEN3(UINT Packed) : v(Packed) {}; |
||
| 793 | _XMUDHEN3(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 794 | _XMUDHEN3(CONST FLOAT *pArray); |
||
| 795 | |||
| 796 | operator UINT () { return v; } |
||
| 797 | |||
| 798 | _XMUDHEN3& operator= (CONST _XMUDHEN3& UDHen3); |
||
| 799 | _XMUDHEN3& operator= (CONST UINT Packed); |
||
| 800 | |||
| 801 | #endif // __cplusplus |
||
| 802 | |||
| 803 | } XMUDHEN3; |
||
| 804 | |||
| 805 | // 3D vector: 5/6/5 unsigned integer components |
||
| 806 | typedef struct _XMU565 |
||
| 807 | { |
||
| 808 | union |
||
| 809 | { |
||
| 810 | struct |
||
| 811 | { |
||
| 812 | USHORT x : 5; |
||
| 813 | USHORT y : 6; |
||
| 814 | USHORT z : 5; |
||
| 815 | }; |
||
| 816 | USHORT v; |
||
| 817 | }; |
||
| 818 | |||
| 819 | #ifdef __cplusplus |
||
| 820 | |||
| 821 | _XMU565() {}; |
||
| 822 | _XMU565(USHORT Packed) : v(Packed) {}; |
||
| 823 | _XMU565(CHAR _x, CHAR _y, CHAR _z) : x(_x), y(_y), z(_z) {}; |
||
| 824 | _XMU565(CONST CHAR *pArray); |
||
| 825 | _XMU565(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 826 | _XMU565(CONST FLOAT *pArray); |
||
| 827 | |||
| 828 | operator USHORT () { return v; } |
||
| 829 | |||
| 830 | _XMU565& operator= (CONST _XMU565& U565); |
||
| 831 | _XMU565& operator= (CONST USHORT Packed); |
||
| 832 | |||
| 833 | #endif // __cplusplus |
||
| 834 | |||
| 835 | } XMU565; |
||
| 836 | |||
| 837 | // 3D vector: 11/11/10 floating-point components |
||
| 838 | // The 3D vector is packed into 32 bits as follows: a 5-bit biased exponent |
||
| 839 | // and 6-bit mantissa for x component, a 5-bit biased exponent and |
||
| 840 | // 6-bit mantissa for y component, a 5-bit biased exponent and a 5-bit |
||
| 841 | // mantissa for z. The z component is stored in the most significant bits |
||
| 842 | // and the x component in the least significant bits. No sign bits so |
||
| 843 | // all partial-precision numbers are positive. |
||
| 844 | // (Z10Y11X11): [32] ZZZZZzzz zzzYYYYY yyyyyyXX XXXxxxxx [0] |
||
| 845 | typedef struct _XMFLOAT3PK |
||
| 846 | { |
||
| 847 | union |
||
| 848 | { |
||
| 849 | struct |
||
| 850 | { |
||
| 851 | UINT xm : 6; |
||
| 852 | UINT xe : 5; |
||
| 853 | UINT ym : 6; |
||
| 854 | UINT ye : 5; |
||
| 855 | UINT zm : 5; |
||
| 856 | UINT ze : 5; |
||
| 857 | }; |
||
| 858 | UINT v; |
||
| 859 | }; |
||
| 860 | |||
| 861 | #ifdef __cplusplus |
||
| 862 | |||
| 863 | _XMFLOAT3PK() {}; |
||
| 864 | _XMFLOAT3PK(UINT Packed) : v(Packed) {}; |
||
| 865 | _XMFLOAT3PK(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 866 | _XMFLOAT3PK(CONST FLOAT *pArray); |
||
| 867 | |||
| 868 | operator UINT () { return v; } |
||
| 869 | |||
| 870 | _XMFLOAT3PK& operator= (CONST _XMFLOAT3PK& float3pk); |
||
| 871 | _XMFLOAT3PK& operator= (CONST UINT Packed); |
||
| 872 | |||
| 873 | #endif // __cplusplus |
||
| 874 | |||
| 875 | } XMFLOAT3PK; |
||
| 876 | |||
| 877 | // 3D vector: 9/9/9 floating-point components with shared 5-bit exponent |
||
| 878 | // The 3D vector is packed into 32 bits as follows: a 5-bit biased exponent |
||
| 879 | // with 9-bit mantissa for the x, y, and z component. The shared exponent |
||
| 880 | // is stored in the most significant bits and the x component mantissa is in |
||
| 881 | // the least significant bits. No sign bits so all partial-precision numbers |
||
| 882 | // are positive. |
||
| 883 | // (E5Z9Y9X9): [32] EEEEEzzz zzzzzzyy yyyyyyyx xxxxxxxx [0] |
||
| 884 | typedef struct _XMFLOAT3SE |
||
| 885 | { |
||
| 886 | union |
||
| 887 | { |
||
| 888 | struct |
||
| 889 | { |
||
| 890 | UINT xm : 9; |
||
| 891 | UINT ym : 9; |
||
| 892 | UINT zm : 9; |
||
| 893 | UINT e : 5; |
||
| 894 | }; |
||
| 895 | UINT v; |
||
| 896 | }; |
||
| 897 | |||
| 898 | #ifdef __cplusplus |
||
| 899 | |||
| 900 | _XMFLOAT3SE() {}; |
||
| 901 | _XMFLOAT3SE(UINT Packed) : v(Packed) {}; |
||
| 902 | _XMFLOAT3SE(FLOAT _x, FLOAT _y, FLOAT _z); |
||
| 903 | _XMFLOAT3SE(CONST FLOAT *pArray); |
||
| 904 | |||
| 905 | operator UINT () { return v; } |
||
| 906 | |||
| 907 | _XMFLOAT3SE& operator= (CONST _XMFLOAT3SE& float3se); |
||
| 908 | _XMFLOAT3SE& operator= (CONST UINT Packed); |
||
| 909 | |||
| 910 | #endif // __cplusplus |
||
| 911 | |||
| 912 | } XMFLOAT3SE; |
||
| 913 | |||
| 914 | // 4D Vector; 32 bit floating point components |
||
| 915 | typedef struct _XMFLOAT4 |
||
| 916 | { |
||
| 917 | FLOAT x; |
||
| 918 | FLOAT y; |
||
| 919 | FLOAT z; |
||
| 920 | FLOAT w; |
||
| 921 | |||
| 922 | #ifdef __cplusplus |
||
| 923 | |||
| 924 | _XMFLOAT4() {}; |
||
| 925 | _XMFLOAT4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 926 | _XMFLOAT4(CONST FLOAT *pArray); |
||
| 927 | |||
| 928 | _XMFLOAT4& operator= (CONST _XMFLOAT4& Float4); |
||
| 929 | |||
| 930 | #endif // __cplusplus |
||
| 931 | |||
| 932 | } XMFLOAT4; |
||
| 933 | |||
| 934 | // 4D Vector; 32 bit floating point components aligned on a 16 byte boundary |
||
| 935 | typedef __declspec(align(16)) XMFLOAT4 XMFLOAT4A; |
||
| 936 | |||
| 937 | // 4D Vector; 16 bit floating point components |
||
| 938 | typedef struct _XMHALF4 |
||
| 939 | { |
||
| 940 | HALF x; |
||
| 941 | HALF y; |
||
| 942 | HALF z; |
||
| 943 | HALF w; |
||
| 944 | |||
| 945 | #ifdef __cplusplus |
||
| 946 | |||
| 947 | _XMHALF4() {}; |
||
| 948 | _XMHALF4(HALF _x, HALF _y, HALF _z, HALF _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 949 | _XMHALF4(CONST HALF *pArray); |
||
| 950 | _XMHALF4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 951 | _XMHALF4(CONST FLOAT *pArray); |
||
| 952 | |||
| 953 | _XMHALF4& operator= (CONST _XMHALF4& Half4); |
||
| 954 | |||
| 955 | #endif // __cplusplus |
||
| 956 | |||
| 957 | } XMHALF4; |
||
| 958 | |||
| 959 | // 4D Vector; 16 bit signed normalized integer components |
||
| 960 | typedef struct _XMSHORTN4 |
||
| 961 | { |
||
| 962 | SHORT x; |
||
| 963 | SHORT y; |
||
| 964 | SHORT z; |
||
| 965 | SHORT w; |
||
| 966 | |||
| 967 | #ifdef __cplusplus |
||
| 968 | |||
| 969 | _XMSHORTN4() {}; |
||
| 970 | _XMSHORTN4(SHORT _x, SHORT _y, SHORT _z, SHORT _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 971 | _XMSHORTN4(CONST SHORT *pArray); |
||
| 972 | _XMSHORTN4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 973 | _XMSHORTN4(CONST FLOAT *pArray); |
||
| 974 | |||
| 975 | _XMSHORTN4& operator= (CONST _XMSHORTN4& ShortN4); |
||
| 976 | |||
| 977 | #endif // __cplusplus |
||
| 978 | |||
| 979 | } XMSHORTN4; |
||
| 980 | |||
| 981 | // 4D Vector; 16 bit signed integer components |
||
| 982 | typedef struct _XMSHORT4 |
||
| 983 | { |
||
| 984 | SHORT x; |
||
| 985 | SHORT y; |
||
| 986 | SHORT z; |
||
| 987 | SHORT w; |
||
| 988 | |||
| 989 | #ifdef __cplusplus |
||
| 990 | |||
| 991 | _XMSHORT4() {}; |
||
| 992 | _XMSHORT4(SHORT _x, SHORT _y, SHORT _z, SHORT _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 993 | _XMSHORT4(CONST SHORT *pArray); |
||
| 994 | _XMSHORT4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 995 | _XMSHORT4(CONST FLOAT *pArray); |
||
| 996 | |||
| 997 | _XMSHORT4& operator= (CONST _XMSHORT4& Short4); |
||
| 998 | |||
| 999 | #endif // __cplusplus |
||
| 1000 | |||
| 1001 | } XMSHORT4; |
||
| 1002 | |||
| 1003 | // 4D Vector; 16 bit unsigned normalized integer components |
||
| 1004 | typedef struct _XMUSHORTN4 |
||
| 1005 | { |
||
| 1006 | USHORT x; |
||
| 1007 | USHORT y; |
||
| 1008 | USHORT z; |
||
| 1009 | USHORT w; |
||
| 1010 | |||
| 1011 | #ifdef __cplusplus |
||
| 1012 | |||
| 1013 | _XMUSHORTN4() {}; |
||
| 1014 | _XMUSHORTN4(USHORT _x, USHORT _y, USHORT _z, USHORT _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 1015 | _XMUSHORTN4(CONST USHORT *pArray); |
||
| 1016 | _XMUSHORTN4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1017 | _XMUSHORTN4(CONST FLOAT *pArray); |
||
| 1018 | |||
| 1019 | _XMUSHORTN4& operator= (CONST _XMUSHORTN4& UShortN4); |
||
| 1020 | |||
| 1021 | #endif // __cplusplus |
||
| 1022 | |||
| 1023 | } XMUSHORTN4; |
||
| 1024 | |||
| 1025 | // 4D Vector; 16 bit unsigned integer components |
||
| 1026 | typedef struct _XMUSHORT4 |
||
| 1027 | { |
||
| 1028 | USHORT x; |
||
| 1029 | USHORT y; |
||
| 1030 | USHORT z; |
||
| 1031 | USHORT w; |
||
| 1032 | |||
| 1033 | #ifdef __cplusplus |
||
| 1034 | |||
| 1035 | _XMUSHORT4() {}; |
||
| 1036 | _XMUSHORT4(USHORT _x, USHORT _y, USHORT _z, USHORT _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 1037 | _XMUSHORT4(CONST USHORT *pArray); |
||
| 1038 | _XMUSHORT4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1039 | _XMUSHORT4(CONST FLOAT *pArray); |
||
| 1040 | |||
| 1041 | _XMUSHORT4& operator= (CONST _XMUSHORT4& UShort4); |
||
| 1042 | |||
| 1043 | #endif // __cplusplus |
||
| 1044 | |||
| 1045 | } XMUSHORT4; |
||
| 1046 | |||
| 1047 | // 4D Vector; 10-10-10-2 bit normalized components packed into a 32 bit integer |
||
| 1048 | // The normalized 4D Vector is packed into 32 bits as follows: a 2 bit unsigned, |
||
| 1049 | // normalized integer for the w component and 10 bit signed, normalized |
||
| 1050 | // integers for the z, y, and x components. The w component is stored in the |
||
| 1051 | // most significant bits and the x component in the least significant bits |
||
| 1052 | // (W2Z10Y10X10): [32] wwzzzzzz zzzzyyyy yyyyyyxx xxxxxxxx [0] |
||
| 1053 | typedef struct _XMXDECN4 |
||
| 1054 | { |
||
| 1055 | union |
||
| 1056 | { |
||
| 1057 | struct |
||
| 1058 | { |
||
| 1059 | INT x : 10; // -511/511 to 511/511 |
||
| 1060 | INT y : 10; // -511/511 to 511/511 |
||
| 1061 | INT z : 10; // -511/511 to 511/511 |
||
| 1062 | UINT w : 2; // 0/3 to 3/3 |
||
| 1063 | }; |
||
| 1064 | UINT v; |
||
| 1065 | }; |
||
| 1066 | |||
| 1067 | #ifdef __cplusplus |
||
| 1068 | |||
| 1069 | _XMXDECN4() {}; |
||
| 1070 | _XMXDECN4(UINT Packed) : v(Packed) {}; |
||
| 1071 | _XMXDECN4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1072 | _XMXDECN4(CONST FLOAT *pArray); |
||
| 1073 | |||
| 1074 | operator UINT () { return v; } |
||
| 1075 | |||
| 1076 | _XMXDECN4& operator= (CONST _XMXDECN4& XDecN4); |
||
| 1077 | _XMXDECN4& operator= (CONST UINT Packed); |
||
| 1078 | |||
| 1079 | #endif // __cplusplus |
||
| 1080 | |||
| 1081 | } XMXDECN4; |
||
| 1082 | |||
| 1083 | // 4D Vector; 10-10-10-2 bit components packed into a 32 bit integer |
||
| 1084 | // The normalized 4D Vector is packed into 32 bits as follows: a 2 bit unsigned |
||
| 1085 | // integer for the w component and 10 bit signed integers for the |
||
| 1086 | // z, y, and x components. The w component is stored in the |
||
| 1087 | // most significant bits and the x component in the least significant bits |
||
| 1088 | // (W2Z10Y10X10): [32] wwzzzzzz zzzzyyyy yyyyyyxx xxxxxxxx [0] |
||
| 1089 | typedef struct _XMXDEC4 |
||
| 1090 | { |
||
| 1091 | union |
||
| 1092 | { |
||
| 1093 | struct |
||
| 1094 | { |
||
| 1095 | INT x : 10; // -511 to 511 |
||
| 1096 | INT y : 10; // -511 to 511 |
||
| 1097 | INT z : 10; // -511 to 511 |
||
| 1098 | UINT w : 2; // 0 to 3 |
||
| 1099 | }; |
||
| 1100 | UINT v; |
||
| 1101 | }; |
||
| 1102 | |||
| 1103 | #ifdef __cplusplus |
||
| 1104 | |||
| 1105 | _XMXDEC4() {}; |
||
| 1106 | _XMXDEC4(UINT Packed) : v(Packed) {}; |
||
| 1107 | _XMXDEC4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1108 | _XMXDEC4(CONST FLOAT *pArray); |
||
| 1109 | |||
| 1110 | operator UINT () { return v; } |
||
| 1111 | |||
| 1112 | _XMXDEC4& operator= (CONST _XMXDEC4& XDec4); |
||
| 1113 | _XMXDEC4& operator= (CONST UINT Packed); |
||
| 1114 | |||
| 1115 | #endif // __cplusplus |
||
| 1116 | |||
| 1117 | } XMXDEC4; |
||
| 1118 | |||
| 1119 | // 4D Vector; 10-10-10-2 bit normalized components packed into a 32 bit integer |
||
| 1120 | // The normalized 4D Vector is packed into 32 bits as follows: a 2 bit signed, |
||
| 1121 | // normalized integer for the w component and 10 bit signed, normalized |
||
| 1122 | // integers for the z, y, and x components. The w component is stored in the |
||
| 1123 | // most significant bits and the x component in the least significant bits |
||
| 1124 | // (W2Z10Y10X10): [32] wwzzzzzz zzzzyyyy yyyyyyxx xxxxxxxx [0] |
||
| 1125 | typedef struct _XMDECN4 |
||
| 1126 | { |
||
| 1127 | union |
||
| 1128 | { |
||
| 1129 | struct |
||
| 1130 | { |
||
| 1131 | INT x : 10; // -511/511 to 511/511 |
||
| 1132 | INT y : 10; // -511/511 to 511/511 |
||
| 1133 | INT z : 10; // -511/511 to 511/511 |
||
| 1134 | INT w : 2; // -1/1 to 1/1 |
||
| 1135 | }; |
||
| 1136 | UINT v; |
||
| 1137 | }; |
||
| 1138 | |||
| 1139 | #ifdef __cplusplus |
||
| 1140 | |||
| 1141 | _XMDECN4() {}; |
||
| 1142 | _XMDECN4(UINT Packed) : v(Packed) {}; |
||
| 1143 | _XMDECN4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1144 | _XMDECN4(CONST FLOAT *pArray); |
||
| 1145 | |||
| 1146 | operator UINT () { return v; } |
||
| 1147 | |||
| 1148 | _XMDECN4& operator= (CONST _XMDECN4& DecN4); |
||
| 1149 | _XMDECN4& operator= (CONST UINT Packed); |
||
| 1150 | |||
| 1151 | #endif // __cplusplus |
||
| 1152 | |||
| 1153 | } XMDECN4; |
||
| 1154 | |||
| 1155 | // 4D Vector; 10-10-10-2 bit components packed into a 32 bit integer |
||
| 1156 | // The 4D Vector is packed into 32 bits as follows: a 2 bit signed, |
||
| 1157 | // integer for the w component and 10 bit signed integers for the |
||
| 1158 | // z, y, and x components. The w component is stored in the |
||
| 1159 | // most significant bits and the x component in the least significant bits |
||
| 1160 | // (W2Z10Y10X10): [32] wwzzzzzz zzzzyyyy yyyyyyxx xxxxxxxx [0] |
||
| 1161 | typedef struct _XMDEC4 |
||
| 1162 | { |
||
| 1163 | union |
||
| 1164 | { |
||
| 1165 | struct |
||
| 1166 | { |
||
| 1167 | INT x : 10; // -511 to 511 |
||
| 1168 | INT y : 10; // -511 to 511 |
||
| 1169 | INT z : 10; // -511 to 511 |
||
| 1170 | INT w : 2; // -1 to 1 |
||
| 1171 | }; |
||
| 1172 | UINT v; |
||
| 1173 | }; |
||
| 1174 | |||
| 1175 | #ifdef __cplusplus |
||
| 1176 | |||
| 1177 | _XMDEC4() {}; |
||
| 1178 | _XMDEC4(UINT Packed) : v(Packed) {}; |
||
| 1179 | _XMDEC4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1180 | _XMDEC4(CONST FLOAT *pArray); |
||
| 1181 | |||
| 1182 | operator UINT () { return v; } |
||
| 1183 | |||
| 1184 | _XMDEC4& operator= (CONST _XMDEC4& Dec4); |
||
| 1185 | _XMDEC4& operator= (CONST UINT Packed); |
||
| 1186 | |||
| 1187 | #endif // __cplusplus |
||
| 1188 | |||
| 1189 | } XMDEC4; |
||
| 1190 | |||
| 1191 | // 4D Vector; 10-10-10-2 bit normalized components packed into a 32 bit integer |
||
| 1192 | // The normalized 4D Vector is packed into 32 bits as follows: a 2 bit unsigned, |
||
| 1193 | // normalized integer for the w component and 10 bit unsigned, normalized |
||
| 1194 | // integers for the z, y, and x components. The w component is stored in the |
||
| 1195 | // most significant bits and the x component in the least significant bits |
||
| 1196 | // (W2Z10Y10X10): [32] wwzzzzzz zzzzyyyy yyyyyyxx xxxxxxxx [0] |
||
| 1197 | typedef struct _XMUDECN4 |
||
| 1198 | { |
||
| 1199 | union |
||
| 1200 | { |
||
| 1201 | struct |
||
| 1202 | { |
||
| 1203 | UINT x : 10; // 0/1023 to 1023/1023 |
||
| 1204 | UINT y : 10; // 0/1023 to 1023/1023 |
||
| 1205 | UINT z : 10; // 0/1023 to 1023/1023 |
||
| 1206 | UINT w : 2; // 0/3 to 3/3 |
||
| 1207 | }; |
||
| 1208 | UINT v; |
||
| 1209 | }; |
||
| 1210 | |||
| 1211 | #ifdef __cplusplus |
||
| 1212 | |||
| 1213 | _XMUDECN4() {}; |
||
| 1214 | _XMUDECN4(UINT Packed) : v(Packed) {}; |
||
| 1215 | _XMUDECN4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1216 | _XMUDECN4(CONST FLOAT *pArray); |
||
| 1217 | |||
| 1218 | operator UINT () { return v; } |
||
| 1219 | |||
| 1220 | _XMUDECN4& operator= (CONST _XMUDECN4& UDecN4); |
||
| 1221 | _XMUDECN4& operator= (CONST UINT Packed); |
||
| 1222 | |||
| 1223 | #endif // __cplusplus |
||
| 1224 | |||
| 1225 | } XMUDECN4; |
||
| 1226 | |||
| 1227 | // 4D Vector; 10-10-10-2 bit components packed into a 32 bit integer |
||
| 1228 | // The 4D Vector is packed into 32 bits as follows: a 2 bit unsigned, |
||
| 1229 | // integer for the w component and 10 bit unsigned integers |
||
| 1230 | // for the z, y, and x components. The w component is stored in the |
||
| 1231 | // most significant bits and the x component in the least significant bits |
||
| 1232 | // (W2Z10Y10X10): [32] wwzzzzzz zzzzyyyy yyyyyyxx xxxxxxxx [0] |
||
| 1233 | typedef struct _XMUDEC4 |
||
| 1234 | { |
||
| 1235 | union |
||
| 1236 | { |
||
| 1237 | struct |
||
| 1238 | { |
||
| 1239 | UINT x : 10; // 0 to 1023 |
||
| 1240 | UINT y : 10; // 0 to 1023 |
||
| 1241 | UINT z : 10; // 0 to 1023 |
||
| 1242 | UINT w : 2; // 0 to 3 |
||
| 1243 | }; |
||
| 1244 | UINT v; |
||
| 1245 | }; |
||
| 1246 | |||
| 1247 | #ifdef __cplusplus |
||
| 1248 | |||
| 1249 | _XMUDEC4() {}; |
||
| 1250 | _XMUDEC4(UINT Packed) : v(Packed) {}; |
||
| 1251 | _XMUDEC4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1252 | _XMUDEC4(CONST FLOAT *pArray); |
||
| 1253 | |||
| 1254 | operator UINT () { return v; } |
||
| 1255 | |||
| 1256 | _XMUDEC4& operator= (CONST _XMUDEC4& UDec4); |
||
| 1257 | _XMUDEC4& operator= (CONST UINT Packed); |
||
| 1258 | |||
| 1259 | #endif // __cplusplus |
||
| 1260 | |||
| 1261 | } XMUDEC4; |
||
| 1262 | |||
| 1263 | // 4D Vector; 20-20-20-4 bit normalized components packed into a 64 bit integer |
||
| 1264 | // The normalized 4D Vector is packed into 64 bits as follows: a 4 bit unsigned, |
||
| 1265 | // normalized integer for the w component and 20 bit signed, normalized |
||
| 1266 | // integers for the z, y, and x components. The w component is stored in the |
||
| 1267 | // most significant bits and the x component in the least significant bits |
||
| 1268 | // (W4Z20Y20X20): [64] wwwwzzzz zzzzzzzz zzzzzzzz yyyyyyyy yyyyyyyy yyyyxxxx xxxxxxxx xxxxxxxx [0] |
||
| 1269 | typedef struct _XMXICON4 |
||
| 1270 | { |
||
| 1271 | union |
||
| 1272 | { |
||
| 1273 | struct |
||
| 1274 | { |
||
| 1275 | INT64 x : 20; // -524287/524287 to 524287/524287 |
||
| 1276 | INT64 y : 20; // -524287/524287 to 524287/524287 |
||
| 1277 | INT64 z : 20; // -524287/524287 to 524287/524287 |
||
| 1278 | UINT64 w : 4; // 0/15 to 15/15 |
||
| 1279 | }; |
||
| 1280 | UINT64 v; |
||
| 1281 | }; |
||
| 1282 | |||
| 1283 | #ifdef __cplusplus |
||
| 1284 | |||
| 1285 | _XMXICON4() {}; |
||
| 1286 | _XMXICON4(UINT64 Packed) : v(Packed) {}; |
||
| 1287 | _XMXICON4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1288 | _XMXICON4(CONST FLOAT *pArray); |
||
| 1289 | |||
| 1290 | operator UINT64 () { return v; } |
||
| 1291 | |||
| 1292 | _XMXICON4& operator= (CONST _XMXICON4& XIcoN4); |
||
| 1293 | _XMXICON4& operator= (CONST UINT64 Packed); |
||
| 1294 | |||
| 1295 | #endif // __cplusplus |
||
| 1296 | |||
| 1297 | } XMXICON4; |
||
| 1298 | |||
| 1299 | // 4D Vector; 20-20-20-4 bit components packed into a 64 bit integer |
||
| 1300 | // The 4D Vector is packed into 64 bits as follows: a 4 bit unsigned |
||
| 1301 | // integer for the w component and 20 bit signed integers for the |
||
| 1302 | // z, y, and x components. The w component is stored in the |
||
| 1303 | // most significant bits and the x component in the least significant bits |
||
| 1304 | // (W4Z20Y20X20): [64] wwwwzzzz zzzzzzzz zzzzzzzz yyyyyyyy yyyyyyyy yyyyxxxx xxxxxxxx xxxxxxxx [0] |
||
| 1305 | typedef struct _XMXICO4 |
||
| 1306 | { |
||
| 1307 | union |
||
| 1308 | { |
||
| 1309 | struct |
||
| 1310 | { |
||
| 1311 | INT64 x : 20; // -524287 to 524287 |
||
| 1312 | INT64 y : 20; // -524287 to 524287 |
||
| 1313 | INT64 z : 20; // -524287 to 524287 |
||
| 1314 | UINT64 w : 4; // 0 to 15 |
||
| 1315 | }; |
||
| 1316 | UINT64 v; |
||
| 1317 | }; |
||
| 1318 | |||
| 1319 | #ifdef __cplusplus |
||
| 1320 | |||
| 1321 | _XMXICO4() {}; |
||
| 1322 | _XMXICO4(UINT64 Packed) : v(Packed) {}; |
||
| 1323 | _XMXICO4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1324 | _XMXICO4(CONST FLOAT *pArray); |
||
| 1325 | |||
| 1326 | operator UINT64 () { return v; } |
||
| 1327 | |||
| 1328 | _XMXICO4& operator= (CONST _XMXICO4& XIco4); |
||
| 1329 | _XMXICO4& operator= (CONST UINT64 Packed); |
||
| 1330 | |||
| 1331 | #endif // __cplusplus |
||
| 1332 | |||
| 1333 | } XMXICO4; |
||
| 1334 | |||
| 1335 | // 4D Vector; 20-20-20-4 bit normalized components packed into a 64 bit integer |
||
| 1336 | // The normalized 4D Vector is packed into 64 bits as follows: a 4 bit signed, |
||
| 1337 | // normalized integer for the w component and 20 bit signed, normalized |
||
| 1338 | // integers for the z, y, and x components. The w component is stored in the |
||
| 1339 | // most significant bits and the x component in the least significant bits |
||
| 1340 | // (W4Z20Y20X20): [64] wwwwzzzz zzzzzzzz zzzzzzzz yyyyyyyy yyyyyyyy yyyyxxxx xxxxxxxx xxxxxxxx [0] |
||
| 1341 | typedef struct _XMICON4 |
||
| 1342 | { |
||
| 1343 | union |
||
| 1344 | { |
||
| 1345 | struct |
||
| 1346 | { |
||
| 1347 | INT64 x : 20; // -524287/524287 to 524287/524287 |
||
| 1348 | INT64 y : 20; // -524287/524287 to 524287/524287 |
||
| 1349 | INT64 z : 20; // -524287/524287 to 524287/524287 |
||
| 1350 | INT64 w : 4; // -7/7 to 7/7 |
||
| 1351 | }; |
||
| 1352 | UINT64 v; |
||
| 1353 | }; |
||
| 1354 | |||
| 1355 | #ifdef __cplusplus |
||
| 1356 | |||
| 1357 | _XMICON4() {}; |
||
| 1358 | _XMICON4(UINT64 Packed) : v(Packed) {}; |
||
| 1359 | _XMICON4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1360 | _XMICON4(CONST FLOAT *pArray); |
||
| 1361 | |||
| 1362 | operator UINT64 () { return v; } |
||
| 1363 | |||
| 1364 | _XMICON4& operator= (CONST _XMICON4& IcoN4); |
||
| 1365 | _XMICON4& operator= (CONST UINT64 Packed); |
||
| 1366 | |||
| 1367 | #endif // __cplusplus |
||
| 1368 | |||
| 1369 | } XMICON4; |
||
| 1370 | |||
| 1371 | // 4D Vector; 20-20-20-4 bit components packed into a 64 bit integer |
||
| 1372 | // The 4D Vector is packed into 64 bits as follows: a 4 bit signed, |
||
| 1373 | // integer for the w component and 20 bit signed integers for the |
||
| 1374 | // z, y, and x components. The w component is stored in the |
||
| 1375 | // most significant bits and the x component in the least significant bits |
||
| 1376 | // (W4Z20Y20X20): [64] wwwwzzzz zzzzzzzz zzzzzzzz yyyyyyyy yyyyyyyy yyyyxxxx xxxxxxxx xxxxxxxx [0] |
||
| 1377 | typedef struct _XMICO4 |
||
| 1378 | { |
||
| 1379 | union |
||
| 1380 | { |
||
| 1381 | struct |
||
| 1382 | { |
||
| 1383 | INT64 x : 20; // -524287 to 524287 |
||
| 1384 | INT64 y : 20; // -524287 to 524287 |
||
| 1385 | INT64 z : 20; // -524287 to 524287 |
||
| 1386 | INT64 w : 4; // -7 to 7 |
||
| 1387 | }; |
||
| 1388 | UINT64 v; |
||
| 1389 | }; |
||
| 1390 | |||
| 1391 | #ifdef __cplusplus |
||
| 1392 | |||
| 1393 | _XMICO4() {}; |
||
| 1394 | _XMICO4(UINT64 Packed) : v(Packed) {}; |
||
| 1395 | _XMICO4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1396 | _XMICO4(CONST FLOAT *pArray); |
||
| 1397 | |||
| 1398 | operator UINT64 () { return v; } |
||
| 1399 | |||
| 1400 | _XMICO4& operator= (CONST _XMICO4& Ico4); |
||
| 1401 | _XMICO4& operator= (CONST UINT64 Packed); |
||
| 1402 | |||
| 1403 | #endif // __cplusplus |
||
| 1404 | |||
| 1405 | } XMICO4; |
||
| 1406 | |||
| 1407 | // 4D Vector; 20-20-20-4 bit normalized components packed into a 64 bit integer |
||
| 1408 | // The normalized 4D Vector is packed into 64 bits as follows: a 4 bit unsigned, |
||
| 1409 | // normalized integer for the w component and 20 bit unsigned, normalized |
||
| 1410 | // integers for the z, y, and x components. The w component is stored in the |
||
| 1411 | // most significant bits and the x component in the least significant bits |
||
| 1412 | // (W4Z20Y20X20): [64] wwwwzzzz zzzzzzzz zzzzzzzz yyyyyyyy yyyyyyyy yyyyxxxx xxxxxxxx xxxxxxxx [0] |
||
| 1413 | typedef struct _XMUICON4 |
||
| 1414 | { |
||
| 1415 | union |
||
| 1416 | { |
||
| 1417 | struct |
||
| 1418 | { |
||
| 1419 | UINT64 x : 20; // 0/1048575 to 1048575/1048575 |
||
| 1420 | UINT64 y : 20; // 0/1048575 to 1048575/1048575 |
||
| 1421 | UINT64 z : 20; // 0/1048575 to 1048575/1048575 |
||
| 1422 | UINT64 w : 4; // 0/15 to 15/15 |
||
| 1423 | }; |
||
| 1424 | UINT64 v; |
||
| 1425 | }; |
||
| 1426 | |||
| 1427 | #ifdef __cplusplus |
||
| 1428 | |||
| 1429 | _XMUICON4() {}; |
||
| 1430 | _XMUICON4(UINT64 Packed) : v(Packed) {}; |
||
| 1431 | _XMUICON4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1432 | _XMUICON4(CONST FLOAT *pArray); |
||
| 1433 | |||
| 1434 | operator UINT64 () { return v; } |
||
| 1435 | |||
| 1436 | _XMUICON4& operator= (CONST _XMUICON4& UIcoN4); |
||
| 1437 | _XMUICON4& operator= (CONST UINT64 Packed); |
||
| 1438 | |||
| 1439 | #endif // __cplusplus |
||
| 1440 | |||
| 1441 | } XMUICON4; |
||
| 1442 | |||
| 1443 | // 4D Vector; 20-20-20-4 bit components packed into a 64 bit integer |
||
| 1444 | // The 4D Vector is packed into 64 bits as follows: a 4 bit unsigned |
||
| 1445 | // integer for the w component and 20 bit unsigned integers for the |
||
| 1446 | // z, y, and x components. The w component is stored in the |
||
| 1447 | // most significant bits and the x component in the least significant bits |
||
| 1448 | // (W4Z20Y20X20): [64] wwwwzzzz zzzzzzzz zzzzzzzz yyyyyyyy yyyyyyyy yyyyxxxx xxxxxxxx xxxxxxxx [0] |
||
| 1449 | typedef struct _XMUICO4 |
||
| 1450 | { |
||
| 1451 | union |
||
| 1452 | { |
||
| 1453 | struct |
||
| 1454 | { |
||
| 1455 | UINT64 x : 20; // 0 to 1048575 |
||
| 1456 | UINT64 y : 20; // 0 to 1048575 |
||
| 1457 | UINT64 z : 20; // 0 to 1048575 |
||
| 1458 | UINT64 w : 4; // 0 to 15 |
||
| 1459 | }; |
||
| 1460 | UINT64 v; |
||
| 1461 | }; |
||
| 1462 | |||
| 1463 | #ifdef __cplusplus |
||
| 1464 | |||
| 1465 | _XMUICO4() {}; |
||
| 1466 | _XMUICO4(UINT64 Packed) : v(Packed) {}; |
||
| 1467 | _XMUICO4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1468 | _XMUICO4(CONST FLOAT *pArray); |
||
| 1469 | |||
| 1470 | operator UINT64 () { return v; } |
||
| 1471 | |||
| 1472 | _XMUICO4& operator= (CONST _XMUICO4& UIco4); |
||
| 1473 | _XMUICO4& operator= (CONST UINT64 Packed); |
||
| 1474 | |||
| 1475 | #endif // __cplusplus |
||
| 1476 | |||
| 1477 | } XMUICO4; |
||
| 1478 | |||
| 1479 | // ARGB Color; 8-8-8-8 bit unsigned normalized integer components packed into |
||
| 1480 | // a 32 bit integer. The normalized color is packed into 32 bits using 8 bit |
||
| 1481 | // unsigned, normalized integers for the alpha, red, green, and blue components. |
||
| 1482 | // The alpha component is stored in the most significant bits and the blue |
||
| 1483 | // component in the least significant bits (A8R8G8B8): |
||
| 1484 | // [32] aaaaaaaa rrrrrrrr gggggggg bbbbbbbb [0] |
||
| 1485 | typedef struct _XMCOLOR |
||
| 1486 | { |
||
| 1487 | union |
||
| 1488 | { |
||
| 1489 | struct |
||
| 1490 | { |
||
| 1491 | UINT b : 8; // Blue: 0/255 to 255/255 |
||
| 1492 | UINT g : 8; // Green: 0/255 to 255/255 |
||
| 1493 | UINT r : 8; // Red: 0/255 to 255/255 |
||
| 1494 | UINT a : 8; // Alpha: 0/255 to 255/255 |
||
| 1495 | }; |
||
| 1496 | UINT c; |
||
| 1497 | }; |
||
| 1498 | |||
| 1499 | #ifdef __cplusplus |
||
| 1500 | |||
| 1501 | _XMCOLOR() {}; |
||
| 1502 | _XMCOLOR(UINT Color) : c(Color) {}; |
||
| 1503 | _XMCOLOR(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1504 | _XMCOLOR(CONST FLOAT *pArray); |
||
| 1505 | |||
| 1506 | operator UINT () { return c; } |
||
| 1507 | |||
| 1508 | _XMCOLOR& operator= (CONST _XMCOLOR& Color); |
||
| 1509 | _XMCOLOR& operator= (CONST UINT Color); |
||
| 1510 | |||
| 1511 | #endif // __cplusplus |
||
| 1512 | |||
| 1513 | } XMCOLOR; |
||
| 1514 | |||
| 1515 | // 4D Vector; 8 bit signed normalized integer components |
||
| 1516 | typedef struct _XMBYTEN4 |
||
| 1517 | { |
||
| 1518 | union |
||
| 1519 | { |
||
| 1520 | struct |
||
| 1521 | { |
||
| 1522 | CHAR x; |
||
| 1523 | CHAR y; |
||
| 1524 | CHAR z; |
||
| 1525 | CHAR w; |
||
| 1526 | }; |
||
| 1527 | UINT v; |
||
| 1528 | }; |
||
| 1529 | |||
| 1530 | #ifdef __cplusplus |
||
| 1531 | |||
| 1532 | _XMBYTEN4() {}; |
||
| 1533 | _XMBYTEN4(CHAR _x, CHAR _y, CHAR _z, CHAR _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 1534 | _XMBYTEN4(UINT Packed) : v(Packed) {}; |
||
| 1535 | _XMBYTEN4(CONST CHAR *pArray); |
||
| 1536 | _XMBYTEN4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1537 | _XMBYTEN4(CONST FLOAT *pArray); |
||
| 1538 | |||
| 1539 | _XMBYTEN4& operator= (CONST _XMBYTEN4& ByteN4); |
||
| 1540 | |||
| 1541 | #endif // __cplusplus |
||
| 1542 | |||
| 1543 | } XMBYTEN4; |
||
| 1544 | |||
| 1545 | // 4D Vector; 8 bit signed integer components |
||
| 1546 | typedef struct _XMBYTE4 |
||
| 1547 | { |
||
| 1548 | union |
||
| 1549 | { |
||
| 1550 | struct |
||
| 1551 | { |
||
| 1552 | CHAR x; |
||
| 1553 | CHAR y; |
||
| 1554 | CHAR z; |
||
| 1555 | CHAR w; |
||
| 1556 | }; |
||
| 1557 | UINT v; |
||
| 1558 | }; |
||
| 1559 | |||
| 1560 | #ifdef __cplusplus |
||
| 1561 | |||
| 1562 | _XMBYTE4() {}; |
||
| 1563 | _XMBYTE4(CHAR _x, CHAR _y, CHAR _z, CHAR _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 1564 | _XMBYTE4(UINT Packed) : v(Packed) {}; |
||
| 1565 | _XMBYTE4(CONST CHAR *pArray); |
||
| 1566 | _XMBYTE4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1567 | _XMBYTE4(CONST FLOAT *pArray); |
||
| 1568 | |||
| 1569 | _XMBYTE4& operator= (CONST _XMBYTE4& Byte4); |
||
| 1570 | |||
| 1571 | #endif // __cplusplus |
||
| 1572 | |||
| 1573 | } XMBYTE4; |
||
| 1574 | |||
| 1575 | // 4D Vector; 8 bit unsigned normalized integer components |
||
| 1576 | typedef struct _XMUBYTEN4 |
||
| 1577 | { |
||
| 1578 | union |
||
| 1579 | { |
||
| 1580 | struct |
||
| 1581 | { |
||
| 1582 | BYTE x; |
||
| 1583 | BYTE y; |
||
| 1584 | BYTE z; |
||
| 1585 | BYTE w; |
||
| 1586 | }; |
||
| 1587 | UINT v; |
||
| 1588 | }; |
||
| 1589 | |||
| 1590 | #ifdef __cplusplus |
||
| 1591 | |||
| 1592 | _XMUBYTEN4() {}; |
||
| 1593 | _XMUBYTEN4(BYTE _x, BYTE _y, BYTE _z, BYTE _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 1594 | _XMUBYTEN4(UINT Packed) : v(Packed) {}; |
||
| 1595 | _XMUBYTEN4(CONST BYTE *pArray); |
||
| 1596 | _XMUBYTEN4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1597 | _XMUBYTEN4(CONST FLOAT *pArray); |
||
| 1598 | |||
| 1599 | _XMUBYTEN4& operator= (CONST _XMUBYTEN4& UByteN4); |
||
| 1600 | |||
| 1601 | #endif // __cplusplus |
||
| 1602 | |||
| 1603 | } XMUBYTEN4; |
||
| 1604 | |||
| 1605 | // 4D Vector; 8 bit unsigned integer components |
||
| 1606 | typedef struct _XMUBYTE4 |
||
| 1607 | { |
||
| 1608 | union |
||
| 1609 | { |
||
| 1610 | struct |
||
| 1611 | { |
||
| 1612 | BYTE x; |
||
| 1613 | BYTE y; |
||
| 1614 | BYTE z; |
||
| 1615 | BYTE w; |
||
| 1616 | }; |
||
| 1617 | UINT v; |
||
| 1618 | }; |
||
| 1619 | |||
| 1620 | #ifdef __cplusplus |
||
| 1621 | |||
| 1622 | _XMUBYTE4() {}; |
||
| 1623 | _XMUBYTE4(BYTE _x, BYTE _y, BYTE _z, BYTE _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 1624 | _XMUBYTE4(UINT Packed) : v(Packed) {}; |
||
| 1625 | _XMUBYTE4(CONST BYTE *pArray); |
||
| 1626 | _XMUBYTE4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1627 | _XMUBYTE4(CONST FLOAT *pArray); |
||
| 1628 | |||
| 1629 | _XMUBYTE4& operator= (CONST _XMUBYTE4& UByte4); |
||
| 1630 | |||
| 1631 | #endif // __cplusplus |
||
| 1632 | |||
| 1633 | } XMUBYTE4; |
||
| 1634 | |||
| 1635 | // 4D vector; 4 bit unsigned integer components |
||
| 1636 | typedef struct _XMUNIBBLE4 |
||
| 1637 | { |
||
| 1638 | union |
||
| 1639 | { |
||
| 1640 | struct |
||
| 1641 | { |
||
| 1642 | USHORT x : 4; |
||
| 1643 | USHORT y : 4; |
||
| 1644 | USHORT z : 4; |
||
| 1645 | USHORT w : 4; |
||
| 1646 | }; |
||
| 1647 | USHORT v; |
||
| 1648 | }; |
||
| 1649 | |||
| 1650 | #ifdef __cplusplus |
||
| 1651 | |||
| 1652 | _XMUNIBBLE4() {}; |
||
| 1653 | _XMUNIBBLE4(USHORT Packed) : v(Packed) {}; |
||
| 1654 | _XMUNIBBLE4(CHAR _x, CHAR _y, CHAR _z, CHAR _w) : x(_x), y(_y), z(_z), w(_w) {}; |
||
| 1655 | _XMUNIBBLE4(CONST CHAR *pArray); |
||
| 1656 | _XMUNIBBLE4(FLOAT _x, FLOAT _y, FLOAT _z, FLOAT _w); |
||
| 1657 | _XMUNIBBLE4(CONST FLOAT *pArray); |
||
| 1658 | |||
| 1659 | operator USHORT () { return v; } |
||
| 1660 | |||
| 1661 | _XMUNIBBLE4& operator= (CONST _XMUNIBBLE4& UNibble4); |
||
| 1662 | _XMUNIBBLE4& operator= (CONST USHORT Packed); |
||
| 1663 | |||
| 1664 | #endif // __cplusplus |
||
| 1665 | |||
| 1666 | } XMUNIBBLE4; |
||
| 1667 | |||
| 1668 | // 4D vector: 5/5/5/1 unsigned integer components |
||
| 1669 | typedef struct _XMU555 |
||
| 1670 | { |
||
| 1671 | union |
||
| 1672 | { |
||
| 1673 | struct |
||
| 1674 | { |
||
| 1675 | USHORT x : 5; |
||
| 1676 | USHORT y : 5; |
||
| 1677 | USHORT z : 5; |
||
| 1678 | USHORT w : 1; |
||
| 1679 | }; |
||
| 1680 | USHORT v; |
||
| 1681 | }; |
||
| 1682 | |||
| 1683 | #ifdef __cplusplus |
||
| 1684 | |||
| 1685 | _XMU555() {}; |
||
| 1686 | _XMU555(USHORT Packed) : v(Packed) {}; |
||
| 1687 | _XMU555(CHAR _x, CHAR _y, CHAR _z, BOOL _w) : x(_x), y(_y), z(_z), w(_w ? 0x1 : 0) {}; |
||
| 1688 | _XMU555(CONST CHAR *pArray, BOOL _w); |
||
| 1689 | _XMU555(FLOAT _x, FLOAT _y, FLOAT _z, BOOL _w); |
||
| 1690 | _XMU555(CONST FLOAT *pArray, BOOL _w); |
||
| 1691 | |||
| 1692 | operator USHORT () { return v; } |
||
| 1693 | |||
| 1694 | _XMU555& operator= (CONST _XMU555& U555); |
||
| 1695 | _XMU555& operator= (CONST USHORT Packed); |
||
| 1696 | |||
| 1697 | #endif // __cplusplus |
||
| 1698 | |||
| 1699 | } XMU555; |
||
| 1700 | |||
| 1701 | // 3x3 Matrix: 32 bit floating point components |
||
| 1702 | typedef struct _XMFLOAT3X3 |
||
| 1703 | { |
||
| 1704 | union |
||
| 1705 | { |
||
| 1706 | struct |
||
| 1707 | { |
||
| 1708 | FLOAT _11, _12, _13; |
||
| 1709 | FLOAT _21, _22, _23; |
||
| 1710 | FLOAT _31, _32, _33; |
||
| 1711 | }; |
||
| 1712 | FLOAT m[3][3]; |
||
| 1713 | }; |
||
| 1714 | |||
| 1715 | #ifdef __cplusplus |
||
| 1716 | |||
| 1717 | _XMFLOAT3X3() {}; |
||
| 1718 | _XMFLOAT3X3(FLOAT m00, FLOAT m01, FLOAT m02, |
||
| 1719 | FLOAT m10, FLOAT m11, FLOAT m12, |
||
| 1720 | FLOAT m20, FLOAT m21, FLOAT m22); |
||
| 1721 | _XMFLOAT3X3(CONST FLOAT *pArray); |
||
| 1722 | |||
| 1723 | FLOAT operator() (UINT Row, UINT Column) CONST { return m[Row][Column]; } |
||
| 1724 | FLOAT& operator() (UINT Row, UINT Column) { return m[Row][Column]; } |
||
| 1725 | |||
| 1726 | _XMFLOAT3X3& operator= (CONST _XMFLOAT3X3& Float3x3); |
||
| 1727 | |||
| 1728 | #endif // __cplusplus |
||
| 1729 | |||
| 1730 | } XMFLOAT3X3; |
||
| 1731 | |||
| 1732 | // 4x3 Matrix: 32 bit floating point components |
||
| 1733 | typedef struct _XMFLOAT4X3 |
||
| 1734 | { |
||
| 1735 | union |
||
| 1736 | { |
||
| 1737 | struct |
||
| 1738 | { |
||
| 1739 | FLOAT _11, _12, _13; |
||
| 1740 | FLOAT _21, _22, _23; |
||
| 1741 | FLOAT _31, _32, _33; |
||
| 1742 | FLOAT _41, _42, _43; |
||
| 1743 | }; |
||
| 1744 | FLOAT m[4][3]; |
||
| 1745 | }; |
||
| 1746 | |||
| 1747 | #ifdef __cplusplus |
||
| 1748 | |||
| 1749 | _XMFLOAT4X3() {}; |
||
| 1750 | _XMFLOAT4X3(FLOAT m00, FLOAT m01, FLOAT m02, |
||
| 1751 | FLOAT m10, FLOAT m11, FLOAT m12, |
||
| 1752 | FLOAT m20, FLOAT m21, FLOAT m22, |
||
| 1753 | FLOAT m30, FLOAT m31, FLOAT m32); |
||
| 1754 | _XMFLOAT4X3(CONST FLOAT *pArray); |
||
| 1755 | |||
| 1756 | FLOAT operator() (UINT Row, UINT Column) CONST { return m[Row][Column]; } |
||
| 1757 | FLOAT& operator() (UINT Row, UINT Column) { return m[Row][Column]; } |
||
| 1758 | |||
| 1759 | _XMFLOAT4X3& operator= (CONST _XMFLOAT4X3& Float4x3); |
||
| 1760 | |||
| 1761 | #endif // __cplusplus |
||
| 1762 | |||
| 1763 | } XMFLOAT4X3; |
||
| 1764 | |||
| 1765 | // 4x3 Matrix: 32 bit floating point components aligned on a 16 byte boundary |
||
| 1766 | typedef __declspec(align(16)) XMFLOAT4X3 XMFLOAT4X3A; |
||
| 1767 | |||
| 1768 | // 4x4 Matrix: 32 bit floating point components |
||
| 1769 | typedef struct _XMFLOAT4X4 |
||
| 1770 | { |
||
| 1771 | union |
||
| 1772 | { |
||
| 1773 | struct |
||
| 1774 | { |
||
| 1775 | FLOAT _11, _12, _13, _14; |
||
| 1776 | FLOAT _21, _22, _23, _24; |
||
| 1777 | FLOAT _31, _32, _33, _34; |
||
| 1778 | FLOAT _41, _42, _43, _44; |
||
| 1779 | }; |
||
| 1780 | FLOAT m[4][4]; |
||
| 1781 | }; |
||
| 1782 | |||
| 1783 | #ifdef __cplusplus |
||
| 1784 | |||
| 1785 | _XMFLOAT4X4() {}; |
||
| 1786 | _XMFLOAT4X4(FLOAT m00, FLOAT m01, FLOAT m02, FLOAT m03, |
||
| 1787 | FLOAT m10, FLOAT m11, FLOAT m12, FLOAT m13, |
||
| 1788 | FLOAT m20, FLOAT m21, FLOAT m22, FLOAT m23, |
||
| 1789 | FLOAT m30, FLOAT m31, FLOAT m32, FLOAT m33); |
||
| 1790 | _XMFLOAT4X4(CONST FLOAT *pArray); |
||
| 1791 | |||
| 1792 | FLOAT operator() (UINT Row, UINT Column) CONST { return m[Row][Column]; } |
||
| 1793 | FLOAT& operator() (UINT Row, UINT Column) { return m[Row][Column]; } |
||
| 1794 | |||
| 1795 | _XMFLOAT4X4& operator= (CONST _XMFLOAT4X4& Float4x4); |
||
| 1796 | |||
| 1797 | #endif // __cplusplus |
||
| 1798 | |||
| 1799 | } XMFLOAT4X4; |
||
| 1800 | |||
| 1801 | // 4x4 Matrix: 32 bit floating point components aligned on a 16 byte boundary |
||
| 1802 | typedef __declspec(align(16)) XMFLOAT4X4 XMFLOAT4X4A; |
||
| 1803 | |||
| 1804 | #if !defined(_XM_X86_) && !defined(_XM_X64_) |
||
| 1805 | #pragma bitfield_order(pop) |
||
| 1806 | #endif // !_XM_X86_ && !_XM_X64_ |
||
| 1807 | |||
| 1808 | #pragma warning(pop) |
||
| 1809 | |||
| 1810 | /**************************************************************************** |
||
| 1811 | * |
||
| 1812 | * Data conversion operations |
||
| 1813 | * |
||
| 1814 | ****************************************************************************/ |
||
| 1815 | |||
| 1816 | #if !defined(_XM_NO_INTRINSICS_) && defined(_XM_VMX128_INTRINSICS_) |
||
| 1817 | #else |
||
| 1818 | XMVECTOR XMConvertVectorIntToFloat(FXMVECTOR VInt, UINT DivExponent); |
||
| 1819 | XMVECTOR XMConvertVectorFloatToInt(FXMVECTOR VFloat, UINT MulExponent); |
||
| 1820 | XMVECTOR XMConvertVectorUIntToFloat(FXMVECTOR VUInt, UINT DivExponent); |
||
| 1821 | XMVECTOR XMConvertVectorFloatToUInt(FXMVECTOR VFloat, UINT MulExponent); |
||
| 1822 | #endif |
||
| 1823 | |||
| 1824 | FLOAT XMConvertHalfToFloat(HALF Value); |
||
| 1825 | FLOAT* XMConvertHalfToFloatStream(__out_bcount(sizeof(FLOAT)+OutputStride*(HalfCount-1)) FLOAT* pOutputStream, |
||
| 1826 | __in UINT OutputStride, |
||
| 1827 | __in_bcount(sizeof(HALF)+InputStride*(HalfCount-1)) CONST HALF* pInputStream, |
||
| 1828 | __in UINT InputStride, __in UINT HalfCount); |
||
| 1829 | HALF XMConvertFloatToHalf(FLOAT Value); |
||
| 1830 | HALF* XMConvertFloatToHalfStream(__out_bcount(sizeof(HALF)+OutputStride*(FloatCount-1)) HALF* pOutputStream, |
||
| 1831 | __in UINT OutputStride, |
||
| 1832 | __in_bcount(sizeof(FLOAT)+InputStride*(FloatCount-1)) CONST FLOAT* pInputStream, |
||
| 1833 | __in UINT InputStride, __in UINT FloatCount); |
||
| 1834 | |||
| 1835 | #if !defined(_XM_NO_INTRINSICS_) && defined(_XM_VMX128_INTRINSICS_) |
||
| 1836 | #else |
||
| 1837 | XMVECTOR XMVectorSetBinaryConstant(UINT C0, UINT C1, UINT C2, UINT C3); |
||
| 1838 | XMVECTOR XMVectorSplatConstant(INT IntConstant, UINT DivExponent); |
||
| 1839 | XMVECTOR XMVectorSplatConstantInt(INT IntConstant); |
||
| 1840 | #endif |
||
| 1841 | |||
| 1842 | /**************************************************************************** |
||
| 1843 | * |
||
| 1844 | * Load operations |
||
| 1845 | * |
||
| 1846 | ****************************************************************************/ |
||
| 1847 | |||
| 1848 | XMVECTOR XMLoadInt(__in CONST UINT* pSource); |
||
| 1849 | XMVECTOR XMLoadFloat(__in CONST FLOAT* pSource); |
||
| 1850 | |||
| 1851 | XMVECTOR XMLoadInt2(__in_ecount(2) CONST UINT* pSource); |
||
| 1852 | XMVECTOR XMLoadInt2A(__in_ecount(2) CONST UINT* PSource); |
||
| 1853 | XMVECTOR XMLoadFloat2(__in CONST XMFLOAT2* pSource); |
||
| 1854 | XMVECTOR XMLoadFloat2A(__in CONST XMFLOAT2A* pSource); |
||
| 1855 | XMVECTOR XMLoadHalf2(__in CONST XMHALF2* pSource); |
||
| 1856 | XMVECTOR XMLoadShortN2(__in CONST XMSHORTN2* pSource); |
||
| 1857 | XMVECTOR XMLoadShort2(__in CONST XMSHORT2* pSource); |
||
| 1858 | XMVECTOR XMLoadUShortN2(__in CONST XMUSHORTN2* pSource); |
||
| 1859 | XMVECTOR XMLoadUShort2(__in CONST XMUSHORT2* pSource); |
||
| 1860 | |||
| 1861 | XMVECTOR XMLoadInt3(__in_ecount(3) CONST UINT* pSource); |
||
| 1862 | XMVECTOR XMLoadInt3A(__in_ecount(3) CONST UINT* pSource); |
||
| 1863 | XMVECTOR XMLoadFloat3(__in CONST XMFLOAT3* pSource); |
||
| 1864 | XMVECTOR XMLoadFloat3A(__in CONST XMFLOAT3A* pSource); |
||
| 1865 | XMVECTOR XMLoadHenDN3(__in CONST XMHENDN3* pSource); |
||
| 1866 | XMVECTOR XMLoadHenD3(__in CONST XMHEND3* pSource); |
||
| 1867 | XMVECTOR XMLoadUHenDN3(__in CONST XMUHENDN3* pSource); |
||
| 1868 | XMVECTOR XMLoadUHenD3(__in CONST XMUHEND3* pSource); |
||
| 1869 | XMVECTOR XMLoadDHenN3(__in CONST XMDHENN3* pSource); |
||
| 1870 | XMVECTOR XMLoadDHen3(__in CONST XMDHEN3* pSource); |
||
| 1871 | XMVECTOR XMLoadUDHenN3(__in CONST XMUDHENN3* pSource); |
||
| 1872 | XMVECTOR XMLoadUDHen3(__in CONST XMUDHEN3* pSource); |
||
| 1873 | XMVECTOR XMLoadU565(__in CONST XMU565* pSource); |
||
| 1874 | XMVECTOR XMLoadFloat3PK(__in CONST XMFLOAT3PK* pSource); |
||
| 1875 | XMVECTOR XMLoadFloat3SE(__in CONST XMFLOAT3SE* pSource); |
||
| 1876 | |||
| 1877 | XMVECTOR XMLoadInt4(__in_ecount(4) CONST UINT* pSource); |
||
| 1878 | XMVECTOR XMLoadInt4A(__in_ecount(4) CONST UINT* pSource); |
||
| 1879 | XMVECTOR XMLoadFloat4(__in CONST XMFLOAT4* pSource); |
||
| 1880 | XMVECTOR XMLoadFloat4A(__in CONST XMFLOAT4A* pSource); |
||
| 1881 | XMVECTOR XMLoadHalf4(__in CONST XMHALF4* pSource); |
||
| 1882 | XMVECTOR XMLoadShortN4(__in CONST XMSHORTN4* pSource); |
||
| 1883 | XMVECTOR XMLoadShort4(__in CONST XMSHORT4* pSource); |
||
| 1884 | XMVECTOR XMLoadUShortN4(__in CONST XMUSHORTN4* pSource); |
||
| 1885 | XMVECTOR XMLoadUShort4(__in CONST XMUSHORT4* pSource); |
||
| 1886 | XMVECTOR XMLoadXIcoN4(__in CONST XMXICON4* pSource); |
||
| 1887 | XMVECTOR XMLoadXIco4(__in CONST XMXICO4* pSource); |
||
| 1888 | XMVECTOR XMLoadIcoN4(__in CONST XMICON4* pSource); |
||
| 1889 | XMVECTOR XMLoadIco4(__in CONST XMICO4* pSource); |
||
| 1890 | XMVECTOR XMLoadUIcoN4(__in CONST XMUICON4* pSource); |
||
| 1891 | XMVECTOR XMLoadUIco4(__in CONST XMUICO4* pSource); |
||
| 1892 | XMVECTOR XMLoadXDecN4(__in CONST XMXDECN4* pSource); |
||
| 1893 | XMVECTOR XMLoadXDec4(__in CONST XMXDEC4* pSource); |
||
| 1894 | XMVECTOR XMLoadDecN4(__in CONST XMDECN4* pSource); |
||
| 1895 | XMVECTOR XMLoadDec4(__in CONST XMDEC4* pSource); |
||
| 1896 | XMVECTOR XMLoadUDecN4(__in CONST XMUDECN4* pSource); |
||
| 1897 | XMVECTOR XMLoadUDec4(__in CONST XMUDEC4* pSource); |
||
| 1898 | XMVECTOR XMLoadByteN4(__in CONST XMBYTEN4* pSource); |
||
| 1899 | XMVECTOR XMLoadByte4(__in CONST XMBYTE4* pSource); |
||
| 1900 | XMVECTOR XMLoadUByteN4(__in CONST XMUBYTEN4* pSource); |
||
| 1901 | XMVECTOR XMLoadUByte4(__in CONST XMUBYTE4* pSource); |
||
| 1902 | XMVECTOR XMLoadUNibble4(__in CONST XMUNIBBLE4* pSource); |
||
| 1903 | XMVECTOR XMLoadU555(__in CONST XMU555* pSource); |
||
| 1904 | XMVECTOR XMLoadColor(__in CONST XMCOLOR* pSource); |
||
| 1905 | |||
| 1906 | XMMATRIX XMLoadFloat3x3(__in CONST XMFLOAT3X3* pSource); |
||
| 1907 | XMMATRIX XMLoadFloat4x3(__in CONST XMFLOAT4X3* pSource); |
||
| 1908 | XMMATRIX XMLoadFloat4x3A(__in CONST XMFLOAT4X3A* pSource); |
||
| 1909 | XMMATRIX XMLoadFloat4x4(__in CONST XMFLOAT4X4* pSource); |
||
| 1910 | XMMATRIX XMLoadFloat4x4A(__in CONST XMFLOAT4X4A* pSource); |
||
| 1911 | |||
| 1912 | /**************************************************************************** |
||
| 1913 | * |
||
| 1914 | * Store operations |
||
| 1915 | * |
||
| 1916 | ****************************************************************************/ |
||
| 1917 | |||
| 1918 | VOID XMStoreInt(__out UINT* pDestination, FXMVECTOR V); |
||
| 1919 | VOID XMStoreFloat(__out FLOAT* pDestination, FXMVECTOR V); |
||
| 1920 | |||
| 1921 | VOID XMStoreInt2(__out_ecount(2) UINT* pDestination, FXMVECTOR V); |
||
| 1922 | VOID XMStoreInt2A(__out_ecount(2) UINT* pDestination, FXMVECTOR V); |
||
| 1923 | VOID XMStoreFloat2(__out XMFLOAT2* pDestination, FXMVECTOR V); |
||
| 1924 | VOID XMStoreFloat2A(__out XMFLOAT2A* pDestination, FXMVECTOR V); |
||
| 1925 | VOID XMStoreHalf2(__out XMHALF2* pDestination, FXMVECTOR V); |
||
| 1926 | VOID XMStoreShortN2(__out XMSHORTN2* pDestination, FXMVECTOR V); |
||
| 1927 | VOID XMStoreShort2(__out XMSHORT2* pDestination, FXMVECTOR V); |
||
| 1928 | VOID XMStoreUShortN2(__out XMUSHORTN2* pDestination, FXMVECTOR V); |
||
| 1929 | VOID XMStoreUShort2(__out XMUSHORT2* pDestination, FXMVECTOR V); |
||
| 1930 | |||
| 1931 | VOID XMStoreInt3(__out_ecount(3) UINT* pDestination, FXMVECTOR V); |
||
| 1932 | VOID XMStoreInt3A(__out_ecount(3) UINT* pDestination, FXMVECTOR V); |
||
| 1933 | VOID XMStoreFloat3(__out XMFLOAT3* pDestination, FXMVECTOR V); |
||
| 1934 | VOID XMStoreFloat3A(__out XMFLOAT3A* pDestination, FXMVECTOR V); |
||
| 1935 | VOID XMStoreHenDN3(__out XMHENDN3* pDestination, FXMVECTOR V); |
||
| 1936 | VOID XMStoreHenD3(__out XMHEND3* pDestination, FXMVECTOR V); |
||
| 1937 | VOID XMStoreUHenDN3(__out XMUHENDN3* pDestination, FXMVECTOR V); |
||
| 1938 | VOID XMStoreUHenD3(__out XMUHEND3* pDestination, FXMVECTOR V); |
||
| 1939 | VOID XMStoreDHenN3(__out XMDHENN3* pDestination, FXMVECTOR V); |
||
| 1940 | VOID XMStoreDHen3(__out XMDHEN3* pDestination, FXMVECTOR V); |
||
| 1941 | VOID XMStoreUDHenN3(__out XMUDHENN3* pDestination, FXMVECTOR V); |
||
| 1942 | VOID XMStoreUDHen3(__out XMUDHEN3* pDestination, FXMVECTOR V); |
||
| 1943 | VOID XMStoreU565(__out XMU565* pDestination, FXMVECTOR V); |
||
| 1944 | VOID XMStoreFloat3PK(__out XMFLOAT3PK* pDestination, FXMVECTOR V); |
||
| 1945 | VOID XMStoreFloat3SE(__out XMFLOAT3SE* pDestination, FXMVECTOR V); |
||
| 1946 | |||
| 1947 | VOID XMStoreInt4(__out_ecount(4) UINT* pDestination, FXMVECTOR V); |
||
| 1948 | VOID XMStoreInt4A(__out_ecount(4) UINT* pDestination, FXMVECTOR V); |
||
| 1949 | VOID XMStoreInt4NC(__out UINT* pDestination, FXMVECTOR V); |
||
| 1950 | VOID XMStoreFloat4(__out XMFLOAT4* pDestination, FXMVECTOR V); |
||
| 1951 | VOID XMStoreFloat4A(__out XMFLOAT4A* pDestination, FXMVECTOR V); |
||
| 1952 | VOID XMStoreFloat4NC(__out XMFLOAT4* pDestination, FXMVECTOR V); |
||
| 1953 | VOID XMStoreHalf4(__out XMHALF4* pDestination, FXMVECTOR V); |
||
| 1954 | VOID XMStoreShortN4(__out XMSHORTN4* pDestination, FXMVECTOR V); |
||
| 1955 | VOID XMStoreShort4(__out XMSHORT4* pDestination, FXMVECTOR V); |
||
| 1956 | VOID XMStoreUShortN4(__out XMUSHORTN4* pDestination, FXMVECTOR V); |
||
| 1957 | VOID XMStoreUShort4(__out XMUSHORT4* pDestination, FXMVECTOR V); |
||
| 1958 | VOID XMStoreXIcoN4(__out XMXICON4* pDestination, FXMVECTOR V); |
||
| 1959 | VOID XMStoreXIco4(__out XMXICO4* pDestination, FXMVECTOR V); |
||
| 1960 | VOID XMStoreIcoN4(__out XMICON4* pDestination, FXMVECTOR V); |
||
| 1961 | VOID XMStoreIco4(__out XMICO4* pDestination, FXMVECTOR V); |
||
| 1962 | VOID XMStoreUIcoN4(__out XMUICON4* pDestination, FXMVECTOR V); |
||
| 1963 | VOID XMStoreUIco4(__out XMUICO4* pDestination, FXMVECTOR V); |
||
| 1964 | VOID XMStoreXDecN4(__out XMXDECN4* pDestination, FXMVECTOR V); |
||
| 1965 | VOID XMStoreXDec4(__out XMXDEC4* pDestination, FXMVECTOR V); |
||
| 1966 | VOID XMStoreDecN4(__out XMDECN4* pDestination, FXMVECTOR V); |
||
| 1967 | VOID XMStoreDec4(__out XMDEC4* pDestination, FXMVECTOR V); |
||
| 1968 | VOID XMStoreUDecN4(__out XMUDECN4* pDestination, FXMVECTOR V); |
||
| 1969 | VOID XMStoreUDec4(__out XMUDEC4* pDestination, FXMVECTOR V); |
||
| 1970 | VOID XMStoreByteN4(__out XMBYTEN4* pDestination, FXMVECTOR V); |
||
| 1971 | VOID XMStoreByte4(__out XMBYTE4* pDestination, FXMVECTOR V); |
||
| 1972 | VOID XMStoreUByteN4(__out XMUBYTEN4* pDestination, FXMVECTOR V); |
||
| 1973 | VOID XMStoreUByte4(__out XMUBYTE4* pDestination, FXMVECTOR V); |
||
| 1974 | VOID XMStoreUNibble4(__out XMUNIBBLE4* pDestination, FXMVECTOR V); |
||
| 1975 | VOID XMStoreU555(__out XMU555* pDestination, FXMVECTOR V); |
||
| 1976 | VOID XMStoreColor(__out XMCOLOR* pDestination, FXMVECTOR V); |
||
| 1977 | |||
| 1978 | VOID XMStoreFloat3x3(__out XMFLOAT3X3* pDestination, CXMMATRIX M); |
||
| 1979 | VOID XMStoreFloat3x3NC(__out XMFLOAT3X3* pDestination, CXMMATRIX M); |
||
| 1980 | VOID XMStoreFloat4x3(__out XMFLOAT4X3* pDestination, CXMMATRIX M); |
||
| 1981 | VOID XMStoreFloat4x3A(__out XMFLOAT4X3A* pDestination, CXMMATRIX M); |
||
| 1982 | VOID XMStoreFloat4x3NC(__out XMFLOAT4X3* pDestination, CXMMATRIX M); |
||
| 1983 | VOID XMStoreFloat4x4(__out XMFLOAT4X4* pDestination, CXMMATRIX M); |
||
| 1984 | VOID XMStoreFloat4x4A(__out XMFLOAT4X4A* pDestination, CXMMATRIX M); |
||
| 1985 | VOID XMStoreFloat4x4NC(__out XMFLOAT4X4* pDestination, CXMMATRIX M); |
||
| 1986 | |||
| 1987 | /**************************************************************************** |
||
| 1988 | * |
||
| 1989 | * General vector operations |
||
| 1990 | * |
||
| 1991 | ****************************************************************************/ |
||
| 1992 | |||
| 1993 | XMVECTOR XMVectorZero(); |
||
| 1994 | XMVECTOR XMVectorSet(FLOAT x, FLOAT y, FLOAT z, FLOAT w); |
||
| 1995 | XMVECTOR XMVectorSetInt(UINT x, UINT y, UINT z, UINT w); |
||
| 1996 | XMVECTOR XMVectorReplicate(FLOAT Value); |
||
| 1997 | XMVECTOR XMVectorReplicatePtr(__in CONST FLOAT *pValue); |
||
| 1998 | XMVECTOR XMVectorReplicateInt(UINT Value); |
||
| 1999 | XMVECTOR XMVectorReplicateIntPtr(__in CONST UINT *pValue); |
||
| 2000 | XMVECTOR XMVectorTrueInt(); |
||
| 2001 | XMVECTOR XMVectorFalseInt(); |
||
| 2002 | XMVECTOR XMVectorSplatX(FXMVECTOR V); |
||
| 2003 | XMVECTOR XMVectorSplatY(FXMVECTOR V); |
||
| 2004 | XMVECTOR XMVectorSplatZ(FXMVECTOR V); |
||
| 2005 | XMVECTOR XMVectorSplatW(FXMVECTOR V); |
||
| 2006 | XMVECTOR XMVectorSplatOne(); |
||
| 2007 | XMVECTOR XMVectorSplatInfinity(); |
||
| 2008 | XMVECTOR XMVectorSplatQNaN(); |
||
| 2009 | XMVECTOR XMVectorSplatEpsilon(); |
||
| 2010 | XMVECTOR XMVectorSplatSignMask(); |
||
| 2011 | |||
| 2012 | FLOAT XMVectorGetByIndex(FXMVECTOR V,UINT i); |
||
| 2013 | FLOAT XMVectorGetX(FXMVECTOR V); |
||
| 2014 | FLOAT XMVectorGetY(FXMVECTOR V); |
||
| 2015 | FLOAT XMVectorGetZ(FXMVECTOR V); |
||
| 2016 | FLOAT XMVectorGetW(FXMVECTOR V); |
||
| 2017 | |||
| 2018 | VOID XMVectorGetByIndexPtr(__out FLOAT *f, FXMVECTOR V, UINT i); |
||
| 2019 | VOID XMVectorGetXPtr(__out FLOAT *x, FXMVECTOR V); |
||
| 2020 | VOID XMVectorGetYPtr(__out FLOAT *y, FXMVECTOR V); |
||
| 2021 | VOID XMVectorGetZPtr(__out FLOAT *z, FXMVECTOR V); |
||
| 2022 | VOID XMVectorGetWPtr(__out FLOAT *w, FXMVECTOR V); |
||
| 2023 | |||
| 2024 | UINT XMVectorGetIntByIndex(FXMVECTOR V,UINT i); |
||
| 2025 | UINT XMVectorGetIntX(FXMVECTOR V); |
||
| 2026 | UINT XMVectorGetIntY(FXMVECTOR V); |
||
| 2027 | UINT XMVectorGetIntZ(FXMVECTOR V); |
||
| 2028 | UINT XMVectorGetIntW(FXMVECTOR V); |
||
| 2029 | |||
| 2030 | VOID XMVectorGetIntByIndexPtr(__out UINT *x,FXMVECTOR V, UINT i); |
||
| 2031 | VOID XMVectorGetIntXPtr(__out UINT *x, FXMVECTOR V); |
||
| 2032 | VOID XMVectorGetIntYPtr(__out UINT *y, FXMVECTOR V); |
||
| 2033 | VOID XMVectorGetIntZPtr(__out UINT *z, FXMVECTOR V); |
||
| 2034 | VOID XMVectorGetIntWPtr(__out UINT *w, FXMVECTOR V); |
||
| 2035 | |||
| 2036 | XMVECTOR XMVectorSetByIndex(FXMVECTOR V,FLOAT f,UINT i); |
||
| 2037 | XMVECTOR XMVectorSetX(FXMVECTOR V, FLOAT x); |
||
| 2038 | XMVECTOR XMVectorSetY(FXMVECTOR V, FLOAT y); |
||
| 2039 | XMVECTOR XMVectorSetZ(FXMVECTOR V, FLOAT z); |
||
| 2040 | XMVECTOR XMVectorSetW(FXMVECTOR V, FLOAT w); |
||
| 2041 | |||
| 2042 | XMVECTOR XMVectorSetByIndexPtr(FXMVECTOR V, __in CONST FLOAT *f, UINT i); |
||
| 2043 | XMVECTOR XMVectorSetXPtr(FXMVECTOR V, __in CONST FLOAT *x); |
||
| 2044 | XMVECTOR XMVectorSetYPtr(FXMVECTOR V, __in CONST FLOAT *y); |
||
| 2045 | XMVECTOR XMVectorSetZPtr(FXMVECTOR V, __in CONST FLOAT *z); |
||
| 2046 | XMVECTOR XMVectorSetWPtr(FXMVECTOR V, __in CONST FLOAT *w); |
||
| 2047 | |||
| 2048 | XMVECTOR XMVectorSetIntByIndex(FXMVECTOR V, UINT x,UINT i); |
||
| 2049 | XMVECTOR XMVectorSetIntX(FXMVECTOR V, UINT x); |
||
| 2050 | XMVECTOR XMVectorSetIntY(FXMVECTOR V, UINT y); |
||
| 2051 | XMVECTOR XMVectorSetIntZ(FXMVECTOR V, UINT z); |
||
| 2052 | XMVECTOR XMVectorSetIntW(FXMVECTOR V, UINT w); |
||
| 2053 | |||
| 2054 | XMVECTOR XMVectorSetIntByIndexPtr(FXMVECTOR V, __in CONST UINT *x, UINT i); |
||
| 2055 | XMVECTOR XMVectorSetIntXPtr(FXMVECTOR V, __in CONST UINT *x); |
||
| 2056 | XMVECTOR XMVectorSetIntYPtr(FXMVECTOR V, __in CONST UINT *y); |
||
| 2057 | XMVECTOR XMVectorSetIntZPtr(FXMVECTOR V, __in CONST UINT *z); |
||
| 2058 | XMVECTOR XMVectorSetIntWPtr(FXMVECTOR V, __in CONST UINT *w); |
||
| 2059 | |||
| 2060 | XMVECTOR XMVectorPermuteControl(UINT ElementIndex0, UINT ElementIndex1, UINT ElementIndex2, UINT ElementIndex3); |
||
| 2061 | XMVECTOR XMVectorPermute(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR Control); |
||
| 2062 | XMVECTOR XMVectorSelectControl(UINT VectorIndex0, UINT VectorIndex1, UINT VectorIndex2, UINT VectorIndex3); |
||
| 2063 | XMVECTOR XMVectorSelect(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR Control); |
||
| 2064 | XMVECTOR XMVectorMergeXY(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2065 | XMVECTOR XMVectorMergeZW(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2066 | |||
| 2067 | #if !defined(_XM_NO_INTRINSICS_) && defined(_XM_VMX128_INTRINSICS_) |
||
| 2068 | #else |
||
| 2069 | XMVECTOR XMVectorShiftLeft(FXMVECTOR V1, FXMVECTOR V2, UINT Elements); |
||
| 2070 | XMVECTOR XMVectorRotateLeft(FXMVECTOR V, UINT Elements); |
||
| 2071 | XMVECTOR XMVectorRotateRight(FXMVECTOR V, UINT Elements); |
||
| 2072 | XMVECTOR XMVectorSwizzle(FXMVECTOR V, UINT E0, UINT E1, UINT E2, UINT E3); |
||
| 2073 | XMVECTOR XMVectorInsert(FXMVECTOR VD, FXMVECTOR VS, UINT VSLeftRotateElements, |
||
| 2074 | UINT Select0, UINT Select1, UINT Select2, UINT Select3); |
||
| 2075 | #endif |
||
| 2076 | |||
| 2077 | XMVECTOR XMVectorEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2078 | XMVECTOR XMVectorEqualR(__out UINT* pCR, FXMVECTOR V1, FXMVECTOR V2); |
||
| 2079 | XMVECTOR XMVectorEqualInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2080 | XMVECTOR XMVectorEqualIntR(__out UINT* pCR, FXMVECTOR V, FXMVECTOR V2); |
||
| 2081 | XMVECTOR XMVectorNearEqual(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR Epsilon); |
||
| 2082 | XMVECTOR XMVectorNotEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2083 | XMVECTOR XMVectorNotEqualInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2084 | XMVECTOR XMVectorGreater(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2085 | XMVECTOR XMVectorGreaterR(__out UINT* pCR, FXMVECTOR V1, FXMVECTOR V2); |
||
| 2086 | XMVECTOR XMVectorGreaterOrEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2087 | XMVECTOR XMVectorGreaterOrEqualR(__out UINT* pCR, FXMVECTOR V1, FXMVECTOR V2); |
||
| 2088 | XMVECTOR XMVectorLess(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2089 | XMVECTOR XMVectorLessOrEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2090 | XMVECTOR XMVectorInBounds(FXMVECTOR V, FXMVECTOR Bounds); |
||
| 2091 | XMVECTOR XMVectorInBoundsR(__out UINT* pCR, FXMVECTOR V, FXMVECTOR Bounds); |
||
| 2092 | |||
| 2093 | XMVECTOR XMVectorIsNaN(FXMVECTOR V); |
||
| 2094 | XMVECTOR XMVectorIsInfinite(FXMVECTOR V); |
||
| 2095 | |||
| 2096 | XMVECTOR XMVectorMin(FXMVECTOR V1,FXMVECTOR V2); |
||
| 2097 | XMVECTOR XMVectorMax(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2098 | XMVECTOR XMVectorRound(FXMVECTOR V); |
||
| 2099 | XMVECTOR XMVectorTruncate(FXMVECTOR V); |
||
| 2100 | XMVECTOR XMVectorFloor(FXMVECTOR V); |
||
| 2101 | XMVECTOR XMVectorCeiling(FXMVECTOR V); |
||
| 2102 | XMVECTOR XMVectorClamp(FXMVECTOR V, FXMVECTOR Min, FXMVECTOR Max); |
||
| 2103 | XMVECTOR XMVectorSaturate(FXMVECTOR V); |
||
| 2104 | |||
| 2105 | XMVECTOR XMVectorAndInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2106 | XMVECTOR XMVectorAndCInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2107 | XMVECTOR XMVectorOrInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2108 | XMVECTOR XMVectorNorInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2109 | XMVECTOR XMVectorXorInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2110 | |||
| 2111 | XMVECTOR XMVectorNegate(FXMVECTOR V); |
||
| 2112 | XMVECTOR XMVectorAdd(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2113 | XMVECTOR XMVectorAddAngles(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2114 | XMVECTOR XMVectorSubtract(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2115 | XMVECTOR XMVectorSubtractAngles(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2116 | XMVECTOR XMVectorMultiply(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2117 | XMVECTOR XMVectorMultiplyAdd(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR V3); |
||
| 2118 | XMVECTOR XMVectorNegativeMultiplySubtract(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR V3); |
||
| 2119 | XMVECTOR XMVectorScale(FXMVECTOR V, FLOAT ScaleFactor); |
||
| 2120 | XMVECTOR XMVectorReciprocalEst(FXMVECTOR V); |
||
| 2121 | XMVECTOR XMVectorReciprocal(FXMVECTOR V); |
||
| 2122 | XMVECTOR XMVectorSqrtEst(FXMVECTOR V); |
||
| 2123 | XMVECTOR XMVectorSqrt(FXMVECTOR V); |
||
| 2124 | XMVECTOR XMVectorReciprocalSqrtEst(FXMVECTOR V); |
||
| 2125 | XMVECTOR XMVectorReciprocalSqrt(FXMVECTOR V); |
||
| 2126 | XMVECTOR XMVectorExpEst(FXMVECTOR V); |
||
| 2127 | XMVECTOR XMVectorExp(FXMVECTOR V); |
||
| 2128 | XMVECTOR XMVectorLogEst(FXMVECTOR V); |
||
| 2129 | XMVECTOR XMVectorLog(FXMVECTOR V); |
||
| 2130 | XMVECTOR XMVectorPowEst(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2131 | XMVECTOR XMVectorPow(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2132 | XMVECTOR XMVectorAbs(FXMVECTOR V); |
||
| 2133 | XMVECTOR XMVectorMod(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2134 | XMVECTOR XMVectorModAngles(FXMVECTOR Angles); |
||
| 2135 | XMVECTOR XMVectorSin(FXMVECTOR V); |
||
| 2136 | XMVECTOR XMVectorSinEst(FXMVECTOR V); |
||
| 2137 | XMVECTOR XMVectorCos(FXMVECTOR V); |
||
| 2138 | XMVECTOR XMVectorCosEst(FXMVECTOR V); |
||
| 2139 | VOID XMVectorSinCos(__out XMVECTOR* pSin, __out XMVECTOR* pCos, FXMVECTOR V); |
||
| 2140 | VOID XMVectorSinCosEst(__out XMVECTOR* pSin, __out XMVECTOR* pCos, FXMVECTOR V); |
||
| 2141 | XMVECTOR XMVectorTan(FXMVECTOR V); |
||
| 2142 | XMVECTOR XMVectorTanEst(FXMVECTOR V); |
||
| 2143 | XMVECTOR XMVectorSinH(FXMVECTOR V); |
||
| 2144 | XMVECTOR XMVectorSinHEst(FXMVECTOR V); |
||
| 2145 | XMVECTOR XMVectorCosH(FXMVECTOR V); |
||
| 2146 | XMVECTOR XMVectorCosHEst(FXMVECTOR V); |
||
| 2147 | XMVECTOR XMVectorTanH(FXMVECTOR V); |
||
| 2148 | XMVECTOR XMVectorTanHEst(FXMVECTOR V); |
||
| 2149 | XMVECTOR XMVectorASin(FXMVECTOR V); |
||
| 2150 | XMVECTOR XMVectorASinEst(FXMVECTOR V); |
||
| 2151 | XMVECTOR XMVectorACos(FXMVECTOR V); |
||
| 2152 | XMVECTOR XMVectorACosEst(FXMVECTOR V); |
||
| 2153 | XMVECTOR XMVectorATan(FXMVECTOR V); |
||
| 2154 | XMVECTOR XMVectorATanEst(FXMVECTOR V); |
||
| 2155 | XMVECTOR XMVectorATan2(FXMVECTOR Y, FXMVECTOR X); |
||
| 2156 | XMVECTOR XMVectorATan2Est(FXMVECTOR Y, FXMVECTOR X); |
||
| 2157 | XMVECTOR XMVectorLerp(FXMVECTOR V0, FXMVECTOR V1, FLOAT t); |
||
| 2158 | XMVECTOR XMVectorLerpV(FXMVECTOR V0, FXMVECTOR V1, FXMVECTOR T); |
||
| 2159 | XMVECTOR XMVectorHermite(FXMVECTOR Position0, FXMVECTOR Tangent0, FXMVECTOR Position1, CXMVECTOR Tangent1, FLOAT t); |
||
| 2160 | XMVECTOR XMVectorHermiteV(FXMVECTOR Position0, FXMVECTOR Tangent0, FXMVECTOR Position1, CXMVECTOR Tangent1, CXMVECTOR T); |
||
| 2161 | XMVECTOR XMVectorCatmullRom(FXMVECTOR Position0, FXMVECTOR Position1, FXMVECTOR Position2, CXMVECTOR Position3, FLOAT t); |
||
| 2162 | XMVECTOR XMVectorCatmullRomV(FXMVECTOR Position0, FXMVECTOR Position1, FXMVECTOR Position2, CXMVECTOR Position3, CXMVECTOR T); |
||
| 2163 | XMVECTOR XMVectorBaryCentric(FXMVECTOR Position0, FXMVECTOR Position1, FXMVECTOR Position2, FLOAT f, FLOAT g); |
||
| 2164 | XMVECTOR XMVectorBaryCentricV(FXMVECTOR Position0, FXMVECTOR Position1, FXMVECTOR Position2, CXMVECTOR F, CXMVECTOR G); |
||
| 2165 | |||
| 2166 | /**************************************************************************** |
||
| 2167 | * |
||
| 2168 | * 2D vector operations |
||
| 2169 | * |
||
| 2170 | ****************************************************************************/ |
||
| 2171 | |||
| 2172 | |||
| 2173 | BOOL XMVector2Equal(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2174 | UINT XMVector2EqualR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2175 | BOOL XMVector2EqualInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2176 | UINT XMVector2EqualIntR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2177 | BOOL XMVector2NearEqual(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR Epsilon); |
||
| 2178 | BOOL XMVector2NotEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2179 | BOOL XMVector2NotEqualInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2180 | BOOL XMVector2Greater(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2181 | UINT XMVector2GreaterR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2182 | BOOL XMVector2GreaterOrEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2183 | UINT XMVector2GreaterOrEqualR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2184 | BOOL XMVector2Less(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2185 | BOOL XMVector2LessOrEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2186 | BOOL XMVector2InBounds(FXMVECTOR V, FXMVECTOR Bounds); |
||
| 2187 | UINT XMVector2InBoundsR(FXMVECTOR V, FXMVECTOR Bounds); |
||
| 2188 | |||
| 2189 | BOOL XMVector2IsNaN(FXMVECTOR V); |
||
| 2190 | BOOL XMVector2IsInfinite(FXMVECTOR V); |
||
| 2191 | |||
| 2192 | XMVECTOR XMVector2Dot(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2193 | XMVECTOR XMVector2Cross(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2194 | XMVECTOR XMVector2LengthSq(FXMVECTOR V); |
||
| 2195 | XMVECTOR XMVector2ReciprocalLengthEst(FXMVECTOR V); |
||
| 2196 | XMVECTOR XMVector2ReciprocalLength(FXMVECTOR V); |
||
| 2197 | XMVECTOR XMVector2LengthEst(FXMVECTOR V); |
||
| 2198 | XMVECTOR XMVector2Length(FXMVECTOR V); |
||
| 2199 | XMVECTOR XMVector2NormalizeEst(FXMVECTOR V); |
||
| 2200 | XMVECTOR XMVector2Normalize(FXMVECTOR V); |
||
| 2201 | XMVECTOR XMVector2ClampLength(FXMVECTOR V, FLOAT LengthMin, FLOAT LengthMax); |
||
| 2202 | XMVECTOR XMVector2ClampLengthV(FXMVECTOR V, FXMVECTOR LengthMin, FXMVECTOR LengthMax); |
||
| 2203 | XMVECTOR XMVector2Reflect(FXMVECTOR Incident, FXMVECTOR Normal); |
||
| 2204 | XMVECTOR XMVector2Refract(FXMVECTOR Incident, FXMVECTOR Normal, FLOAT RefractionIndex); |
||
| 2205 | XMVECTOR XMVector2RefractV(FXMVECTOR Incident, FXMVECTOR Normal, FXMVECTOR RefractionIndex); |
||
| 2206 | XMVECTOR XMVector2Orthogonal(FXMVECTOR V); |
||
| 2207 | XMVECTOR XMVector2AngleBetweenNormalsEst(FXMVECTOR N1, FXMVECTOR N2); |
||
| 2208 | XMVECTOR XMVector2AngleBetweenNormals(FXMVECTOR N1, FXMVECTOR N2); |
||
| 2209 | XMVECTOR XMVector2AngleBetweenVectors(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2210 | XMVECTOR XMVector2LinePointDistance(FXMVECTOR LinePoint1, FXMVECTOR LinePoint2, FXMVECTOR Point); |
||
| 2211 | XMVECTOR XMVector2IntersectLine(FXMVECTOR Line1Point1, FXMVECTOR Line1Point2, FXMVECTOR Line2Point1, CXMVECTOR Line2Point2); |
||
| 2212 | XMVECTOR XMVector2Transform(FXMVECTOR V, CXMMATRIX M); |
||
| 2213 | XMFLOAT4* XMVector2TransformStream(__out_bcount(sizeof(XMFLOAT4)+OutputStride*(VectorCount-1)) XMFLOAT4* pOutputStream, |
||
| 2214 | __in UINT OutputStride, |
||
| 2215 | __in_bcount(sizeof(XMFLOAT2)+InputStride*(VectorCount-1)) CONST XMFLOAT2* pInputStream, |
||
| 2216 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2217 | XMFLOAT4* XMVector2TransformStreamNC(__out_bcount(sizeof(XMFLOAT4)+OutputStride*(VectorCount-1)) XMFLOAT4* pOutputStream, |
||
| 2218 | __in UINT OutputStride, |
||
| 2219 | __in_bcount(sizeof(XMFLOAT2)+InputStride*(VectorCount-1)) CONST XMFLOAT2* pInputStream, |
||
| 2220 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2221 | XMVECTOR XMVector2TransformCoord(FXMVECTOR V, CXMMATRIX M); |
||
| 2222 | XMFLOAT2* XMVector2TransformCoordStream(__out_bcount(sizeof(XMFLOAT2)+OutputStride*(VectorCount-1)) XMFLOAT2* pOutputStream, |
||
| 2223 | __in UINT OutputStride, |
||
| 2224 | __in_bcount(sizeof(XMFLOAT2)+InputStride*(VectorCount-1)) CONST XMFLOAT2* pInputStream, |
||
| 2225 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2226 | XMVECTOR XMVector2TransformNormal(FXMVECTOR V, CXMMATRIX M); |
||
| 2227 | XMFLOAT2* XMVector2TransformNormalStream(__out_bcount(sizeof(XMFLOAT2)+OutputStride*(VectorCount-1)) XMFLOAT2* pOutputStream, |
||
| 2228 | __in UINT OutputStride, |
||
| 2229 | __in_bcount(sizeof(XMFLOAT2)+InputStride*(VectorCount-1)) CONST XMFLOAT2* pInputStream, |
||
| 2230 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2231 | |||
| 2232 | /**************************************************************************** |
||
| 2233 | * |
||
| 2234 | * 3D vector operations |
||
| 2235 | * |
||
| 2236 | ****************************************************************************/ |
||
| 2237 | |||
| 2238 | |||
| 2239 | BOOL XMVector3Equal(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2240 | UINT XMVector3EqualR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2241 | BOOL XMVector3EqualInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2242 | UINT XMVector3EqualIntR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2243 | BOOL XMVector3NearEqual(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR Epsilon); |
||
| 2244 | BOOL XMVector3NotEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2245 | BOOL XMVector3NotEqualInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2246 | BOOL XMVector3Greater(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2247 | UINT XMVector3GreaterR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2248 | BOOL XMVector3GreaterOrEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2249 | UINT XMVector3GreaterOrEqualR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2250 | BOOL XMVector3Less(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2251 | BOOL XMVector3LessOrEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2252 | BOOL XMVector3InBounds(FXMVECTOR V, FXMVECTOR Bounds); |
||
| 2253 | UINT XMVector3InBoundsR(FXMVECTOR V, FXMVECTOR Bounds); |
||
| 2254 | |||
| 2255 | BOOL XMVector3IsNaN(FXMVECTOR V); |
||
| 2256 | BOOL XMVector3IsInfinite(FXMVECTOR V); |
||
| 2257 | |||
| 2258 | XMVECTOR XMVector3Dot(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2259 | XMVECTOR XMVector3Cross(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2260 | XMVECTOR XMVector3LengthSq(FXMVECTOR V); |
||
| 2261 | XMVECTOR XMVector3ReciprocalLengthEst(FXMVECTOR V); |
||
| 2262 | XMVECTOR XMVector3ReciprocalLength(FXMVECTOR V); |
||
| 2263 | XMVECTOR XMVector3LengthEst(FXMVECTOR V); |
||
| 2264 | XMVECTOR XMVector3Length(FXMVECTOR V); |
||
| 2265 | XMVECTOR XMVector3NormalizeEst(FXMVECTOR V); |
||
| 2266 | XMVECTOR XMVector3Normalize(FXMVECTOR V); |
||
| 2267 | XMVECTOR XMVector3ClampLength(FXMVECTOR V, FLOAT LengthMin, FLOAT LengthMax); |
||
| 2268 | XMVECTOR XMVector3ClampLengthV(FXMVECTOR V, FXMVECTOR LengthMin, FXMVECTOR LengthMax); |
||
| 2269 | XMVECTOR XMVector3Reflect(FXMVECTOR Incident, FXMVECTOR Normal); |
||
| 2270 | XMVECTOR XMVector3Refract(FXMVECTOR Incident, FXMVECTOR Normal, FLOAT RefractionIndex); |
||
| 2271 | XMVECTOR XMVector3RefractV(FXMVECTOR Incident, FXMVECTOR Normal, FXMVECTOR RefractionIndex); |
||
| 2272 | XMVECTOR XMVector3Orthogonal(FXMVECTOR V); |
||
| 2273 | XMVECTOR XMVector3AngleBetweenNormalsEst(FXMVECTOR N1, FXMVECTOR N2); |
||
| 2274 | XMVECTOR XMVector3AngleBetweenNormals(FXMVECTOR N1, FXMVECTOR N2); |
||
| 2275 | XMVECTOR XMVector3AngleBetweenVectors(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2276 | XMVECTOR XMVector3LinePointDistance(FXMVECTOR LinePoint1, FXMVECTOR LinePoint2, FXMVECTOR Point); |
||
| 2277 | VOID XMVector3ComponentsFromNormal(__out XMVECTOR* pParallel, __out XMVECTOR* pPerpendicular, FXMVECTOR V, FXMVECTOR Normal); |
||
| 2278 | XMVECTOR XMVector3Rotate(FXMVECTOR V, FXMVECTOR RotationQuaternion); |
||
| 2279 | XMVECTOR XMVector3InverseRotate(FXMVECTOR V, FXMVECTOR RotationQuaternion); |
||
| 2280 | XMVECTOR XMVector3Transform(FXMVECTOR V, CXMMATRIX M); |
||
| 2281 | XMFLOAT4* XMVector3TransformStream(__out_bcount(sizeof(XMFLOAT4)+OutputStride*(VectorCount-1)) XMFLOAT4* pOutputStream, |
||
| 2282 | __in UINT OutputStride, |
||
| 2283 | __in_bcount(sizeof(XMFLOAT3)+InputStride*(VectorCount-1)) CONST XMFLOAT3* pInputStream, |
||
| 2284 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2285 | XMFLOAT4* XMVector3TransformStreamNC(__out_bcount(sizeof(XMFLOAT4)+OutputStride*(VectorCount-1)) XMFLOAT4* pOutputStream, |
||
| 2286 | __in UINT OutputStride, |
||
| 2287 | __in_bcount(sizeof(XMFLOAT3)+InputStride*(VectorCount-1)) CONST XMFLOAT3* pInputStream, |
||
| 2288 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2289 | XMVECTOR XMVector3TransformCoord(FXMVECTOR V, CXMMATRIX M); |
||
| 2290 | XMFLOAT3* XMVector3TransformCoordStream(__out_bcount(sizeof(XMFLOAT3)+OutputStride*(VectorCount-1)) XMFLOAT3* pOutputStream, |
||
| 2291 | __in UINT OutputStride, |
||
| 2292 | __in_bcount(sizeof(XMFLOAT3)+InputStride*(VectorCount-1)) CONST XMFLOAT3* pInputStream, |
||
| 2293 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2294 | XMVECTOR XMVector3TransformNormal(FXMVECTOR V, CXMMATRIX M); |
||
| 2295 | XMFLOAT3* XMVector3TransformNormalStream(__out_bcount(sizeof(XMFLOAT3)+OutputStride*(VectorCount-1)) XMFLOAT3* pOutputStream, |
||
| 2296 | __in UINT OutputStride, |
||
| 2297 | __in_bcount(sizeof(XMFLOAT3)+InputStride*(VectorCount-1)) CONST XMFLOAT3* pInputStream, |
||
| 2298 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2299 | XMVECTOR XMVector3Project(FXMVECTOR V, FLOAT ViewportX, FLOAT ViewportY, FLOAT ViewportWidth, FLOAT ViewportHeight, FLOAT ViewportMinZ, FLOAT ViewportMaxZ, |
||
| 2300 | CXMMATRIX Projection, CXMMATRIX View, CXMMATRIX World); |
||
| 2301 | XMFLOAT3* XMVector3ProjectStream(__out_bcount(sizeof(XMFLOAT3)+OutputStride*(VectorCount-1)) XMFLOAT3* pOutputStream, |
||
| 2302 | __in UINT OutputStride, |
||
| 2303 | __in_bcount(sizeof(XMFLOAT3)+InputStride*(VectorCount-1)) CONST XMFLOAT3* pInputStream, |
||
| 2304 | __in UINT InputStride, __in UINT VectorCount, |
||
| 2305 | FLOAT ViewportX, FLOAT ViewportY, FLOAT ViewportWidth, FLOAT ViewportHeight, FLOAT ViewportMinZ, FLOAT ViewportMaxZ, |
||
| 2306 | CXMMATRIX Projection, CXMMATRIX View, CXMMATRIX World); |
||
| 2307 | XMVECTOR XMVector3Unproject(FXMVECTOR V, FLOAT ViewportX, FLOAT ViewportY, FLOAT ViewportWidth, FLOAT ViewportHeight, FLOAT ViewportMinZ, FLOAT ViewportMaxZ, |
||
| 2308 | CXMMATRIX Projection, CXMMATRIX View, CXMMATRIX World); |
||
| 2309 | XMFLOAT3* XMVector3UnprojectStream(__out_bcount(sizeof(XMFLOAT3)+OutputStride*(VectorCount-1)) XMFLOAT3* pOutputStream, |
||
| 2310 | __in UINT OutputStride, |
||
| 2311 | __in_bcount(sizeof(XMFLOAT3)+InputStride*(VectorCount-1)) CONST XMFLOAT3* pInputStream, |
||
| 2312 | __in UINT InputStride, __in UINT VectorCount, |
||
| 2313 | FLOAT ViewportX, FLOAT ViewportY, FLOAT ViewportWidth, FLOAT ViewportHeight, FLOAT ViewportMinZ, FLOAT ViewportMaxZ, |
||
| 2314 | CXMMATRIX Projection, CXMMATRIX View, CXMMATRIX World); |
||
| 2315 | |||
| 2316 | /**************************************************************************** |
||
| 2317 | * |
||
| 2318 | * 4D vector operations |
||
| 2319 | * |
||
| 2320 | ****************************************************************************/ |
||
| 2321 | |||
| 2322 | BOOL XMVector4Equal(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2323 | UINT XMVector4EqualR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2324 | BOOL XMVector4EqualInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2325 | UINT XMVector4EqualIntR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2326 | BOOL XMVector4NearEqual(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR Epsilon); |
||
| 2327 | BOOL XMVector4NotEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2328 | BOOL XMVector4NotEqualInt(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2329 | BOOL XMVector4Greater(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2330 | UINT XMVector4GreaterR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2331 | BOOL XMVector4GreaterOrEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2332 | UINT XMVector4GreaterOrEqualR(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2333 | BOOL XMVector4Less(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2334 | BOOL XMVector4LessOrEqual(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2335 | BOOL XMVector4InBounds(FXMVECTOR V, FXMVECTOR Bounds); |
||
| 2336 | UINT XMVector4InBoundsR(FXMVECTOR V, FXMVECTOR Bounds); |
||
| 2337 | |||
| 2338 | BOOL XMVector4IsNaN(FXMVECTOR V); |
||
| 2339 | BOOL XMVector4IsInfinite(FXMVECTOR V); |
||
| 2340 | |||
| 2341 | XMVECTOR XMVector4Dot(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2342 | XMVECTOR XMVector4Cross(FXMVECTOR V1, FXMVECTOR V2, FXMVECTOR V3); |
||
| 2343 | XMVECTOR XMVector4LengthSq(FXMVECTOR V); |
||
| 2344 | XMVECTOR XMVector4ReciprocalLengthEst(FXMVECTOR V); |
||
| 2345 | XMVECTOR XMVector4ReciprocalLength(FXMVECTOR V); |
||
| 2346 | XMVECTOR XMVector4LengthEst(FXMVECTOR V); |
||
| 2347 | XMVECTOR XMVector4Length(FXMVECTOR V); |
||
| 2348 | XMVECTOR XMVector4NormalizeEst(FXMVECTOR V); |
||
| 2349 | XMVECTOR XMVector4Normalize(FXMVECTOR V); |
||
| 2350 | XMVECTOR XMVector4ClampLength(FXMVECTOR V, FLOAT LengthMin, FLOAT LengthMax); |
||
| 2351 | XMVECTOR XMVector4ClampLengthV(FXMVECTOR V, FXMVECTOR LengthMin, FXMVECTOR LengthMax); |
||
| 2352 | XMVECTOR XMVector4Reflect(FXMVECTOR Incident, FXMVECTOR Normal); |
||
| 2353 | XMVECTOR XMVector4Refract(FXMVECTOR Incident, FXMVECTOR Normal, FLOAT RefractionIndex); |
||
| 2354 | XMVECTOR XMVector4RefractV(FXMVECTOR Incident, FXMVECTOR Normal, FXMVECTOR RefractionIndex); |
||
| 2355 | XMVECTOR XMVector4Orthogonal(FXMVECTOR V); |
||
| 2356 | XMVECTOR XMVector4AngleBetweenNormalsEst(FXMVECTOR N1, FXMVECTOR N2); |
||
| 2357 | XMVECTOR XMVector4AngleBetweenNormals(FXMVECTOR N1, FXMVECTOR N2); |
||
| 2358 | XMVECTOR XMVector4AngleBetweenVectors(FXMVECTOR V1, FXMVECTOR V2); |
||
| 2359 | XMVECTOR XMVector4Transform(FXMVECTOR V, CXMMATRIX M); |
||
| 2360 | XMFLOAT4* XMVector4TransformStream(__out_bcount(sizeof(XMFLOAT4)+OutputStride*(VectorCount-1)) XMFLOAT4* pOutputStream, |
||
| 2361 | __in UINT OutputStride, |
||
| 2362 | __in_bcount(sizeof(XMFLOAT4)+InputStride*(VectorCount-1)) CONST XMFLOAT4* pInputStream, |
||
| 2363 | __in UINT InputStride, __in UINT VectorCount, CXMMATRIX M); |
||
| 2364 | |||
| 2365 | /**************************************************************************** |
||
| 2366 | * |
||
| 2367 | * Matrix operations |
||
| 2368 | * |
||
| 2369 | ****************************************************************************/ |
||
| 2370 | |||
| 2371 | BOOL XMMatrixIsNaN(CXMMATRIX M); |
||
| 2372 | BOOL XMMatrixIsInfinite(CXMMATRIX M); |
||
| 2373 | BOOL XMMatrixIsIdentity(CXMMATRIX M); |
||
| 2374 | |||
| 2375 | XMMATRIX XMMatrixMultiply(CXMMATRIX M1, CXMMATRIX M2); |
||
| 2376 | XMMATRIX XMMatrixMultiplyTranspose(CXMMATRIX M1, CXMMATRIX M2); |
||
| 2377 | XMMATRIX XMMatrixTranspose(CXMMATRIX M); |
||
| 2378 | XMMATRIX XMMatrixInverse(__out XMVECTOR* pDeterminant, CXMMATRIX M); |
||
| 2379 | XMVECTOR XMMatrixDeterminant(CXMMATRIX M); |
||
| 2380 | BOOL XMMatrixDecompose(__out XMVECTOR *outScale, __out XMVECTOR *outRotQuat, __out XMVECTOR *outTrans, CXMMATRIX M); |
||
| 2381 | |||
| 2382 | XMMATRIX XMMatrixIdentity(); |
||
| 2383 | XMMATRIX XMMatrixSet(FLOAT m00, FLOAT m01, FLOAT m02, FLOAT m03, |
||
| 2384 | FLOAT m10, FLOAT m11, FLOAT m12, FLOAT m13, |
||
| 2385 | FLOAT m20, FLOAT m21, FLOAT m22, FLOAT m23, |
||
| 2386 | FLOAT m30, FLOAT m31, FLOAT m32, FLOAT m33); |
||
| 2387 | XMMATRIX XMMatrixTranslation(FLOAT OffsetX, FLOAT OffsetY, FLOAT OffsetZ); |
||
| 2388 | XMMATRIX XMMatrixTranslationFromVector(FXMVECTOR Offset); |
||
| 2389 | XMMATRIX XMMatrixScaling(FLOAT ScaleX, FLOAT ScaleY, FLOAT ScaleZ); |
||
| 2390 | XMMATRIX XMMatrixScalingFromVector(FXMVECTOR Scale); |
||
| 2391 | XMMATRIX XMMatrixRotationX(FLOAT Angle); |
||
| 2392 | XMMATRIX XMMatrixRotationY(FLOAT Angle); |
||
| 2393 | XMMATRIX XMMatrixRotationZ(FLOAT Angle); |
||
| 2394 | XMMATRIX XMMatrixRotationRollPitchYaw(FLOAT Pitch, FLOAT Yaw, FLOAT Roll); |
||
| 2395 | XMMATRIX XMMatrixRotationRollPitchYawFromVector(FXMVECTOR Angles); |
||
| 2396 | XMMATRIX XMMatrixRotationNormal(FXMVECTOR NormalAxis, FLOAT Angle); |
||
| 2397 | XMMATRIX XMMatrixRotationAxis(FXMVECTOR Axis, FLOAT Angle); |
||
| 2398 | XMMATRIX XMMatrixRotationQuaternion(FXMVECTOR Quaternion); |
||
| 2399 | XMMATRIX XMMatrixTransformation2D(FXMVECTOR ScalingOrigin, FLOAT ScalingOrientation, FXMVECTOR Scaling, |
||
| 2400 | FXMVECTOR RotationOrigin, FLOAT Rotation, CXMVECTOR Translation); |
||
| 2401 | XMMATRIX XMMatrixTransformation(FXMVECTOR ScalingOrigin, FXMVECTOR ScalingOrientationQuaternion, FXMVECTOR Scaling, |
||
| 2402 | CXMVECTOR RotationOrigin, CXMVECTOR RotationQuaternion, CXMVECTOR Translation); |
||
| 2403 | XMMATRIX XMMatrixAffineTransformation2D(FXMVECTOR Scaling, FXMVECTOR RotationOrigin, FLOAT Rotation, FXMVECTOR Translation); |
||
| 2404 | XMMATRIX XMMatrixAffineTransformation(FXMVECTOR Scaling, FXMVECTOR RotationOrigin, FXMVECTOR RotationQuaternion, CXMVECTOR Translation); |
||
| 2405 | XMMATRIX XMMatrixReflect(FXMVECTOR ReflectionPlane); |
||
| 2406 | XMMATRIX XMMatrixShadow(FXMVECTOR ShadowPlane, FXMVECTOR LightPosition); |
||
| 2407 | |||
| 2408 | XMMATRIX XMMatrixLookAtLH(FXMVECTOR EyePosition, FXMVECTOR FocusPosition, FXMVECTOR UpDirection); |
||
| 2409 | XMMATRIX XMMatrixLookAtRH(FXMVECTOR EyePosition, FXMVECTOR FocusPosition, FXMVECTOR UpDirection); |
||
| 2410 | XMMATRIX XMMatrixLookToLH(FXMVECTOR EyePosition, FXMVECTOR EyeDirection, FXMVECTOR UpDirection); |
||
| 2411 | XMMATRIX XMMatrixLookToRH(FXMVECTOR EyePosition, FXMVECTOR EyeDirection, FXMVECTOR UpDirection); |
||
| 2412 | XMMATRIX XMMatrixPerspectiveLH(FLOAT ViewWidth, FLOAT ViewHeight, FLOAT NearZ, FLOAT FarZ); |
||
| 2413 | XMMATRIX XMMatrixPerspectiveRH(FLOAT ViewWidth, FLOAT ViewHeight, FLOAT NearZ, FLOAT FarZ); |
||
| 2414 | XMMATRIX XMMatrixPerspectiveFovLH(FLOAT FovAngleY, FLOAT AspectHByW, FLOAT NearZ, FLOAT FarZ); |
||
| 2415 | XMMATRIX XMMatrixPerspectiveFovRH(FLOAT FovAngleY, FLOAT AspectHByW, FLOAT NearZ, FLOAT FarZ); |
||
| 2416 | XMMATRIX XMMatrixPerspectiveOffCenterLH(FLOAT ViewLeft, FLOAT ViewRight, FLOAT ViewBottom, FLOAT ViewTop, FLOAT NearZ, FLOAT FarZ); |
||
| 2417 | XMMATRIX XMMatrixPerspectiveOffCenterRH(FLOAT ViewLeft, FLOAT ViewRight, FLOAT ViewBottom, FLOAT ViewTop, FLOAT NearZ, FLOAT FarZ); |
||
| 2418 | XMMATRIX XMMatrixOrthographicLH(FLOAT ViewWidth, FLOAT ViewHeight, FLOAT NearZ, FLOAT FarZ); |
||
| 2419 | XMMATRIX XMMatrixOrthographicRH(FLOAT ViewWidth, FLOAT ViewHeight, FLOAT NearZ, FLOAT FarZ); |
||
| 2420 | XMMATRIX XMMatrixOrthographicOffCenterLH(FLOAT ViewLeft, FLOAT ViewRight, FLOAT ViewBottom, FLOAT ViewTop, FLOAT NearZ, FLOAT FarZ); |
||
| 2421 | XMMATRIX XMMatrixOrthographicOffCenterRH(FLOAT ViewLeft, FLOAT ViewRight, FLOAT ViewBottom, FLOAT ViewTop, FLOAT NearZ, FLOAT FarZ); |
||
| 2422 | |||
| 2423 | /**************************************************************************** |
||
| 2424 | * |
||
| 2425 | * Quaternion operations |
||
| 2426 | * |
||
| 2427 | ****************************************************************************/ |
||
| 2428 | |||
| 2429 | BOOL XMQuaternionEqual(FXMVECTOR Q1, FXMVECTOR Q2); |
||
| 2430 | BOOL XMQuaternionNotEqual(FXMVECTOR Q1, FXMVECTOR Q2); |
||
| 2431 | |||
| 2432 | BOOL XMQuaternionIsNaN(FXMVECTOR Q); |
||
| 2433 | BOOL XMQuaternionIsInfinite(FXMVECTOR Q); |
||
| 2434 | BOOL XMQuaternionIsIdentity(FXMVECTOR Q); |
||
| 2435 | |||
| 2436 | XMVECTOR XMQuaternionDot(FXMVECTOR Q1, FXMVECTOR Q2); |
||
| 2437 | XMVECTOR XMQuaternionMultiply(FXMVECTOR Q1, FXMVECTOR Q2); |
||
| 2438 | XMVECTOR XMQuaternionLengthSq(FXMVECTOR Q); |
||
| 2439 | XMVECTOR XMQuaternionReciprocalLength(FXMVECTOR Q); |
||
| 2440 | XMVECTOR XMQuaternionLength(FXMVECTOR Q); |
||
| 2441 | XMVECTOR XMQuaternionNormalizeEst(FXMVECTOR Q); |
||
| 2442 | XMVECTOR XMQuaternionNormalize(FXMVECTOR Q); |
||
| 2443 | XMVECTOR XMQuaternionConjugate(FXMVECTOR Q); |
||
| 2444 | XMVECTOR XMQuaternionInverse(FXMVECTOR Q); |
||
| 2445 | XMVECTOR XMQuaternionLn(FXMVECTOR Q); |
||
| 2446 | XMVECTOR XMQuaternionExp(FXMVECTOR Q); |
||
| 2447 | XMVECTOR XMQuaternionSlerp(FXMVECTOR Q0, FXMVECTOR Q1, FLOAT t); |
||
| 2448 | XMVECTOR XMQuaternionSlerpV(FXMVECTOR Q0, FXMVECTOR Q1, FXMVECTOR T); |
||
| 2449 | XMVECTOR XMQuaternionSquad(FXMVECTOR Q0, FXMVECTOR Q1, FXMVECTOR Q2, CXMVECTOR Q3, FLOAT t); |
||
| 2450 | XMVECTOR XMQuaternionSquadV(FXMVECTOR Q0, FXMVECTOR Q1, FXMVECTOR Q2, CXMVECTOR Q3, CXMVECTOR T); |
||
| 2451 | VOID XMQuaternionSquadSetup(__out XMVECTOR* pA, __out XMVECTOR* pB, __out XMVECTOR* pC, FXMVECTOR Q0, FXMVECTOR Q1, FXMVECTOR Q2, CXMVECTOR Q3); |
||
| 2452 | XMVECTOR XMQuaternionBaryCentric(FXMVECTOR Q0, FXMVECTOR Q1, FXMVECTOR Q2, FLOAT f, FLOAT g); |
||
| 2453 | XMVECTOR XMQuaternionBaryCentricV(FXMVECTOR Q0, FXMVECTOR Q1, FXMVECTOR Q2, CXMVECTOR F, CXMVECTOR G); |
||
| 2454 | |||
| 2455 | XMVECTOR XMQuaternionIdentity(); |
||
| 2456 | XMVECTOR XMQuaternionRotationRollPitchYaw(FLOAT Pitch, FLOAT Yaw, FLOAT Roll); |
||
| 2457 | XMVECTOR XMQuaternionRotationRollPitchYawFromVector(FXMVECTOR Angles); |
||
| 2458 | XMVECTOR XMQuaternionRotationNormal(FXMVECTOR NormalAxis, FLOAT Angle); |
||
| 2459 | XMVECTOR XMQuaternionRotationAxis(FXMVECTOR Axis, FLOAT Angle); |
||
| 2460 | XMVECTOR XMQuaternionRotationMatrix(CXMMATRIX M); |
||
| 2461 | |||
| 2462 | VOID XMQuaternionToAxisAngle(__out XMVECTOR* pAxis, __out FLOAT* pAngle, FXMVECTOR Q); |
||
| 2463 | |||
| 2464 | /**************************************************************************** |
||
| 2465 | * |
||
| 2466 | * Plane operations |
||
| 2467 | * |
||
| 2468 | ****************************************************************************/ |
||
| 2469 | |||
| 2470 | BOOL XMPlaneEqual(FXMVECTOR P1, FXMVECTOR P2); |
||
| 2471 | BOOL XMPlaneNearEqual(FXMVECTOR P1, FXMVECTOR P2, FXMVECTOR Epsilon); |
||
| 2472 | BOOL XMPlaneNotEqual(FXMVECTOR P1, FXMVECTOR P2); |
||
| 2473 | |||
| 2474 | BOOL XMPlaneIsNaN(FXMVECTOR P); |
||
| 2475 | BOOL XMPlaneIsInfinite(FXMVECTOR P); |
||
| 2476 | |||
| 2477 | XMVECTOR XMPlaneDot(FXMVECTOR P, FXMVECTOR V); |
||
| 2478 | XMVECTOR XMPlaneDotCoord(FXMVECTOR P, FXMVECTOR V); |
||
| 2479 | XMVECTOR XMPlaneDotNormal(FXMVECTOR P, FXMVECTOR V); |
||
| 2480 | XMVECTOR XMPlaneNormalizeEst(FXMVECTOR P); |
||
| 2481 | XMVECTOR XMPlaneNormalize(FXMVECTOR P); |
||
| 2482 | XMVECTOR XMPlaneIntersectLine(FXMVECTOR P, FXMVECTOR LinePoint1, FXMVECTOR LinePoint2); |
||
| 2483 | VOID XMPlaneIntersectPlane(__out XMVECTOR* pLinePoint1, __out XMVECTOR* pLinePoint2, FXMVECTOR P1, FXMVECTOR P2); |
||
| 2484 | XMVECTOR XMPlaneTransform(FXMVECTOR P, CXMMATRIX M); |
||
| 2485 | XMFLOAT4* XMPlaneTransformStream(__out_bcount(sizeof(XMFLOAT4)+OutputStride*(PlaneCount-1)) XMFLOAT4* pOutputStream, |
||
| 2486 | __in UINT OutputStride, |
||
| 2487 | __in_bcount(sizeof(XMFLOAT4)+InputStride*(PlaneCount-1)) CONST XMFLOAT4* pInputStream, |
||
| 2488 | __in UINT InputStride, __in UINT PlaneCount, CXMMATRIX M); |
||
| 2489 | |||
| 2490 | XMVECTOR XMPlaneFromPointNormal(FXMVECTOR Point, FXMVECTOR Normal); |
||
| 2491 | XMVECTOR XMPlaneFromPoints(FXMVECTOR Point1, FXMVECTOR Point2, FXMVECTOR Point3); |
||
| 2492 | |||
| 2493 | /**************************************************************************** |
||
| 2494 | * |
||
| 2495 | * Color operations |
||
| 2496 | * |
||
| 2497 | ****************************************************************************/ |
||
| 2498 | |||
| 2499 | BOOL XMColorEqual(FXMVECTOR C1, FXMVECTOR C2); |
||
| 2500 | BOOL XMColorNotEqual(FXMVECTOR C1, FXMVECTOR C2); |
||
| 2501 | BOOL XMColorGreater(FXMVECTOR C1, FXMVECTOR C2); |
||
| 2502 | BOOL XMColorGreaterOrEqual(FXMVECTOR C1, FXMVECTOR C2); |
||
| 2503 | BOOL XMColorLess(FXMVECTOR C1, FXMVECTOR C2); |
||
| 2504 | BOOL XMColorLessOrEqual(FXMVECTOR C1, FXMVECTOR C2); |
||
| 2505 | |||
| 2506 | BOOL XMColorIsNaN(FXMVECTOR C); |
||
| 2507 | BOOL XMColorIsInfinite(FXMVECTOR C); |
||
| 2508 | |||
| 2509 | XMVECTOR XMColorNegative(FXMVECTOR C); |
||
| 2510 | XMVECTOR XMColorModulate(FXMVECTOR C1, FXMVECTOR C2); |
||
| 2511 | XMVECTOR XMColorAdjustSaturation(FXMVECTOR C, FLOAT Saturation); |
||
| 2512 | XMVECTOR XMColorAdjustContrast(FXMVECTOR C, FLOAT Contrast); |
||
| 2513 | |||
| 2514 | /**************************************************************************** |
||
| 2515 | * |
||
| 2516 | * Miscellaneous operations |
||
| 2517 | * |
||
| 2518 | ****************************************************************************/ |
||
| 2519 | |||
| 2520 | BOOL XMVerifyCPUSupport(); |
||
| 2521 | |||
| 2522 | VOID XMAssert(__in_z CONST CHAR* pExpression, __in_z CONST CHAR* pFileName, UINT LineNumber); |
||
| 2523 | |||
| 2524 | XMVECTOR XMFresnelTerm(FXMVECTOR CosIncidentAngle, FXMVECTOR RefractionIndex); |
||
| 2525 | |||
| 2526 | BOOL XMScalarNearEqual(FLOAT S1, FLOAT S2, FLOAT Epsilon); |
||
| 2527 | FLOAT XMScalarModAngle(FLOAT Value); |
||
| 2528 | FLOAT XMScalarSin(FLOAT Value); |
||
| 2529 | FLOAT XMScalarCos(FLOAT Value); |
||
| 2530 | VOID XMScalarSinCos(__out FLOAT* pSin, __out FLOAT* pCos, FLOAT Value); |
||
| 2531 | FLOAT XMScalarASin(FLOAT Value); |
||
| 2532 | FLOAT XMScalarACos(FLOAT Value); |
||
| 2533 | FLOAT XMScalarSinEst(FLOAT Value); |
||
| 2534 | FLOAT XMScalarCosEst(FLOAT Value); |
||
| 2535 | VOID XMScalarSinCosEst(__out FLOAT* pSin, __out FLOAT* pCos, FLOAT Value); |
||
| 2536 | FLOAT XMScalarASinEst(FLOAT Value); |
||
| 2537 | FLOAT XMScalarACosEst(FLOAT Value); |
||
| 2538 | |||
| 2539 | /**************************************************************************** |
||
| 2540 | * |
||
| 2541 | * Globals |
||
| 2542 | * |
||
| 2543 | ****************************************************************************/ |
||
| 2544 | |||
| 2545 | // The purpose of the following global constants is to prevent redundant |
||
| 2546 | // reloading of the constants when they are referenced by more than one |
||
| 2547 | // separate inline math routine called within the same function. Declaring |
||
| 2548 | // a constant locally within a routine is sufficient to prevent redundant |
||
| 2549 | // reloads of that constant when that single routine is called multiple |
||
| 2550 | // times in a function, but if the constant is used (and declared) in a |
||
| 2551 | // separate math routine it would be reloaded. |
||
| 2552 | |||
| 2553 | #define XMGLOBALCONST extern CONST __declspec(selectany) |
||
| 2554 | |||
| 2555 | XMGLOBALCONST XMVECTORF32 g_XMSinCoefficients0 = {1.0f, -0.166666667f, 8.333333333e-3f, -1.984126984e-4f}; |
||
| 2556 | XMGLOBALCONST XMVECTORF32 g_XMSinCoefficients1 = {2.755731922e-6f, -2.505210839e-8f, 1.605904384e-10f, -7.647163732e-13f}; |
||
| 2557 | XMGLOBALCONST XMVECTORF32 g_XMSinCoefficients2 = {2.811457254e-15f, -8.220635247e-18f, 1.957294106e-20f, -3.868170171e-23f}; |
||
| 2558 | XMGLOBALCONST XMVECTORF32 g_XMCosCoefficients0 = {1.0f, -0.5f, 4.166666667e-2f, -1.388888889e-3f}; |
||
| 2559 | XMGLOBALCONST XMVECTORF32 g_XMCosCoefficients1 = {2.480158730e-5f, -2.755731922e-7f, 2.087675699e-9f, -1.147074560e-11f}; |
||
| 2560 | XMGLOBALCONST XMVECTORF32 g_XMCosCoefficients2 = {4.779477332e-14f, -1.561920697e-16f, 4.110317623e-19f, -8.896791392e-22f}; |
||
| 2561 | XMGLOBALCONST XMVECTORF32 g_XMTanCoefficients0 = {1.0f, 0.333333333f, 0.133333333f, 5.396825397e-2f}; |
||
| 2562 | XMGLOBALCONST XMVECTORF32 g_XMTanCoefficients1 = {2.186948854e-2f, 8.863235530e-3f, 3.592128167e-3f, 1.455834485e-3f}; |
||
| 2563 | XMGLOBALCONST XMVECTORF32 g_XMTanCoefficients2 = {5.900274264e-4f, 2.391290764e-4f, 9.691537707e-5f, 3.927832950e-5f}; |
||
| 2564 | XMGLOBALCONST XMVECTORF32 g_XMASinCoefficients0 = {-0.05806367563904f, -0.41861972469416f, 0.22480114791621f, 2.17337241360606f}; |
||
| 2565 | XMGLOBALCONST XMVECTORF32 g_XMASinCoefficients1 = {0.61657275907170f, 4.29696498283455f, -1.18942822255452f, -6.53784832094831f}; |
||
| 2566 | XMGLOBALCONST XMVECTORF32 g_XMASinCoefficients2 = {-1.36926553863413f, -4.48179294237210f, 1.41810672941833f, 5.48179257935713f}; |
||
| 2567 | XMGLOBALCONST XMVECTORF32 g_XMATanCoefficients0 = {1.0f, 0.333333334f, 0.2f, 0.142857143f}; |
||
| 2568 | XMGLOBALCONST XMVECTORF32 g_XMATanCoefficients1 = {1.111111111e-1f, 9.090909091e-2f, 7.692307692e-2f, 6.666666667e-2f}; |
||
| 2569 | XMGLOBALCONST XMVECTORF32 g_XMATanCoefficients2 = {5.882352941e-2f, 5.263157895e-2f, 4.761904762e-2f, 4.347826087e-2f}; |
||
| 2570 | XMGLOBALCONST XMVECTORF32 g_XMSinEstCoefficients = {1.0f, -1.66521856991541e-1f, 8.199913018755e-3f, -1.61475937228e-4f}; |
||
| 2571 | XMGLOBALCONST XMVECTORF32 g_XMCosEstCoefficients = {1.0f, -4.95348008918096e-1f, 3.878259962881e-2f, -9.24587976263e-4f}; |
||
| 2572 | XMGLOBALCONST XMVECTORF32 g_XMTanEstCoefficients = {2.484f, -1.954923183e-1f, 2.467401101f, XM_1DIVPI}; |
||
| 2573 | XMGLOBALCONST XMVECTORF32 g_XMATanEstCoefficients = {7.689891418951e-1f, 1.104742493348f, 8.661844266006e-1f, XM_PIDIV2}; |
||
| 2574 | XMGLOBALCONST XMVECTORF32 g_XMASinEstCoefficients = {-1.36178272886711f, 2.37949493464538f, -8.08228565650486e-1f, 2.78440142746736e-1f}; |
||
| 2575 | XMGLOBALCONST XMVECTORF32 g_XMASinEstConstants = {1.00000011921f, XM_PIDIV2, 0.0f, 0.0f}; |
||
| 2576 | XMGLOBALCONST XMVECTORF32 g_XMPiConstants0 = {XM_PI, XM_2PI, XM_1DIVPI, XM_1DIV2PI}; |
||
| 2577 | XMGLOBALCONST XMVECTORF32 g_XMIdentityR0 = {1.0f, 0.0f, 0.0f, 0.0f}; |
||
| 2578 | XMGLOBALCONST XMVECTORF32 g_XMIdentityR1 = {0.0f, 1.0f, 0.0f, 0.0f}; |
||
| 2579 | XMGLOBALCONST XMVECTORF32 g_XMIdentityR2 = {0.0f, 0.0f, 1.0f, 0.0f}; |
||
| 2580 | XMGLOBALCONST XMVECTORF32 g_XMIdentityR3 = {0.0f, 0.0f, 0.0f, 1.0f}; |
||
| 2581 | XMGLOBALCONST XMVECTORF32 g_XMNegIdentityR0 = {-1.0f,0.0f, 0.0f, 0.0f}; |
||
| 2582 | XMGLOBALCONST XMVECTORF32 g_XMNegIdentityR1 = {0.0f,-1.0f, 0.0f, 0.0f}; |
||
| 2583 | XMGLOBALCONST XMVECTORF32 g_XMNegIdentityR2 = {0.0f, 0.0f,-1.0f, 0.0f}; |
||
| 2584 | XMGLOBALCONST XMVECTORF32 g_XMNegIdentityR3 = {0.0f, 0.0f, 0.0f,-1.0f}; |
||
| 2585 | |||
| 2586 | #if defined(_XM_NO_INTRINSICS_) || defined(_XM_SSE_INTRINSICS_) |
||
| 2587 | |||
| 2588 | XMGLOBALCONST XMVECTORI32 g_XMNegativeZero = {0x80000000, 0x80000000, 0x80000000, 0x80000000}; |
||
| 2589 | XMGLOBALCONST XMVECTORI32 g_XMNegate3 = {0x80000000, 0x80000000, 0x80000000, 0x00000000}; |
||
| 2590 | XMGLOBALCONST XMVECTORI32 g_XMMask3 = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000}; |
||
| 2591 | XMGLOBALCONST XMVECTORI32 g_XMMaskX = {0xFFFFFFFF, 0x00000000, 0x00000000, 0x00000000}; |
||
| 2592 | XMGLOBALCONST XMVECTORI32 g_XMMaskY = {0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000}; |
||
| 2593 | XMGLOBALCONST XMVECTORI32 g_XMMaskZ = {0x00000000, 0x00000000, 0xFFFFFFFF, 0x00000000}; |
||
| 2594 | XMGLOBALCONST XMVECTORI32 g_XMMaskW = {0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF}; |
||
| 2595 | XMGLOBALCONST XMVECTORF32 g_XMOne = { 1.0f, 1.0f, 1.0f, 1.0f}; |
||
| 2596 | XMGLOBALCONST XMVECTORF32 g_XMOne3 = { 1.0f, 1.0f, 1.0f, 0.0f}; |
||
| 2597 | XMGLOBALCONST XMVECTORF32 g_XMZero = { 0.0f, 0.0f, 0.0f, 0.0f}; |
||
| 2598 | XMGLOBALCONST XMVECTORF32 g_XMNegativeOne = {-1.0f,-1.0f,-1.0f,-1.0f}; |
||
| 2599 | XMGLOBALCONST XMVECTORF32 g_XMOneHalf = { 0.5f, 0.5f, 0.5f, 0.5f}; |
||
| 2600 | XMGLOBALCONST XMVECTORF32 g_XMNegativeOneHalf = {-0.5f,-0.5f,-0.5f,-0.5f}; |
||
| 2601 | XMGLOBALCONST XMVECTORF32 g_XMNegativeTwoPi = {-XM_2PI, -XM_2PI, -XM_2PI, -XM_2PI}; |
||
| 2602 | XMGLOBALCONST XMVECTORF32 g_XMNegativePi = {-XM_PI, -XM_PI, -XM_PI, -XM_PI}; |
||
| 2603 | XMGLOBALCONST XMVECTORF32 g_XMHalfPi = {XM_PIDIV2, XM_PIDIV2, XM_PIDIV2, XM_PIDIV2}; |
||
| 2604 | XMGLOBALCONST XMVECTORF32 g_XMPi = {XM_PI, XM_PI, XM_PI, XM_PI}; |
||
| 2605 | XMGLOBALCONST XMVECTORF32 g_XMReciprocalPi = {XM_1DIVPI, XM_1DIVPI, XM_1DIVPI, XM_1DIVPI}; |
||
| 2606 | XMGLOBALCONST XMVECTORF32 g_XMTwoPi = {XM_2PI, XM_2PI, XM_2PI, XM_2PI}; |
||
| 2607 | XMGLOBALCONST XMVECTORF32 g_XMReciprocalTwoPi = {XM_1DIV2PI, XM_1DIV2PI, XM_1DIV2PI, XM_1DIV2PI}; |
||
| 2608 | XMGLOBALCONST XMVECTORF32 g_XMEpsilon = {1.192092896e-7f, 1.192092896e-7f, 1.192092896e-7f, 1.192092896e-7f}; |
||
| 2609 | XMGLOBALCONST XMVECTORI32 g_XMInfinity = {0x7F800000, 0x7F800000, 0x7F800000, 0x7F800000}; |
||
| 2610 | XMGLOBALCONST XMVECTORI32 g_XMQNaN = {0x7FC00000, 0x7FC00000, 0x7FC00000, 0x7FC00000}; |
||
| 2611 | XMGLOBALCONST XMVECTORI32 g_XMQNaNTest = {0x007FFFFF, 0x007FFFFF, 0x007FFFFF, 0x007FFFFF}; |
||
| 2612 | XMGLOBALCONST XMVECTORI32 g_XMAbsMask = {0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF}; |
||
| 2613 | XMGLOBALCONST XMVECTORI32 g_XMFltMin = {0x00800000, 0x00800000, 0x00800000, 0x00800000}; |
||
| 2614 | XMGLOBALCONST XMVECTORI32 g_XMFltMax = {0x7F7FFFFF, 0x7F7FFFFF, 0x7F7FFFFF, 0x7F7FFFFF}; |
||
| 2615 | XMGLOBALCONST XMVECTORI32 g_XMNegOneMask = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}; |
||
| 2616 | XMGLOBALCONST XMVECTORI32 g_XMMaskA8R8G8B8 = {0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000}; |
||
| 2617 | XMGLOBALCONST XMVECTORI32 g_XMFlipA8R8G8B8 = {0x00000000, 0x00000000, 0x00000000, 0x80000000}; |
||
| 2618 | XMGLOBALCONST XMVECTORF32 g_XMFixAA8R8G8B8 = {0.0f,0.0f,0.0f,(float)(0x80000000U)}; |
||
| 2619 | XMGLOBALCONST XMVECTORF32 g_XMNormalizeA8R8G8B8 = {1.0f/(255.0f*(float)(0x10000)),1.0f/(255.0f*(float)(0x100)),1.0f/255.0f,1.0f/(255.0f*(float)(0x1000000))}; |
||
| 2620 | XMGLOBALCONST XMVECTORI32 g_XMMaskA2B10G10R10 = {0x000003FF, 0x000FFC00, 0x3FF00000, 0xC0000000}; |
||
| 2621 | XMGLOBALCONST XMVECTORI32 g_XMFlipA2B10G10R10 = {0x00000200, 0x00080000, 0x20000000, 0x80000000}; |
||
| 2622 | XMGLOBALCONST XMVECTORF32 g_XMFixAA2B10G10R10 = {-512.0f,-512.0f*(float)(0x400),-512.0f*(float)(0x100000),(float)(0x80000000U)}; |
||
| 2623 | XMGLOBALCONST XMVECTORF32 g_XMNormalizeA2B10G10R10 = {1.0f/511.0f,1.0f/(511.0f*(float)(0x400)),1.0f/(511.0f*(float)(0x100000)),1.0f/(3.0f*(float)(0x40000000))}; |
||
| 2624 | XMGLOBALCONST XMVECTORI32 g_XMMaskX16Y16 = {0x0000FFFF, 0xFFFF0000, 0x00000000, 0x00000000}; |
||
| 2625 | XMGLOBALCONST XMVECTORI32 g_XMFlipX16Y16 = {0x00008000, 0x00000000, 0x00000000, 0x00000000}; |
||
| 2626 | XMGLOBALCONST XMVECTORF32 g_XMFixX16Y16 = {-32768.0f,0.0f,0.0f,0.0f}; |
||
| 2627 | XMGLOBALCONST XMVECTORF32 g_XMNormalizeX16Y16 = {1.0f/32767.0f,1.0f/(32767.0f*65536.0f),0.0f,0.0f}; |
||
| 2628 | XMGLOBALCONST XMVECTORI32 g_XMMaskX16Y16Z16W16 = {0x0000FFFF, 0x0000FFFF, 0xFFFF0000, 0xFFFF0000}; |
||
| 2629 | XMGLOBALCONST XMVECTORI32 g_XMFlipX16Y16Z16W16 = {0x00008000, 0x00008000, 0x00000000, 0x00000000}; |
||
| 2630 | XMGLOBALCONST XMVECTORF32 g_XMFixX16Y16Z16W16 = {-32768.0f,-32768.0f,0.0f,0.0f}; |
||
| 2631 | XMGLOBALCONST XMVECTORF32 g_XMNormalizeX16Y16Z16W16 = {1.0f/32767.0f,1.0f/32767.0f,1.0f/(32767.0f*65536.0f),1.0f/(32767.0f*65536.0f)}; |
||
| 2632 | XMGLOBALCONST XMVECTORF32 g_XMNoFraction = {8388608.0f,8388608.0f,8388608.0f,8388608.0f}; |
||
| 2633 | XMGLOBALCONST XMVECTORI32 g_XMMaskByte = {0x000000FF, 0x000000FF, 0x000000FF, 0x000000FF}; |
||
| 2634 | XMGLOBALCONST XMVECTORF32 g_XMNegateX = {-1.0f, 1.0f, 1.0f, 1.0f}; |
||
| 2635 | XMGLOBALCONST XMVECTORF32 g_XMNegateY = { 1.0f,-1.0f, 1.0f, 1.0f}; |
||
| 2636 | XMGLOBALCONST XMVECTORF32 g_XMNegateZ = { 1.0f, 1.0f,-1.0f, 1.0f}; |
||
| 2637 | XMGLOBALCONST XMVECTORF32 g_XMNegateW = { 1.0f, 1.0f, 1.0f,-1.0f}; |
||
| 2638 | XMGLOBALCONST XMVECTORI32 g_XMSelect0101 = {XM_SELECT_0, XM_SELECT_1, XM_SELECT_0, XM_SELECT_1}; |
||
| 2639 | XMGLOBALCONST XMVECTORI32 g_XMSelect1010 = {XM_SELECT_1, XM_SELECT_0, XM_SELECT_1, XM_SELECT_0}; |
||
| 2640 | XMGLOBALCONST XMVECTORI32 g_XMOneHalfMinusEpsilon = { 0x3EFFFFFD, 0x3EFFFFFD, 0x3EFFFFFD, 0x3EFFFFFD}; |
||
| 2641 | |||
| 2642 | #ifdef _XM_NO_INTRINSICS_ |
||
| 2643 | XMGLOBALCONST XMVECTORI32 g_XMSelect1000 = {XM_SELECT_1, XM_SELECT_0, XM_SELECT_0, XM_SELECT_0}; |
||
| 2644 | XMGLOBALCONST XMVECTORI32 g_XMSelect1100 = {XM_SELECT_1, XM_SELECT_1, XM_SELECT_0, XM_SELECT_0}; |
||
| 2645 | XMGLOBALCONST XMVECTORI32 g_XMSelect1110 = {XM_SELECT_1, XM_SELECT_1, XM_SELECT_1, XM_SELECT_0}; |
||
| 2646 | XMGLOBALCONST XMVECTORI32 g_XMSwizzleXYXY = {XM_PERMUTE_0X, XM_PERMUTE_0Y, XM_PERMUTE_0X, XM_PERMUTE_0Y}; |
||
| 2647 | XMGLOBALCONST XMVECTORI32 g_XMSwizzleXYZX = {XM_PERMUTE_0X, XM_PERMUTE_0Y, XM_PERMUTE_0Z, XM_PERMUTE_0X}; |
||
| 2648 | XMGLOBALCONST XMVECTORI32 g_XMSwizzleYXZW = {XM_PERMUTE_0Y, XM_PERMUTE_0X, XM_PERMUTE_0Z, XM_PERMUTE_0W}; |
||
| 2649 | XMGLOBALCONST XMVECTORI32 g_XMSwizzleYZXW = {XM_PERMUTE_0Y, XM_PERMUTE_0Z, XM_PERMUTE_0X, XM_PERMUTE_0W}; |
||
| 2650 | XMGLOBALCONST XMVECTORI32 g_XMSwizzleZXYW = {XM_PERMUTE_0Z, XM_PERMUTE_0X, XM_PERMUTE_0Y, XM_PERMUTE_0W}; |
||
| 2651 | XMGLOBALCONST XMVECTORI32 g_XMPermute0X0Y1X1Y = {XM_PERMUTE_0X, XM_PERMUTE_0Y, XM_PERMUTE_1X, XM_PERMUTE_1Y}; |
||
| 2652 | XMGLOBALCONST XMVECTORI32 g_XMPermute0Z0W1Z1W = {XM_PERMUTE_0Z, XM_PERMUTE_0W, XM_PERMUTE_1Z, XM_PERMUTE_1W}; |
||
| 2653 | #endif // !_XM_NO_INTRINSICS_ |
||
| 2654 | |||
| 2655 | #ifdef _XM_SSE_INTRINSICS_ |
||
| 2656 | XMGLOBALCONST XMVECTORF32 g_XMFixupY16 = {1.0f,1.0f/65536.0f,0.0f,0.0f}; |
||
| 2657 | XMGLOBALCONST XMVECTORF32 g_XMFixupY16W16 = {1.0f,1.0f,1.0f/65536.0f,1.0f/65536.0f}; |
||
| 2658 | XMGLOBALCONST XMVECTORI32 g_XMFlipY = {0,0x80000000,0,0}; |
||
| 2659 | XMGLOBALCONST XMVECTORI32 g_XMFlipZ = {0,0,0x80000000,0}; |
||
| 2660 | XMGLOBALCONST XMVECTORI32 g_XMFlipW = {0,0,0,0x80000000}; |
||
| 2661 | XMGLOBALCONST XMVECTORI32 g_XMFlipYZ = {0,0x80000000,0x80000000,0}; |
||
| 2662 | XMGLOBALCONST XMVECTORI32 g_XMFlipZW = {0,0,0x80000000,0x80000000}; |
||
| 2663 | XMGLOBALCONST XMVECTORI32 g_XMFlipYW = {0,0x80000000,0,0x80000000}; |
||
| 2664 | XMGLOBALCONST XMVECTORI32 g_XMMaskHenD3 = {0x7FF,0x7ff<<11,0x3FF<<22,0}; |
||
| 2665 | XMGLOBALCONST XMVECTORI32 g_XMMaskDHen3 = {0x3FF,0x7ff<<10,0x7FF<<21,0}; |
||
| 2666 | XMGLOBALCONST XMVECTORF32 g_XMAddUHenD3 = {0,0,32768.0f*65536.0f,0}; |
||
| 2667 | XMGLOBALCONST XMVECTORF32 g_XMAddHenD3 = {-1024.0f,-1024.0f*2048.0f,0,0}; |
||
| 2668 | XMGLOBALCONST XMVECTORF32 g_XMAddDHen3 = {-512.0f,-1024.0f*1024.0f,0,0}; |
||
| 2669 | XMGLOBALCONST XMVECTORF32 g_XMMulHenD3 = {1.0f,1.0f/2048.0f,1.0f/(2048.0f*2048.0f),0}; |
||
| 2670 | XMGLOBALCONST XMVECTORF32 g_XMMulDHen3 = {1.0f,1.0f/1024.0f,1.0f/(1024.0f*2048.0f),0}; |
||
| 2671 | XMGLOBALCONST XMVECTORI32 g_XMXorHenD3 = {0x400,0x400<<11,0,0}; |
||
| 2672 | XMGLOBALCONST XMVECTORI32 g_XMXorDHen3 = {0x200,0x400<<10,0,0}; |
||
| 2673 | XMGLOBALCONST XMVECTORI32 g_XMMaskIco4 = {0xFFFFF,0xFFFFF000,0xFFFFF,0xF0000000}; |
||
| 2674 | XMGLOBALCONST XMVECTORI32 g_XMXorXIco4 = {0x80000,0,0x80000,0x80000000}; |
||
| 2675 | XMGLOBALCONST XMVECTORI32 g_XMXorIco4 = {0x80000,0,0x80000,0}; |
||
| 2676 | XMGLOBALCONST XMVECTORF32 g_XMAddXIco4 = {-8.0f*65536.0f,0,-8.0f*65536.0f,32768.0f*65536.0f}; |
||
| 2677 | XMGLOBALCONST XMVECTORF32 g_XMAddUIco4 = {0,32768.0f*65536.0f,0,32768.0f*65536.0f}; |
||
| 2678 | XMGLOBALCONST XMVECTORF32 g_XMAddIco4 = {-8.0f*65536.0f,0,-8.0f*65536.0f,0}; |
||
| 2679 | XMGLOBALCONST XMVECTORF32 g_XMMulIco4 = {1.0f,1.0f/4096.0f,1.0f,1.0f/(4096.0f*65536.0f)}; |
||
| 2680 | XMGLOBALCONST XMVECTORI32 g_XMMaskDec4 = {0x3FF,0x3FF<<10,0x3FF<<20,0x3<<30}; |
||
| 2681 | XMGLOBALCONST XMVECTORI32 g_XMXorDec4 = {0x200,0x200<<10,0x200<<20,0}; |
||
| 2682 | XMGLOBALCONST XMVECTORF32 g_XMAddUDec4 = {0,0,0,32768.0f*65536.0f}; |
||
| 2683 | XMGLOBALCONST XMVECTORF32 g_XMAddDec4 = {-512.0f,-512.0f*1024.0f,-512.0f*1024.0f*1024.0f,0}; |
||
| 2684 | XMGLOBALCONST XMVECTORF32 g_XMMulDec4 = {1.0f,1.0f/1024.0f,1.0f/(1024.0f*1024.0f),1.0f/(1024.0f*1024.0f*1024.0f)}; |
||
| 2685 | XMGLOBALCONST XMVECTORI32 g_XMMaskByte4 = {0xFF,0xFF00,0xFF0000,0xFF000000}; |
||
| 2686 | XMGLOBALCONST XMVECTORI32 g_XMXorByte4 = {0x80,0x8000,0x800000,0x00000000}; |
||
| 2687 | XMGLOBALCONST XMVECTORF32 g_XMAddByte4 = {-128.0f,-128.0f*256.0f,-128.0f*65536.0f,0}; |
||
| 2688 | #endif |
||
| 2689 | |||
| 2690 | #endif // _XM_NO_INTRINSICS_ |
||
| 2691 | |||
| 2692 | /**************************************************************************** |
||
| 2693 | * |
||
| 2694 | * Implementation |
||
| 2695 | * |
||
| 2696 | ****************************************************************************/ |
||
| 2697 | |||
| 2698 | #pragma warning(push) |
||
| 2699 | #pragma warning(disable:4214 4204 4616 6001) |
||
| 2700 | |||
| 2701 | #if !defined(__cplusplus) && !defined(_XBOX) && defined(_XM_ISVS2005_) |
||
| 2702 | |||
| 2703 | /* Work around VC 2005 bug where math.h defines logf with a semicolon at the end. |
||
| 2704 | * Note this is fixed as of Visual Studio 2005 Service Pack 1 |
||
| 2705 | */ |
||
| 2706 | |||
| 2707 | #undef logf |
||
| 2708 | #define logf(x) ((float)log((double)(x))) |
||
| 2709 | |||
| 2710 | #endif // !defined(__cplusplus) && !defined(_XBOX) && defined(_XM_ISVS2005_) |
||
| 2711 | |||
| 2712 | //------------------------------------------------------------------------------ |
||
| 2713 | |||
| 2714 | #if defined(_XM_NO_INTRINSICS_) || defined(_XM_SSE_INTRINSICS_) |
||
| 2715 | |||
| 2716 | XMFINLINE XMVECTOR XMVectorSetBinaryConstant(UINT C0, UINT C1, UINT C2, UINT C3) |
||
| 2717 | { |
||
| 2718 | #if defined(_XM_NO_INTRINSICS_) |
||
| 2719 | XMVECTORU32 vResult; |
||
| 2720 | vResult.u[0] = (0-(C0&1)) & 0x3F800000; |
||
| 2721 | vResult.u[1] = (0-(C1&1)) & 0x3F800000; |
||
| 2722 | vResult.u[2] = (0-(C2&1)) & 0x3F800000; |
||
| 2723 | vResult.u[3] = (0-(C3&1)) & 0x3F800000; |
||
| 2724 | return vResult.v; |
||
| 2725 | #else // XM_SSE_INTRINSICS_ |
||
| 2726 | static const XMVECTORU32 g_vMask1 = {1,1,1,1}; |
||
| 2727 | // Move the parms to a vector |
||
| 2728 | __m128i vTemp = _mm_set_epi32(C3,C2,C1,C0); |
||
| 2729 | // Mask off the low bits |
||
| 2730 | vTemp = _mm_and_si128(vTemp,g_vMask1); |
||
| 2731 | // 0xFFFFFFFF on true bits |
||
| 2732 | vTemp = _mm_cmpeq_epi32(vTemp,g_vMask1); |
||
| 2733 | // 0xFFFFFFFF -> 1.0f, 0x00000000 -> 0.0f |
||
| 2734 | vTemp = _mm_and_si128(vTemp,g_XMOne); |
||
| 2735 | return reinterpret_cast<const __m128 *>(&vTemp)[0]; |
||
| 2736 | #endif |
||
| 2737 | } |
||
| 2738 | |||
| 2739 | //------------------------------------------------------------------------------ |
||
| 2740 | |||
| 2741 | XMFINLINE XMVECTOR XMVectorSplatConstant(INT IntConstant, UINT DivExponent) |
||
| 2742 | { |
||
| 2743 | #if defined(_XM_NO_INTRINSICS_) |
||
| 2744 | XMASSERT( IntConstant >= -16 && IntConstant <= 15 ); |
||
| 2745 | XMASSERT(DivExponent<32); |
||
| 2746 | { |
||
| 2747 | XMVECTORI32 V = { IntConstant, IntConstant, IntConstant, IntConstant }; |
||
| 2748 | return XMConvertVectorIntToFloat( V.v, DivExponent); |
||
| 2749 | } |
||
| 2750 | #else // XM_SSE_INTRINSICS_ |
||
| 2751 | XMASSERT( IntConstant >= -16 && IntConstant <= 15 ); |
||
| 2752 | XMASSERT(DivExponent<32); |
||
| 2753 | // Splat the int |
||
| 2754 | __m128i vScale = _mm_set1_epi32(IntConstant); |
||
| 2755 | // Convert to a float |
||
| 2756 | XMVECTOR vResult = _mm_cvtepi32_ps(vScale); |
||
| 2757 | // Convert DivExponent into 1.0f/(1<<DivExponent) |
||
| 2758 | UINT uScale = 0x3F800000U - (DivExponent << 23); |
||
| 2759 | // Splat the scalar value (It's really a float) |
||
| 2760 | vScale = _mm_set1_epi32(uScale); |
||
| 2761 | // Multiply by the reciprocal (Perform a right shift by DivExponent) |
||
| 2762 | vResult = _mm_mul_ps(vResult,reinterpret_cast<const __m128 *>(&vScale)[0]); |
||
| 2763 | return vResult; |
||
| 2764 | #endif |
||
| 2765 | } |
||
| 2766 | |||
| 2767 | //------------------------------------------------------------------------------ |
||
| 2768 | |||
| 2769 | XMFINLINE XMVECTOR XMVectorSplatConstantInt(INT IntConstant) |
||
| 2770 | { |
||
| 2771 | #if defined(_XM_NO_INTRINSICS_) |
||
| 2772 | XMASSERT( IntConstant >= -16 && IntConstant <= 15 ); |
||
| 2773 | { |
||
| 2774 | XMVECTORI32 V = { IntConstant, IntConstant, IntConstant, IntConstant }; |
||
| 2775 | return V.v; |
||
| 2776 | } |
||
| 2777 | #else // XM_SSE_INTRINSICS_ |
||
| 2778 | XMASSERT( IntConstant >= -16 && IntConstant <= 15 ); |
||
| 2779 | __m128i V = _mm_set1_epi32( IntConstant ); |
||
| 2780 | return reinterpret_cast<__m128 *>(&V)[0]; |
||
| 2781 | #endif |
||
| 2782 | } |
||
| 2783 | |||
| 2784 | //------------------------------------------------------------------------------ |
||
| 2785 | |||
| 2786 | XMFINLINE XMVECTOR XMVectorShiftLeft(FXMVECTOR V1, FXMVECTOR V2, UINT Elements) |
||
| 2787 | { |
||
| 2788 | return XMVectorPermute(V1, V2, XMVectorPermuteControl((Elements), ((Elements) + 1), ((Elements) + 2), ((Elements) + 3))); |
||
| 2789 | } |
||
| 2790 | |||
| 2791 | //------------------------------------------------------------------------------ |
||
| 2792 | |||
| 2793 | XMFINLINE XMVECTOR XMVectorRotateLeft(FXMVECTOR V, UINT Elements) |
||
| 2794 | { |
||
| 2795 | #if defined(_XM_NO_INTRINSICS_) |
||
| 2796 | XMASSERT( Elements < 4 ); |
||
| 2797 | { |
||
| 2798 | XMVECTORF32 vResult = { V.vector4_f32[Elements & 3], V.vector4_f32[(Elements + 1) & 3], |
||
| 2799 | V.vector4_f32[(Elements + 2) & 3], V.vector4_f32[(Elements + 3) & 3] }; |
||
| 2800 | return vResult.v; |
||
| 2801 | } |
||
| 2802 | #else // XM_SSE_INTRINSICS_ |
||
| 2803 | FLOAT fx = XMVectorGetByIndex(V,(Elements) & 3); |
||
| 2804 | FLOAT fy = XMVectorGetByIndex(V,((Elements) + 1) & 3); |
||
| 2805 | FLOAT fz = XMVectorGetByIndex(V,((Elements) + 2) & 3); |
||
| 2806 | FLOAT fw = XMVectorGetByIndex(V,((Elements) + 3) & 3); |
||
| 2807 | return _mm_set_ps( fw, fz, fy, fx ); |
||
| 2808 | #endif |
||
| 2809 | } |
||
| 2810 | |||
| 2811 | //------------------------------------------------------------------------------ |
||
| 2812 | |||
| 2813 | XMFINLINE XMVECTOR XMVectorRotateRight(FXMVECTOR V, UINT Elements) |
||
| 2814 | { |
||
| 2815 | #if defined(_XM_NO_INTRINSICS_) |
||
| 2816 | XMASSERT( Elements < 4 ); |
||
| 2817 | { |
||
| 2818 | XMVECTORF32 vResult = { V.vector4_f32[(4 - (Elements)) & 3], V.vector4_f32[(5 - (Elements)) & 3], |
||
| 2819 | V.vector4_f32[(6 - (Elements)) & 3], V.vector4_f32[(7 - (Elements)) & 3] }; |
||
| 2820 | return vResult.v; |
||
| 2821 | } |
||
| 2822 | #else // XM_SSE_INTRINSICS_ |
||
| 2823 | FLOAT fx = XMVectorGetByIndex(V,(4 - (Elements)) & 3); |
||
| 2824 | FLOAT fy = XMVectorGetByIndex(V,(5 - (Elements)) & 3); |
||
| 2825 | FLOAT fz = XMVectorGetByIndex(V,(6 - (Elements)) & 3); |
||
| 2826 | FLOAT fw = XMVectorGetByIndex(V,(7 - (Elements)) & 3); |
||
| 2827 | return _mm_set_ps( fw, fz, fy, fx ); |
||
| 2828 | #endif |
||
| 2829 | } |
||
| 2830 | |||
| 2831 | //------------------------------------------------------------------------------ |
||
| 2832 | |||
| 2833 | XMFINLINE XMVECTOR XMVectorSwizzle(FXMVECTOR V, UINT E0, UINT E1, UINT E2, UINT E3) |
||
| 2834 | { |
||
| 2835 | #if defined(_XM_NO_INTRINSICS_) |
||
| 2836 | XMASSERT( (E0 < 4) && (E1 < 4) && (E2 < 4) && (E3 < 4) ); |
||
| 2837 | { |
||
| 2838 | XMVECTORF32 vResult = { V.vector4_f32[E0], V.vector4_f32[E1], V.vector4_f32[E2], V.vector4_f32[E3] }; |
||
| 2839 | return vResult.v; |
||
| 2840 | } |
||
| 2841 | #else // XM_SSE_INTRINSICS_ |
||
| 2842 | FLOAT fx = XMVectorGetByIndex(V,E0); |
||
| 2843 | FLOAT fy = XMVectorGetByIndex(V,E1); |
||
| 2844 | FLOAT fz = XMVectorGetByIndex(V,E2); |
||
| 2845 | FLOAT fw = XMVectorGetByIndex(V,E3); |
||
| 2846 | return _mm_set_ps( fw, fz, fy, fx ); |
||
| 2847 | #endif |
||
| 2848 | } |
||
| 2849 | |||
| 2850 | //------------------------------------------------------------------------------ |
||
| 2851 | |||
| 2852 | XMFINLINE XMVECTOR XMVectorInsert(FXMVECTOR VD, FXMVECTOR VS, UINT VSLeftRotateElements, |
||
| 2853 | UINT Select0, UINT Select1, UINT Select2, UINT Select3) |
||
| 2854 | { |
||
| 2855 | XMVECTOR Control = XMVectorSelectControl(Select0&1, Select1&1, Select2&1, Select3&1); |
||
| 2856 | return XMVectorSelect( VD, XMVectorRotateLeft(VS, VSLeftRotateElements), Control ); |
||
| 2857 | } |
||
| 2858 | |||
| 2859 | // Implemented for VMX128 intrinsics as #defines aboves |
||
| 2860 | #endif _XM_NO_INTRINSICS_ || _XM_SSE_INTRINSICS_ |
||
| 2861 | |||
| 2862 | //------------------------------------------------------------------------------ |
||
| 2863 | |||
| 2864 | #include <xnamathconvert.inl> |
||
| 2865 | #include <xnamathvector.inl> |
||
| 2866 | #include <xnamathmatrix.inl> |
||
| 2867 | #include <xnamathmisc.inl> |
||
| 2868 | |||
| 2869 | #pragma warning(pop) |
||
| 2870 | |||
| 2871 | #endif // __XNAMATH_H__ |
||
| 2872 |