clang  20.0.0git
hlsl_intrinsics.h
Go to the documentation of this file.
1 //===----- hlsl_intrinsics.h - HLSL definitions for intrinsics ----------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef _HLSL_HLSL_INTRINSICS_H_
10 #define _HLSL_HLSL_INTRINSICS_H_
11 
12 namespace hlsl {
13 
14 // Note: Functions in this file are sorted alphabetically, then grouped by base
15 // element type, and the element types are sorted by size, then singed integer,
16 // unsigned integer and floating point. Keeping this ordering consistent will
17 // help keep this file manageable as it grows.
18 
19 #define _HLSL_BUILTIN_ALIAS(builtin) \
20  __attribute__((clang_builtin_alias(builtin)))
21 #define _HLSL_AVAILABILITY(platform, version) \
22  __attribute__((availability(platform, introduced = version)))
23 #define _HLSL_AVAILABILITY_STAGE(platform, version, stage) \
24  __attribute__(( \
25  availability(platform, introduced = version, environment = stage)))
26 
27 #ifdef __HLSL_ENABLE_16_BIT
28 #define _HLSL_16BIT_AVAILABILITY(platform, version) \
29  __attribute__((availability(platform, introduced = version)))
30 #define _HLSL_16BIT_AVAILABILITY_STAGE(platform, version, stage) \
31  __attribute__(( \
32  availability(platform, introduced = version, environment = stage)))
33 #else
34 #define _HLSL_16BIT_AVAILABILITY(environment, version)
35 #define _HLSL_16BIT_AVAILABILITY_STAGE(environment, version, stage)
36 #endif
37 
38 //===----------------------------------------------------------------------===//
39 // abs builtins
40 //===----------------------------------------------------------------------===//
41 
42 /// \fn T abs(T Val)
43 /// \brief Returns the absolute value of the input value, \a Val.
44 /// \param Val The input value.
45 
46 #ifdef __HLSL_ENABLE_16_BIT
47 _HLSL_AVAILABILITY(shadermodel, 6.2)
48 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
49 int16_t abs(int16_t);
50 _HLSL_AVAILABILITY(shadermodel, 6.2)
51 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
52 int16_t2 abs(int16_t2);
53 _HLSL_AVAILABILITY(shadermodel, 6.2)
54 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
55 int16_t3 abs(int16_t3);
56 _HLSL_AVAILABILITY(shadermodel, 6.2)
57 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
58 int16_t4 abs(int16_t4);
59 #endif
60 
61 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
62 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
63 half abs(half);
64 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
65 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
67 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
68 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
70 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
71 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
73 
74 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
75 int abs(int);
76 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
78 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
80 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
82 
83 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
84 float abs(float);
85 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
87 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
89 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
91 
92 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
94 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
96 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
98 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
100 
101 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
102 double abs(double);
103 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
105 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
107 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
109 
110 //===----------------------------------------------------------------------===//
111 // acos builtins
112 //===----------------------------------------------------------------------===//
113 
114 /// \fn T acos(T Val)
115 /// \brief Returns the arccosine of the input value, \a Val.
116 /// \param Val The input value.
117 
118 #ifdef __HLSL_ENABLE_16_BIT
119 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
120 half acos(half);
121 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
122 half2 acos(half2);
123 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
124 half3 acos(half3);
125 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
126 half4 acos(half4);
127 #endif
128 
129 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
130 float acos(float);
131 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
133 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
135 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
137 
138 //===----------------------------------------------------------------------===//
139 // all builtins
140 //===----------------------------------------------------------------------===//
141 
142 /// \fn bool all(T x)
143 /// \brief Returns True if all components of the \a x parameter are non-zero;
144 /// otherwise, false. \param x The input value.
145 
146 #ifdef __HLSL_ENABLE_16_BIT
147 _HLSL_AVAILABILITY(shadermodel, 6.2)
148 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
149 bool all(int16_t);
150 _HLSL_AVAILABILITY(shadermodel, 6.2)
151 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
152 bool all(int16_t2);
153 _HLSL_AVAILABILITY(shadermodel, 6.2)
154 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
155 bool all(int16_t3);
156 _HLSL_AVAILABILITY(shadermodel, 6.2)
157 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
158 bool all(int16_t4);
159 _HLSL_AVAILABILITY(shadermodel, 6.2)
160 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
161 bool all(uint16_t);
162 _HLSL_AVAILABILITY(shadermodel, 6.2)
163 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
164 bool all(uint16_t2);
165 _HLSL_AVAILABILITY(shadermodel, 6.2)
166 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
167 bool all(uint16_t3);
168 _HLSL_AVAILABILITY(shadermodel, 6.2)
169 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
170 bool all(uint16_t4);
171 #endif
172 
173 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
174 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
175 bool all(half);
176 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
177 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
178 bool all(half2);
179 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
180 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
181 bool all(half3);
182 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
183 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
184 bool all(half4);
185 
186 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
187 bool all(bool);
188 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
189 bool all(bool2);
190 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
191 bool all(bool3);
192 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
193 bool all(bool4);
194 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
195 
196 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
197 bool all(int);
198 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
199 bool all(int2);
200 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
201 bool all(int3);
202 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
203 bool all(int4);
204 
205 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
206 bool all(uint);
207 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
208 bool all(uint2);
209 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
210 bool all(uint3);
211 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
212 bool all(uint4);
213 
214 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
215 bool all(float);
216 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
217 bool all(float2);
218 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
219 bool all(float3);
220 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
221 bool all(float4);
222 
223 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
224 bool all(int64_t);
225 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
226 bool all(int64_t2);
227 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
228 bool all(int64_t3);
229 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
230 bool all(int64_t4);
231 
232 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
233 bool all(uint64_t);
234 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
236 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
238 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
240 
241 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
242 bool all(double);
243 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
244 bool all(double2);
245 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
246 bool all(double3);
247 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
248 bool all(double4);
249 
250 //===----------------------------------------------------------------------===//
251 // any builtins
252 //===----------------------------------------------------------------------===//
253 
254 /// \fn bool any(T x)
255 /// \brief Returns True if any components of the \a x parameter are non-zero;
256 /// otherwise, false. \param x The input value.
257 
258 #ifdef __HLSL_ENABLE_16_BIT
259 _HLSL_AVAILABILITY(shadermodel, 6.2)
260 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
261 bool any(int16_t);
262 _HLSL_AVAILABILITY(shadermodel, 6.2)
263 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
264 bool any(int16_t2);
265 _HLSL_AVAILABILITY(shadermodel, 6.2)
266 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
267 bool any(int16_t3);
268 _HLSL_AVAILABILITY(shadermodel, 6.2)
269 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
270 bool any(int16_t4);
271 _HLSL_AVAILABILITY(shadermodel, 6.2)
272 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
273 bool any(uint16_t);
274 _HLSL_AVAILABILITY(shadermodel, 6.2)
275 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
276 bool any(uint16_t2);
277 _HLSL_AVAILABILITY(shadermodel, 6.2)
278 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
279 bool any(uint16_t3);
280 _HLSL_AVAILABILITY(shadermodel, 6.2)
281 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
282 bool any(uint16_t4);
283 #endif
284 
285 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
286 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
287 bool any(half);
288 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
289 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
290 bool any(half2);
291 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
292 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
293 bool any(half3);
294 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
295 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
296 bool any(half4);
297 
298 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
299 bool any(bool);
300 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
301 bool any(bool2);
302 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
303 bool any(bool3);
304 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
305 bool any(bool4);
306 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
307 
308 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
309 bool any(int);
310 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
311 bool any(int2);
312 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
313 bool any(int3);
314 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
315 bool any(int4);
316 
317 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
318 bool any(uint);
319 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
320 bool any(uint2);
321 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
322 bool any(uint3);
323 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
324 bool any(uint4);
325 
326 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
327 bool any(float);
328 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
329 bool any(float2);
330 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
331 bool any(float3);
332 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
333 bool any(float4);
334 
335 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
336 bool any(int64_t);
337 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
338 bool any(int64_t2);
339 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
340 bool any(int64_t3);
341 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
342 bool any(int64_t4);
343 
344 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
345 bool any(uint64_t);
346 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
348 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
350 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
352 
353 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
354 bool any(double);
355 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
356 bool any(double2);
357 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
358 bool any(double3);
359 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
360 bool any(double4);
361 
362 //===----------------------------------------------------------------------===//
363 // asin builtins
364 //===----------------------------------------------------------------------===//
365 
366 /// \fn T asin(T Val)
367 /// \brief Returns the arcsine of the input value, \a Val.
368 /// \param Val The input value.
369 
370 #ifdef __HLSL_ENABLE_16_BIT
371 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
372 half asin(half);
373 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
374 half2 asin(half2);
375 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
376 half3 asin(half3);
377 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
378 half4 asin(half4);
379 #endif
380 
381 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
382 float asin(float);
383 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
385 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
387 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
389 
390 //===----------------------------------------------------------------------===//
391 // atan builtins
392 //===----------------------------------------------------------------------===//
393 
394 /// \fn T atan(T Val)
395 /// \brief Returns the arctangent of the input value, \a Val.
396 /// \param Val The input value.
397 
398 #ifdef __HLSL_ENABLE_16_BIT
399 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
400 half atan(half);
401 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
402 half2 atan(half2);
403 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
404 half3 atan(half3);
405 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
406 half4 atan(half4);
407 #endif
408 
409 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
410 float atan(float);
411 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
413 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
415 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
417 
418 //===----------------------------------------------------------------------===//
419 // ceil builtins
420 //===----------------------------------------------------------------------===//
421 
422 /// \fn T ceil(T Val)
423 /// \brief Returns the smallest integer value that is greater than or equal to
424 /// the input value, \a Val.
425 /// \param Val The input value.
426 
427 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
428 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
429 half ceil(half);
430 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
431 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
433 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
434 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
436 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
437 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
439 
440 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
441 float ceil(float);
442 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
444 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
446 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
448 
449 //===----------------------------------------------------------------------===//
450 // clamp builtins
451 //===----------------------------------------------------------------------===//
452 
453 /// \fn T clamp(T X, T Min, T Max)
454 /// \brief Clamps the specified value \a X to the specified
455 /// minimum ( \a Min) and maximum ( \a Max) range.
456 /// \param X A value to clamp.
457 /// \param Min The specified minimum range.
458 /// \param Max The specified maximum range.
459 ///
460 /// Returns The clamped value for the \a X parameter.
461 /// For values of -INF or INF, clamp will behave as expected.
462 /// However for values of NaN, the results are undefined.
463 
464 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
465 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
466 half clamp(half, half, half);
467 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
468 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
470 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
471 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
473 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
474 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
476 
477 #ifdef __HLSL_ENABLE_16_BIT
478 _HLSL_AVAILABILITY(shadermodel, 6.2)
479 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
480 int16_t clamp(int16_t, int16_t, int16_t);
481 _HLSL_AVAILABILITY(shadermodel, 6.2)
482 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
483 int16_t2 clamp(int16_t2, int16_t2, int16_t2);
484 _HLSL_AVAILABILITY(shadermodel, 6.2)
485 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
486 int16_t3 clamp(int16_t3, int16_t3, int16_t3);
487 _HLSL_AVAILABILITY(shadermodel, 6.2)
488 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
489 int16_t4 clamp(int16_t4, int16_t4, int16_t4);
490 
491 _HLSL_AVAILABILITY(shadermodel, 6.2)
492 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
493 uint16_t clamp(uint16_t, uint16_t, uint16_t);
494 _HLSL_AVAILABILITY(shadermodel, 6.2)
495 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
496 uint16_t2 clamp(uint16_t2, uint16_t2, uint16_t2);
497 _HLSL_AVAILABILITY(shadermodel, 6.2)
498 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
499 uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
500 _HLSL_AVAILABILITY(shadermodel, 6.2)
501 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
502 uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
503 #endif
504 
505 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
506 int clamp(int, int, int);
507 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
509 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
511 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
513 
514 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
516 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
518 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
520 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
522 
523 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
525 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
527 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
529 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
531 
532 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
534 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
536 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
538 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
540 
541 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
542 float clamp(float, float, float);
543 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
545 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
547 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
549 
550 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
551 double clamp(double, double, double);
552 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
554 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
556 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
558 
559 //===----------------------------------------------------------------------===//
560 // cos builtins
561 //===----------------------------------------------------------------------===//
562 
563 /// \fn T cos(T Val)
564 /// \brief Returns the cosine of the input value, \a Val.
565 /// \param Val The input value.
566 
567 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
568 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
569 half cos(half);
570 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
571 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
573 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
574 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
576 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
577 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
579 
580 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
581 float cos(float);
582 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
584 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
586 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
588 
589 //===----------------------------------------------------------------------===//
590 // cosh builtins
591 //===----------------------------------------------------------------------===//
592 
593 /// \fn T cosh(T Val)
594 /// \brief Returns the hyperbolic cosine of the input value, \a Val.
595 /// \param Val The input value.
596 
597 #ifdef __HLSL_ENABLE_16_BIT
598 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
599 half cosh(half);
600 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
601 half2 cosh(half2);
602 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
603 half3 cosh(half3);
604 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
605 half4 cosh(half4);
606 #endif
607 
608 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
609 float cosh(float);
610 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
612 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
614 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
616 
617 //===----------------------------------------------------------------------===//
618 // dot product builtins
619 //===----------------------------------------------------------------------===//
620 
621 /// \fn K dot(T X, T Y)
622 /// \brief Return the dot product (a scalar value) of \a X and \a Y.
623 /// \param X The X input value.
624 /// \param Y The Y input value.
625 
626 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
627 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
628 half dot(half, half);
629 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
630 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
631 half dot(half2, half2);
632 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
633 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
634 half dot(half3, half3);
635 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
636 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
637 half dot(half4, half4);
638 
639 #ifdef __HLSL_ENABLE_16_BIT
640 _HLSL_AVAILABILITY(shadermodel, 6.2)
641 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
642 int16_t dot(int16_t, int16_t);
643 _HLSL_AVAILABILITY(shadermodel, 6.2)
644 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
645 int16_t dot(int16_t2, int16_t2);
646 _HLSL_AVAILABILITY(shadermodel, 6.2)
647 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
648 int16_t dot(int16_t3, int16_t3);
649 _HLSL_AVAILABILITY(shadermodel, 6.2)
650 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
651 int16_t dot(int16_t4, int16_t4);
652 
653 _HLSL_AVAILABILITY(shadermodel, 6.2)
654 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
655 uint16_t dot(uint16_t, uint16_t);
656 _HLSL_AVAILABILITY(shadermodel, 6.2)
657 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
658 uint16_t dot(uint16_t2, uint16_t2);
659 _HLSL_AVAILABILITY(shadermodel, 6.2)
660 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
661 uint16_t dot(uint16_t3, uint16_t3);
662 _HLSL_AVAILABILITY(shadermodel, 6.2)
663 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
664 uint16_t dot(uint16_t4, uint16_t4);
665 #endif
666 
667 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
668 float dot(float, float);
669 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
670 float dot(float2, float2);
671 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
672 float dot(float3, float3);
673 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
674 float dot(float4, float4);
675 
676 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
677 double dot(double, double);
678 
679 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
680 int dot(int, int);
681 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
682 int dot(int2, int2);
683 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
684 int dot(int3, int3);
685 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
686 int dot(int4, int4);
687 
688 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
690 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
692 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
694 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
696 
697 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
699 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
701 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
703 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
705 
706 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
708 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
710 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
712 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
714 
715 //===----------------------------------------------------------------------===//
716 // exp builtins
717 //===----------------------------------------------------------------------===//
718 
719 /// \fn T exp(T x)
720 /// \brief Returns the base-e exponential, or \a e**x, of the specified value.
721 /// \param x The specified input value.
722 ///
723 /// The return value is the base-e exponential of the \a x parameter.
724 
725 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
726 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
727 half exp(half);
728 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
729 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
731 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
732 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
734 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
735 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
737 
738 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
739 float exp(float);
740 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
742 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
744 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
746 
747 //===----------------------------------------------------------------------===//
748 // exp2 builtins
749 //===----------------------------------------------------------------------===//
750 
751 /// \fn T exp2(T x)
752 /// \brief Returns the base 2 exponential, or \a 2**x, of the specified value.
753 /// \param x The specified input value.
754 ///
755 /// The base 2 exponential of the \a x parameter.
756 
757 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
758 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
759 half exp2(half);
760 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
761 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
763 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
764 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
766 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
767 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
769 
770 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
771 float exp2(float);
772 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
774 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
776 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
778 
779 //===----------------------------------------------------------------------===//
780 // floor builtins
781 //===----------------------------------------------------------------------===//
782 
783 /// \fn T floor(T Val)
784 /// \brief Returns the largest integer that is less than or equal to the input
785 /// value, \a Val.
786 /// \param Val The input value.
787 
788 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
789 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
790 half floor(half);
791 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
792 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
794 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
795 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
797 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
798 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
800 
801 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
802 float floor(float);
803 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
805 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
807 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
809 
810 //===----------------------------------------------------------------------===//
811 // frac builtins
812 //===----------------------------------------------------------------------===//
813 
814 /// \fn T frac(T x)
815 /// \brief Returns the fractional (or decimal) part of x. \a x parameter.
816 /// \param x The specified input value.
817 ///
818 /// If \a the return value is greater than or equal to 0 and less than 1.
819 
820 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
821 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
822 half frac(half);
823 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
824 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
826 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
827 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
829 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
830 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
832 
833 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
834 float frac(float);
835 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
837 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
839 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
841 
842 //===----------------------------------------------------------------------===//
843 // isinf builtins
844 //===----------------------------------------------------------------------===//
845 
846 /// \fn T isinf(T x)
847 /// \brief Determines if the specified value \a x is infinite.
848 /// \param x The specified input value.
849 ///
850 /// Returns a value of the same size as the input, with a value set
851 /// to True if the x parameter is +INF or -INF. Otherwise, False.
852 
853 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
854 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
855 bool isinf(half);
856 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
857 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
859 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
860 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
862 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
863 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
865 
866 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
867 bool isinf(float);
868 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
870 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
872 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
874 
875 //===----------------------------------------------------------------------===//
876 // lerp builtins
877 //===----------------------------------------------------------------------===//
878 
879 /// \fn T lerp(T x, T y, T s)
880 /// \brief Returns the linear interpolation of x to y by s.
881 /// \param x [in] The first-floating point value.
882 /// \param y [in] The second-floating point value.
883 /// \param s [in] A value that linearly interpolates between the x parameter and
884 /// the y parameter.
885 ///
886 /// Linear interpolation is based on the following formula: x*(1-s) + y*s which
887 /// can equivalently be written as x + s(y-x).
888 
889 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
890 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
891 half lerp(half, half, half);
892 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
893 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
895 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
896 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
898 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
899 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
901 
902 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
903 float lerp(float, float, float);
904 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
906 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
908 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
910 
911 //===----------------------------------------------------------------------===//
912 // length builtins
913 //===----------------------------------------------------------------------===//
914 
915 /// \fn T length(T x)
916 /// \brief Returns the length of the specified floating-point vector.
917 /// \param x [in] The vector of floats, or a scalar float.
918 ///
919 /// Length is based on the following formula: sqrt(x[0]^2 + x[1]^2 + …).
920 
921 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
922 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_length)
923 half length(half);
924 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
925 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_length)
926 half length(half2);
927 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
928 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_length)
929 half length(half3);
930 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
931 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_length)
932 half length(half4);
933 
934 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_length)
935 float length(float);
936 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_length)
937 float length(float2);
938 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_length)
939 float length(float3);
940 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_length)
941 float length(float4);
942 
943 //===----------------------------------------------------------------------===//
944 // log builtins
945 //===----------------------------------------------------------------------===//
946 
947 /// \fn T log(T Val)
948 /// \brief The base-e logarithm of the input value, \a Val parameter.
949 /// \param Val The input value.
950 ///
951 /// If \a Val is negative, this result is undefined. If \a Val is 0, this
952 /// function returns negative infinity.
953 
954 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
955 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
956 half log(half);
957 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
958 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
960 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
961 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
963 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
964 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
966 
967 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
968 float log(float);
969 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
971 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
973 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
975 
976 //===----------------------------------------------------------------------===//
977 // log10 builtins
978 //===----------------------------------------------------------------------===//
979 
980 /// \fn T log10(T Val)
981 /// \brief The base-10 logarithm of the input value, \a Val parameter.
982 /// \param Val The input value.
983 ///
984 /// If \a Val is negative, this result is undefined. If \a Val is 0, this
985 /// function returns negative infinity.
986 
987 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
988 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
989 half log10(half);
990 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
991 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
993 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
994 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
996 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
997 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
999 
1000 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1001 float log10(float);
1002 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1004 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1006 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1008 
1009 //===----------------------------------------------------------------------===//
1010 // log2 builtins
1011 //===----------------------------------------------------------------------===//
1012 
1013 /// \fn T log2(T Val)
1014 /// \brief The base-2 logarithm of the input value, \a Val parameter.
1015 /// \param Val The input value.
1016 ///
1017 /// If \a Val is negative, this result is undefined. If \a Val is 0, this
1018 /// function returns negative infinity.
1019 
1020 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1021 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1022 half log2(half);
1023 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1024 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1026 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1027 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1029 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1030 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1032 
1033 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1034 float log2(float);
1035 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1037 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1039 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1041 
1042 //===----------------------------------------------------------------------===//
1043 // mad builtins
1044 //===----------------------------------------------------------------------===//
1045 
1046 /// \fn T mad(T M, T A, T B)
1047 /// \brief The result of \a M * \a A + \a B.
1048 /// \param M The multiplication value.
1049 /// \param A The first addition value.
1050 /// \param B The second addition value.
1051 
1052 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1053 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1054 half mad(half, half, half);
1055 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1056 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1058 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1059 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1061 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1062 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1064 
1065 #ifdef __HLSL_ENABLE_16_BIT
1066 _HLSL_AVAILABILITY(shadermodel, 6.2)
1067 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1068 int16_t mad(int16_t, int16_t, int16_t);
1069 _HLSL_AVAILABILITY(shadermodel, 6.2)
1070 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1071 int16_t2 mad(int16_t2, int16_t2, int16_t2);
1072 _HLSL_AVAILABILITY(shadermodel, 6.2)
1073 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1074 int16_t3 mad(int16_t3, int16_t3, int16_t3);
1075 _HLSL_AVAILABILITY(shadermodel, 6.2)
1076 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1077 int16_t4 mad(int16_t4, int16_t4, int16_t4);
1078 
1079 _HLSL_AVAILABILITY(shadermodel, 6.2)
1080 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1081 uint16_t mad(uint16_t, uint16_t, uint16_t);
1082 _HLSL_AVAILABILITY(shadermodel, 6.2)
1083 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1084 uint16_t2 mad(uint16_t2, uint16_t2, uint16_t2);
1085 _HLSL_AVAILABILITY(shadermodel, 6.2)
1086 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1087 uint16_t3 mad(uint16_t3, uint16_t3, uint16_t3);
1088 _HLSL_AVAILABILITY(shadermodel, 6.2)
1089 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1090 uint16_t4 mad(uint16_t4, uint16_t4, uint16_t4);
1091 #endif
1092 
1093 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1094 int mad(int, int, int);
1095 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1097 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1099 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1101 
1102 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1104 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1106 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1108 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1110 
1111 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1113 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1115 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1117 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1119 
1120 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1122 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1124 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1126 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1128 
1129 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1130 float mad(float, float, float);
1131 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1133 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1135 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1137 
1138 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1139 double mad(double, double, double);
1140 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1142 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1144 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1146 
1147 //===----------------------------------------------------------------------===//
1148 // max builtins
1149 //===----------------------------------------------------------------------===//
1150 
1151 /// \fn T max(T X, T Y)
1152 /// \brief Return the greater of \a X and \a Y.
1153 /// \param X The X input value.
1154 /// \param Y The Y input value.
1155 
1156 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1157 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1158 half max(half, half);
1159 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1160 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1162 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1163 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1165 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1166 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1168 
1169 #ifdef __HLSL_ENABLE_16_BIT
1170 _HLSL_AVAILABILITY(shadermodel, 6.2)
1171 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1172 int16_t max(int16_t, int16_t);
1173 _HLSL_AVAILABILITY(shadermodel, 6.2)
1174 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1175 int16_t2 max(int16_t2, int16_t2);
1176 _HLSL_AVAILABILITY(shadermodel, 6.2)
1177 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1178 int16_t3 max(int16_t3, int16_t3);
1179 _HLSL_AVAILABILITY(shadermodel, 6.2)
1180 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1181 int16_t4 max(int16_t4, int16_t4);
1182 
1183 _HLSL_AVAILABILITY(shadermodel, 6.2)
1184 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1185 uint16_t max(uint16_t, uint16_t);
1186 _HLSL_AVAILABILITY(shadermodel, 6.2)
1187 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1188 uint16_t2 max(uint16_t2, uint16_t2);
1189 _HLSL_AVAILABILITY(shadermodel, 6.2)
1190 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1191 uint16_t3 max(uint16_t3, uint16_t3);
1192 _HLSL_AVAILABILITY(shadermodel, 6.2)
1193 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1194 uint16_t4 max(uint16_t4, uint16_t4);
1195 #endif
1196 
1197 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1198 int max(int, int);
1199 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1201 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1203 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1205 
1206 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1208 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1210 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1212 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1214 
1215 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1217 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1219 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1221 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1223 
1224 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1226 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1228 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1230 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1232 
1233 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1234 float max(float, float);
1235 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1237 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1239 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1241 
1242 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1243 double max(double, double);
1244 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1246 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1248 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1250 
1251 //===----------------------------------------------------------------------===//
1252 // min builtins
1253 //===----------------------------------------------------------------------===//
1254 
1255 /// \fn T min(T X, T Y)
1256 /// \brief Return the lesser of \a X and \a Y.
1257 /// \param X The X input value.
1258 /// \param Y The Y input value.
1259 
1260 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1261 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1262 half min(half, half);
1263 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1264 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1266 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1267 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1269 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1270 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1272 
1273 #ifdef __HLSL_ENABLE_16_BIT
1274 _HLSL_AVAILABILITY(shadermodel, 6.2)
1275 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1276 int16_t min(int16_t, int16_t);
1277 _HLSL_AVAILABILITY(shadermodel, 6.2)
1278 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1279 int16_t2 min(int16_t2, int16_t2);
1280 _HLSL_AVAILABILITY(shadermodel, 6.2)
1281 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1282 int16_t3 min(int16_t3, int16_t3);
1283 _HLSL_AVAILABILITY(shadermodel, 6.2)
1284 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1285 int16_t4 min(int16_t4, int16_t4);
1286 
1287 _HLSL_AVAILABILITY(shadermodel, 6.2)
1288 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1289 uint16_t min(uint16_t, uint16_t);
1290 _HLSL_AVAILABILITY(shadermodel, 6.2)
1291 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1292 uint16_t2 min(uint16_t2, uint16_t2);
1293 _HLSL_AVAILABILITY(shadermodel, 6.2)
1294 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1295 uint16_t3 min(uint16_t3, uint16_t3);
1296 _HLSL_AVAILABILITY(shadermodel, 6.2)
1297 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1298 uint16_t4 min(uint16_t4, uint16_t4);
1299 #endif
1300 
1301 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1302 int min(int, int);
1303 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1305 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1307 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1309 
1310 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1312 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1314 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1316 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1318 
1319 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1320 float min(float, float);
1321 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1323 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1325 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1327 
1328 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1330 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1332 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1334 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1336 
1337 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1339 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1341 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1343 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1345 
1346 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1347 double min(double, double);
1348 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1350 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1352 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1354 
1355 //===----------------------------------------------------------------------===//
1356 // normalize builtins
1357 //===----------------------------------------------------------------------===//
1358 
1359 /// \fn T normalize(T x)
1360 /// \brief Returns the normalized unit vector of the specified floating-point
1361 /// vector. \param x [in] The vector of floats.
1362 ///
1363 /// Normalize is based on the following formula: x / length(x).
1364 
1365 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1366 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1367 half normalize(half);
1368 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1369 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1371 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1372 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1374 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1375 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1377 
1378 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1379 float normalize(float);
1380 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1382 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1384 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1386 
1387 //===----------------------------------------------------------------------===//
1388 // pow builtins
1389 //===----------------------------------------------------------------------===//
1390 
1391 /// \fn T pow(T Val, T Pow)
1392 /// \brief Return the value \a Val, raised to the power \a Pow.
1393 /// \param Val The input value.
1394 /// \param Pow The specified power.
1395 
1396 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1397 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1398 half pow(half, half);
1399 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1400 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1402 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1403 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1405 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1406 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1408 
1409 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1410 float pow(float, float);
1411 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1413 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1415 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1417 
1418 //===----------------------------------------------------------------------===//
1419 // reversebits builtins
1420 //===----------------------------------------------------------------------===//
1421 
1422 /// \fn T reversebits(T Val)
1423 /// \brief Return the value \a Val with the bit order reversed.
1424 /// \param Val The input value.
1425 
1426 #ifdef __HLSL_ENABLE_16_BIT
1427 _HLSL_AVAILABILITY(shadermodel, 6.2)
1428 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1429 uint16_t reversebits(uint16_t);
1430 _HLSL_AVAILABILITY(shadermodel, 6.2)
1431 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1432 uint16_t2 reversebits(uint16_t2);
1433 _HLSL_AVAILABILITY(shadermodel, 6.2)
1434 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1435 uint16_t3 reversebits(uint16_t3);
1436 _HLSL_AVAILABILITY(shadermodel, 6.2)
1437 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1438 uint16_t4 reversebits(uint16_t4);
1439 #endif
1440 
1441 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1443 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1445 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1447 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1449 
1450 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1452 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1454 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1456 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1458 
1459 //===----------------------------------------------------------------------===//
1460 // rcp builtins
1461 //===----------------------------------------------------------------------===//
1462 
1463 /// \fn T rcp(T x)
1464 /// \brief Calculates a fast, approximate, per-component reciprocal ie 1 / \a x.
1465 /// \param x The specified input value.
1466 ///
1467 /// The return value is the reciprocal of the \a x parameter.
1468 
1469 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1470 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1471 half rcp(half);
1472 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1473 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1475 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1476 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1478 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1479 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1481 
1482 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1483 float rcp(float);
1484 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1486 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1488 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1490 
1491 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1492 double rcp(double);
1493 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1495 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1497 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1499 
1500 //===----------------------------------------------------------------------===//
1501 // rsqrt builtins
1502 //===----------------------------------------------------------------------===//
1503 
1504 /// \fn T rsqrt(T x)
1505 /// \brief Returns the reciprocal of the square root of the specified value.
1506 /// ie 1 / sqrt( \a x).
1507 /// \param x The specified input value.
1508 ///
1509 /// This function uses the following formula: 1 / sqrt(x).
1510 
1511 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1512 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1513 half rsqrt(half);
1514 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1515 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1517 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1518 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1520 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1521 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1523 
1524 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1525 float rsqrt(float);
1526 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1528 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1530 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1532 
1533 //===----------------------------------------------------------------------===//
1534 // round builtins
1535 //===----------------------------------------------------------------------===//
1536 
1537 /// \fn T round(T x)
1538 /// \brief Rounds the specified value \a x to the nearest integer.
1539 /// \param x The specified input value.
1540 ///
1541 /// The return value is the \a x parameter, rounded to the nearest integer
1542 /// within a floating-point type. Halfway cases are
1543 /// rounded to the nearest even value.
1544 
1545 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1546 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1547 half round(half);
1548 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1549 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1551 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1552 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1554 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1555 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1557 
1558 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1559 float round(float);
1560 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1562 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1564 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1566 
1567 //===----------------------------------------------------------------------===//
1568 // sin builtins
1569 //===----------------------------------------------------------------------===//
1570 
1571 /// \fn T sin(T Val)
1572 /// \brief Returns the sine of the input value, \a Val.
1573 /// \param Val The input value.
1574 
1575 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1576 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
1577 half sin(half);
1578 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1579 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
1581 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1582 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
1584 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1585 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
1587 
1588 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
1589 float sin(float);
1590 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
1592 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
1594 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
1596 
1597 //===----------------------------------------------------------------------===//
1598 // sinh builtins
1599 //===----------------------------------------------------------------------===//
1600 
1601 /// \fn T sinh(T Val)
1602 /// \brief Returns the hyperbolic sine of the input value, \a Val.
1603 /// \param Val The input value.
1604 
1605 #ifdef __HLSL_ENABLE_16_BIT
1606 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1607 half sinh(half);
1608 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1609 half2 sinh(half2);
1610 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1611 half3 sinh(half3);
1612 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1613 half4 sinh(half4);
1614 #endif
1615 
1616 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1617 float sinh(float);
1618 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1620 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1622 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
1624 
1625 //===----------------------------------------------------------------------===//
1626 // sqrt builtins
1627 //===----------------------------------------------------------------------===//
1628 
1629 /// \fn T sqrt(T Val)
1630 /// \brief Returns the square root of the input value, \a Val.
1631 /// \param Val The input value.
1632 
1633 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1634 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1635 half sqrt(half);
1636 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1637 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1639 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1640 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1642 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1643 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1645 
1646 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1647 float sqrt(float);
1648 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1650 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1652 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
1654 
1655 //===----------------------------------------------------------------------===//
1656 // tan builtins
1657 //===----------------------------------------------------------------------===//
1658 
1659 /// \fn T tan(T Val)
1660 /// \brief Returns the tangent of the input value, \a Val.
1661 /// \param Val The input value.
1662 
1663 #ifdef __HLSL_ENABLE_16_BIT
1664 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1665 half tan(half);
1666 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1667 half2 tan(half2);
1668 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1669 half3 tan(half3);
1670 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1671 half4 tan(half4);
1672 #endif
1673 
1674 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1675 float tan(float);
1676 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1678 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1680 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
1682 
1683 //===----------------------------------------------------------------------===//
1684 // tanh builtins
1685 //===----------------------------------------------------------------------===//
1686 
1687 /// \fn T tanh(T Val)
1688 /// \brief Returns the hyperbolic tangent of the input value, \a Val.
1689 /// \param Val The input value.
1690 
1691 #ifdef __HLSL_ENABLE_16_BIT
1692 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1693 half tanh(half);
1694 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1695 half2 tanh(half2);
1696 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1697 half3 tanh(half3);
1698 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1699 half4 tanh(half4);
1700 #endif
1701 
1702 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1703 float tanh(float);
1704 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1706 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1708 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
1710 
1711 //===----------------------------------------------------------------------===//
1712 // trunc builtins
1713 //===----------------------------------------------------------------------===//
1714 
1715 /// \fn T trunc(T Val)
1716 /// \brief Returns the truncated integer value of the input value, \a Val.
1717 /// \param Val The input value.
1718 
1719 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1720 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
1721 half trunc(half);
1722 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1723 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
1725 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1726 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
1728 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1729 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
1731 
1732 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
1733 float trunc(float);
1734 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
1736 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
1738 _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
1740 
1741 //===----------------------------------------------------------------------===//
1742 // Wave* builtins
1743 //===----------------------------------------------------------------------===//
1744 
1745 /// \brief Counts the number of boolean variables which evaluate to true across
1746 /// all active lanes in the current wave.
1747 ///
1748 /// \param Val The input boolean value.
1749 /// \return The number of lanes for which the boolean variable evaluates to
1750 /// true, across all active lanes in the current wave.
1751 _HLSL_AVAILABILITY(shadermodel, 6.0)
1752 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
1753 __attribute__((convergent)) uint WaveActiveCountBits(bool Val);
1754 
1755 /// \brief Returns the index of the current lane within the current wave.
1756 _HLSL_AVAILABILITY(shadermodel, 6.0)
1757 _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index)
1758 __attribute__((convergent)) uint WaveGetLaneIndex();
1759 
1760 } // namespace hlsl
1761 #endif //_HLSL_HLSL_INTRINSICS_H_
__device__ int
__device__ float
#define _HLSL_BUILTIN_ALIAS(builtin)
#define _HLSL_AVAILABILITY(platform, version)
#define _HLSL_16BIT_AVAILABILITY(environment, version)
unsigned int uint
half normalize(half)
vector< half, 4 > half4
half mad(half, half, half)
bool any(half)
vector< half, 2 > half2
__attribute__((convergent)) uint WaveActiveCountBits(bool Val)
Counts the number of boolean variables which evaluate to true across all active lanes in the current ...
float tan(float)
vector< uint, 2 > uint2
vector< int, 3 > int3
vector< uint64_t, 2 > uint64_t2
half rsqrt(half)
half max(half, half)
half abs(half)
vector< float, 4 > float4
half dot(half, half)
half sin(half)
vector< int64_t, 4 > int64_t4
unsigned long uint64_t
float asin(float)
vector< uint64_t, 3 > uint64_t3
float atan(float)
half lerp(half, half, half)
half pow(half, half)
vector< bool, 4 > bool4
long int64_t
vector< int64_t, 3 > int64_t3
vector< int, 4 > int4
half ceil(half)
vector< bool, 3 > bool3
half clamp(half, half, half)
vector< uint64_t, 4 > uint64_t4
half sqrt(half)
float tanh(float)
half cos(half)
vector< double, 3 > double3
vector< float, 2 > float2
vector< float, 3 > float3
half log(half)
vector< int64_t, 2 > int64_t2
half length(half)
vector< uint, 3 > uint3
half trunc(half)
half rcp(half)
half round(half)
vector< double, 4 > double4
vector< double, 2 > double2
half log10(half)
half exp2(half)
vector< bool, 2 > bool2
vector< int, 2 > int2
half min(half, half)
half log2(half)
vector< uint, 4 > uint4
vector< half, 3 > half3
half frac(half)
float cosh(float)
bool all(half)
half exp(half)
half floor(half)
bool isinf(half)
uint reversebits(uint)
float sinh(float)
float acos(float)