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 |