clang 23.0.0git
hlsl_alias_intrinsics.h
Go to the documentation of this file.
1//===--- hlsl_alias_intrinsics.h - HLSL alias 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_ALIAS_INTRINSICS_H_
10#define _HLSL_HLSL_ALIAS_INTRINSICS_H_
11
12namespace 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)
49int16_t abs(int16_t);
50_HLSL_AVAILABILITY(shadermodel, 6.2)
51_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
52int16_t2 abs(int16_t2);
53_HLSL_AVAILABILITY(shadermodel, 6.2)
54_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
55int16_t3 abs(int16_t3);
56_HLSL_AVAILABILITY(shadermodel, 6.2)
57_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
58int16_t4 abs(int16_t4);
59
60_HLSL_AVAILABILITY(shadermodel, 6.2)
61constexpr uint16_t abs(uint16_t V) { return V; }
62_HLSL_AVAILABILITY(shadermodel, 6.2)
63constexpr uint16_t2 abs(uint16_t2 V) { return V; }
64_HLSL_AVAILABILITY(shadermodel, 6.2)
65constexpr uint16_t3 abs(uint16_t3 V) { return V; }
66_HLSL_AVAILABILITY(shadermodel, 6.2)
67constexpr uint16_t4 abs(uint16_t4 V) { return V; }
68#endif
69
70_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
71_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
72half abs(half);
73_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
74_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
76_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
77_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
79_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
80_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
82
83_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
84int abs(int);
85_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
87_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
89_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
91
92constexpr uint abs(uint V) { return V; }
93constexpr uint2 abs(uint2 V) { return V; }
94constexpr uint3 abs(uint3 V) { return V; }
95constexpr uint4 abs(uint4 V) { return V; }
96
97_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
98float abs(float);
99_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
101_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
103_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
105
106_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
108_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
110_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
112_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
114
115constexpr uint64_t abs(uint64_t V) { return V; }
116constexpr uint64_t2 abs(uint64_t2 V) { return V; }
117constexpr uint64_t3 abs(uint64_t3 V) { return V; }
118constexpr uint64_t4 abs(uint64_t4 V) { return V; }
119
120_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
121double abs(double);
122_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
124_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
126_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
128
129//===----------------------------------------------------------------------===//
130// acos builtins
131//===----------------------------------------------------------------------===//
132
133/// \fn T acos(T Val)
134/// \brief Returns the arccosine of the input value, \a Val.
135/// \param Val The input value.
136
137_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
138_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
139half acos(half);
140_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
141_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
143_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
144_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
146_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
147_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
149
150_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
151float acos(float);
152_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
154_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
156_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
158
159//===----------------------------------------------------------------------===//
160// AddUint64 builtins
161//===----------------------------------------------------------------------===//
162
163/// \fn T AddUint64(T a, T b)
164/// \brief Implements unsigned 64-bit integer addition using pairs of unsigned
165/// 32-bit integers.
166/// \param x [in] The first unsigned 32-bit integer pair(s)
167/// \param y [in] The second unsigned 32-bit integer pair(s)
168///
169/// This function takes one or two pairs (low, high) of unsigned 32-bit integer
170/// values and returns pairs (low, high) of unsigned 32-bit integer
171/// values representing the result of unsigned 64-bit integer addition.
172
173_HLSL_AVAILABILITY(shadermodel, 6.0)
174_HLSL_BUILTIN_ALIAS(__builtin_hlsl_adduint64)
176_HLSL_AVAILABILITY(shadermodel, 6.0)
177_HLSL_BUILTIN_ALIAS(__builtin_hlsl_adduint64)
179
180//===----------------------------------------------------------------------===//
181// all builtins
182//===----------------------------------------------------------------------===//
183
184/// \fn bool all(T x)
185/// \brief Returns True if all components of the \a x parameter are non-zero;
186/// otherwise, false. \param x The input value.
187
188#ifdef __HLSL_ENABLE_16_BIT
189_HLSL_AVAILABILITY(shadermodel, 6.2)
190_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
191bool all(int16_t);
192_HLSL_AVAILABILITY(shadermodel, 6.2)
193_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
194bool all(int16_t2);
195_HLSL_AVAILABILITY(shadermodel, 6.2)
196_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
197bool all(int16_t3);
198_HLSL_AVAILABILITY(shadermodel, 6.2)
199_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
200bool all(int16_t4);
201_HLSL_AVAILABILITY(shadermodel, 6.2)
202_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
203bool all(uint16_t);
204_HLSL_AVAILABILITY(shadermodel, 6.2)
205_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
206bool all(uint16_t2);
207_HLSL_AVAILABILITY(shadermodel, 6.2)
208_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
209bool all(uint16_t3);
210_HLSL_AVAILABILITY(shadermodel, 6.2)
211_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
212bool all(uint16_t4);
213#endif
214
215_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
216_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
217bool all(half);
218_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
219_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
220bool all(half2);
221_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
222_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
223bool all(half3);
224_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
225_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
226bool all(half4);
227
228_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
229bool all(bool);
230_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
231bool all(bool2);
232_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
233bool all(bool3);
234_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
235bool all(bool4);
236_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
237
238_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
239bool all(int);
240_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
241bool all(int2);
242_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
243bool all(int3);
244_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
245bool all(int4);
246
247_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
248bool all(uint);
249_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
250bool all(uint2);
251_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
252bool all(uint3);
253_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
254bool all(uint4);
255
256_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
257bool all(float);
258_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
260_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
262_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
264
265_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
267_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
269_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
271_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
273
274_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
276_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
278_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
280_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
282
283_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
284bool all(double);
285_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
287_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
289_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
291
292//===----------------------------------------------------------------------===//
293// and builtins
294//===----------------------------------------------------------------------===//
295
296/// \fn bool and(bool x, bool y)
297/// \brief Logically ands two boolean vectors or matrices elementwise and
298/// produces a bool vector or matrix output.
299
300// TODO: Clean up clang-format marker once we've resolved
301// https://github.com/llvm/llvm-project/issues/127851
302//
303// clang-format off
304_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
305bool and(bool x, bool y);
306_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
308_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
310_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
312
313
314_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
316_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
318_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
320_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
322_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
324_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
326_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
328_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
330_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
332_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
334_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
336_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
338_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
340_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
342_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
344// clang-format on
345
346//===----------------------------------------------------------------------===//
347// any builtins
348//===----------------------------------------------------------------------===//
349
350/// \fn bool any(T x)
351/// \brief Returns True if any components of the \a x parameter are non-zero;
352/// otherwise, false. \param x The input value.
353
354#ifdef __HLSL_ENABLE_16_BIT
355_HLSL_AVAILABILITY(shadermodel, 6.2)
356_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
357bool any(int16_t);
358_HLSL_AVAILABILITY(shadermodel, 6.2)
359_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
360bool any(int16_t2);
361_HLSL_AVAILABILITY(shadermodel, 6.2)
362_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
363bool any(int16_t3);
364_HLSL_AVAILABILITY(shadermodel, 6.2)
365_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
366bool any(int16_t4);
367_HLSL_AVAILABILITY(shadermodel, 6.2)
368_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
369bool any(uint16_t);
370_HLSL_AVAILABILITY(shadermodel, 6.2)
371_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
372bool any(uint16_t2);
373_HLSL_AVAILABILITY(shadermodel, 6.2)
374_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
375bool any(uint16_t3);
376_HLSL_AVAILABILITY(shadermodel, 6.2)
377_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
378bool any(uint16_t4);
379#endif
380
381_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
382_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
383bool any(half);
384_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
385_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
386bool any(half2);
387_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
388_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
389bool any(half3);
390_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
391_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
392bool any(half4);
393
394_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
395bool any(bool);
396_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
397bool any(bool2);
398_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
399bool any(bool3);
400_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
401bool any(bool4);
402_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
403
404_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
405bool any(int);
406_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
407bool any(int2);
408_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
409bool any(int3);
410_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
411bool any(int4);
412
413_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
414bool any(uint);
415_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
416bool any(uint2);
417_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
418bool any(uint3);
419_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
420bool any(uint4);
421
422_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
423bool any(float);
424_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
426_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
428_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
430
431_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
433_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
435_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
437_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
439
440_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
442_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
444_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
446_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
448
449_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
450bool any(double);
451_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
453_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
455_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
457
458//===----------------------------------------------------------------------===//
459// asdouble builtins
460//===----------------------------------------------------------------------===//
461
462/// \fn double asdouble(uint LowBits, uint HighBits)
463/// \brief Reinterprets a cast value (two 32-bit values) into a double.
464/// \param LowBits The low 32-bit pattern of the input value.
465/// \param HighBits The high 32-bit pattern of the input value.
466
467_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
469_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
471_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
473_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
475
476//===----------------------------------------------------------------------===//
477// asin builtins
478//===----------------------------------------------------------------------===//
479
480/// \fn T asin(T Val)
481/// \brief Returns the arcsine of the input value, \a Val.
482/// \param Val The input value.
483
484_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
485_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
486half asin(half);
487_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
488_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
490_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
491_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
493_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
494_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
496
497_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
498float asin(float);
499_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
501_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
503_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
505
506//===----------------------------------------------------------------------===//
507// atan builtins
508//===----------------------------------------------------------------------===//
509
510/// \fn T atan(T Val)
511/// \brief Returns the arctangent of the input value, \a Val.
512/// \param Val The input value.
513
514_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
515_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
516half atan(half);
517_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
518_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
520_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
521_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
523_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
524_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
526
527_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
528float atan(float);
529_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
531_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
533_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
535
536//===----------------------------------------------------------------------===//
537// atan2 builtins
538//===----------------------------------------------------------------------===//
539
540/// \fn T atan2(T y, T x)
541/// \brief Returns the arctangent of y/x, using the signs of the arguments to
542/// determine the correct quadrant.
543/// \param y The y-coordinate.
544/// \param x The x-coordinate.
545
546_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
547_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
548half atan2(half y, half x);
549_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
550_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
552_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
553_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
555_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
556_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
558
559_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
560float atan2(float y, float x);
561_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
563_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
565_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
567
568//===----------------------------------------------------------------------===//
569// ceil builtins
570//===----------------------------------------------------------------------===//
571
572/// \fn T ceil(T Val)
573/// \brief Returns the smallest integer value that is greater than or equal to
574/// the input value, \a Val.
575/// \param Val The input value.
576
577_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
578_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
579half ceil(half);
580_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
581_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
583_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
584_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
586_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
587_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
589
590_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
591float ceil(float);
592_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
594_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
596_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
598
599//===----------------------------------------------------------------------===//
600// clamp builtins
601//===----------------------------------------------------------------------===//
602
603/// \fn T clamp(T X, T Min, T Max)
604/// \brief Clamps the specified value \a X to the specified
605/// minimum ( \a Min) and maximum ( \a Max) range.
606/// \param X A value to clamp.
607/// \param Min The specified minimum range.
608/// \param Max The specified maximum range.
609///
610/// Returns The clamped value for the \a X parameter.
611/// For values of -INF or INF, clamp will behave as expected.
612/// However for values of NaN, the results are undefined.
613
614_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
615_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
616half clamp(half, half, half);
617_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
618_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
620_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
621_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
623_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
624_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
626
627#ifdef __HLSL_ENABLE_16_BIT
628_HLSL_AVAILABILITY(shadermodel, 6.2)
629_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
630int16_t clamp(int16_t, int16_t, int16_t);
631_HLSL_AVAILABILITY(shadermodel, 6.2)
632_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
633int16_t2 clamp(int16_t2, int16_t2, int16_t2);
634_HLSL_AVAILABILITY(shadermodel, 6.2)
635_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
636int16_t3 clamp(int16_t3, int16_t3, int16_t3);
637_HLSL_AVAILABILITY(shadermodel, 6.2)
638_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
639int16_t4 clamp(int16_t4, int16_t4, int16_t4);
640
641_HLSL_AVAILABILITY(shadermodel, 6.2)
642_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
643uint16_t clamp(uint16_t, uint16_t, uint16_t);
644_HLSL_AVAILABILITY(shadermodel, 6.2)
645_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
646uint16_t2 clamp(uint16_t2, uint16_t2, uint16_t2);
647_HLSL_AVAILABILITY(shadermodel, 6.2)
648_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
649uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
650_HLSL_AVAILABILITY(shadermodel, 6.2)
651_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
652uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
653#endif
654
655_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
656int clamp(int, int, int);
657_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
659_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
661_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
663
664_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
666_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
668_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
670_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
672
673_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
675_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
677_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
679_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
681
682_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
684_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
686_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
688_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
690
691_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
692float clamp(float, float, float);
693_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
695_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
697_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
699
700_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
701double clamp(double, double, double);
702_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
704_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
706_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
708
709//===----------------------------------------------------------------------===//
710// clip builtins
711//===----------------------------------------------------------------------===//
712
713/// \fn void clip(T Val)
714/// \brief Discards the current pixel if the specified value is less than zero.
715/// \param Val The input value.
716
717_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
718void clip(float);
719_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
721_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
723_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
725
726//===----------------------------------------------------------------------===//
727// cos builtins
728//===----------------------------------------------------------------------===//
729
730/// \fn T cos(T Val)
731/// \brief Returns the cosine of the input value, \a Val.
732/// \param Val The input value.
733
734_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
735_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
736half cos(half);
737_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
738_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
740_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
741_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
743_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
744_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
746
747_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
748float cos(float);
749_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
751_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
753_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
755
756//===----------------------------------------------------------------------===//
757// cosh builtins
758//===----------------------------------------------------------------------===//
759
760/// \fn T cosh(T Val)
761/// \brief Returns the hyperbolic cosine of the input value, \a Val.
762/// \param Val The input value.
763
764_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
765_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
766half cosh(half);
767_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
768_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
770_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
771_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
773_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
774_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
776
777_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
778float cosh(float);
779_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
781_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
783_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
785
786//===----------------------------------------------------------------------===//
787// count bits builtins
788//===----------------------------------------------------------------------===//
789
790/// \fn T countbits(T Val)
791/// \brief Return the number of bits (per component) set in the input integer.
792/// \param Val The input value.
793
794#ifdef __HLSL_ENABLE_16_BIT
795_HLSL_AVAILABILITY(shadermodel, 6.2)
796const inline uint countbits(int16_t x) {
797 return __builtin_elementwise_popcount(x);
798}
799_HLSL_AVAILABILITY(shadermodel, 6.2)
800const inline uint2 countbits(int16_t2 x) {
801 return __builtin_elementwise_popcount(x);
802}
803_HLSL_AVAILABILITY(shadermodel, 6.2)
804const inline uint3 countbits(int16_t3 x) {
805 return __builtin_elementwise_popcount(x);
806}
807_HLSL_AVAILABILITY(shadermodel, 6.2)
808const inline uint4 countbits(int16_t4 x) {
809 return __builtin_elementwise_popcount(x);
810}
811_HLSL_AVAILABILITY(shadermodel, 6.2)
812const inline uint countbits(uint16_t x) {
813 return __builtin_elementwise_popcount(x);
814}
815_HLSL_AVAILABILITY(shadermodel, 6.2)
816const inline uint2 countbits(uint16_t2 x) {
817 return __builtin_elementwise_popcount(x);
818}
819_HLSL_AVAILABILITY(shadermodel, 6.2)
820const inline uint3 countbits(uint16_t3 x) {
821 return __builtin_elementwise_popcount(x);
822}
823_HLSL_AVAILABILITY(shadermodel, 6.2)
824const inline uint4 countbits(uint16_t4 x) {
825 return __builtin_elementwise_popcount(x);
826}
827#endif
828
829const inline uint countbits(int x) { return __builtin_elementwise_popcount(x); }
830const inline uint2 countbits(int2 x) {
831 return __builtin_elementwise_popcount(x);
832}
833const inline uint3 countbits(int3 x) {
834 return __builtin_elementwise_popcount(x);
835}
836const inline uint4 countbits(int4 x) {
837 return __builtin_elementwise_popcount(x);
838}
839
840const inline uint countbits(uint x) {
841 return __builtin_elementwise_popcount(x);
842}
843const inline uint2 countbits(uint2 x) {
844 return __builtin_elementwise_popcount(x);
845}
846const inline uint3 countbits(uint3 x) {
847 return __builtin_elementwise_popcount(x);
848}
849const inline uint4 countbits(uint4 x) {
850 return __builtin_elementwise_popcount(x);
851}
852
853const inline uint countbits(int64_t x) {
854 return __builtin_elementwise_popcount(x);
855}
856const inline uint2 countbits(int64_t2 x) {
857 return __builtin_elementwise_popcount(x);
858}
859const inline uint3 countbits(int64_t3 x) {
860 return __builtin_elementwise_popcount(x);
861}
862const inline uint4 countbits(int64_t4 x) {
863 return __builtin_elementwise_popcount(x);
864}
865
866const inline uint countbits(uint64_t x) {
867 return __builtin_elementwise_popcount(x);
868}
869const inline uint2 countbits(uint64_t2 x) {
870 return __builtin_elementwise_popcount(x);
871}
872const inline uint3 countbits(uint64_t3 x) {
873 return __builtin_elementwise_popcount(x);
874}
875const inline uint4 countbits(uint64_t4 x) {
876 return __builtin_elementwise_popcount(x);
877}
878
879//===----------------------------------------------------------------------===//
880// degrees builtins
881//===----------------------------------------------------------------------===//
882
883/// \fn T degrees(T x)
884/// \brief Converts the specified value from radians to degrees.
885/// \param x The specified input value.
886
887_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
888_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
889half degrees(half);
890_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
891_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
893_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
894_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
896_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
897_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
899
900_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
901float degrees(float);
902_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
904_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
906_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
908
909//===----------------------------------------------------------------------===//
910// dot product builtins
911//===----------------------------------------------------------------------===//
912
913/// \fn K dot(T X, T Y)
914/// \brief Return the dot product (a scalar value) of \a X and \a Y.
915/// \param X The X input value.
916/// \param Y The Y input value.
917
918_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
919_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
920half dot(half, half);
921_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
922_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
924_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
925_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
927_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
928_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
930
931#ifdef __HLSL_ENABLE_16_BIT
932_HLSL_AVAILABILITY(shadermodel, 6.2)
933_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
934int16_t dot(int16_t, int16_t);
935_HLSL_AVAILABILITY(shadermodel, 6.2)
936_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
937int16_t dot(int16_t2, int16_t2);
938_HLSL_AVAILABILITY(shadermodel, 6.2)
939_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
940int16_t dot(int16_t3, int16_t3);
941_HLSL_AVAILABILITY(shadermodel, 6.2)
942_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
943int16_t dot(int16_t4, int16_t4);
944
945_HLSL_AVAILABILITY(shadermodel, 6.2)
946_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
947uint16_t dot(uint16_t, uint16_t);
948_HLSL_AVAILABILITY(shadermodel, 6.2)
949_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
950uint16_t dot(uint16_t2, uint16_t2);
951_HLSL_AVAILABILITY(shadermodel, 6.2)
952_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
953uint16_t dot(uint16_t3, uint16_t3);
954_HLSL_AVAILABILITY(shadermodel, 6.2)
955_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
956uint16_t dot(uint16_t4, uint16_t4);
957#endif
958
959_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
960float dot(float, float);
961_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
963_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
965_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
967
968_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
969double dot(double, double);
970
971_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
972int dot(int, int);
973_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
975_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
977_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
979
980_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
982_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
984_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
986_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
988
989_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
991_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
993_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
995_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
997
998_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1000_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1002_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1004_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1006
1007//===----------------------------------------------------------------------===//
1008// dot4add builtins
1009//===----------------------------------------------------------------------===//
1010
1011/// \fn int dot4add_i8packed(uint A, uint B, int C)
1012
1013_HLSL_AVAILABILITY(shadermodel, 6.4)
1014_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot4add_i8packed)
1016
1017/// \fn uint dot4add_u8packed(uint A, uint B, uint C)
1018
1019_HLSL_AVAILABILITY(shadermodel, 6.4)
1020_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot4add_u8packed)
1022
1023//===----------------------------------------------------------------------===//
1024// exp builtins
1025//===----------------------------------------------------------------------===//
1026
1027/// \fn T exp(T x)
1028/// \brief Returns the base-e exponential, or \a e**x, of the specified value.
1029/// \param x The specified input value.
1030///
1031/// The return value is the base-e exponential of the \a x parameter.
1032
1033_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1034_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1035half exp(half);
1036_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1037_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1039_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1040_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1042_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1043_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1045
1046_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1047float exp(float);
1048_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1050_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1052_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1054
1055//===----------------------------------------------------------------------===//
1056// exp2 builtins
1057//===----------------------------------------------------------------------===//
1058
1059/// \fn T exp2(T x)
1060/// \brief Returns the base 2 exponential, or \a 2**x, of the specified value.
1061/// \param x The specified input value.
1062///
1063/// The base 2 exponential of the \a x parameter.
1064
1065_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1066_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1067half exp2(half);
1068_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1069_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1071_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1072_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1074_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1075_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1077
1078_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1079float exp2(float);
1080_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1082_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1084_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1086
1087//===----------------------------------------------------------------------===//
1088// f16tof32 builtins
1089//===----------------------------------------------------------------------===//
1090
1091/// \fn float f16tof32(uint x)
1092/// \brief Returns the half value stored in the low 16 bits of the uint arg
1093/// converted to a float.
1094/// \param x The uint containing two half values.
1095///
1096/// The float value of the half value found in the low 16 bits of the \a xi
1097/// parameter.
1098
1099_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1101_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1103_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1105_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1107
1108//===----------------------------------------------------------------------===//
1109// firstbitlow builtins
1110//===----------------------------------------------------------------------===//
1111
1112/// \fn T firstbitlow(T Val)
1113/// \brief Returns the location of the first set bit starting from the lowest
1114/// order bit and working upward, per component.
1115/// \param Val the input value.
1116
1117#ifdef __HLSL_ENABLE_16_BIT
1118_HLSL_AVAILABILITY(shadermodel, 6.2)
1119_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1120uint firstbitlow(int16_t);
1121_HLSL_AVAILABILITY(shadermodel, 6.2)
1122_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1123uint2 firstbitlow(int16_t2);
1124_HLSL_AVAILABILITY(shadermodel, 6.2)
1125_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1126uint3 firstbitlow(int16_t3);
1127_HLSL_AVAILABILITY(shadermodel, 6.2)
1128_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1129uint4 firstbitlow(int16_t4);
1130_HLSL_AVAILABILITY(shadermodel, 6.2)
1131_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1132uint firstbitlow(uint16_t);
1133_HLSL_AVAILABILITY(shadermodel, 6.2)
1134_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1135uint2 firstbitlow(uint16_t2);
1136_HLSL_AVAILABILITY(shadermodel, 6.2)
1137_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1138uint3 firstbitlow(uint16_t3);
1139_HLSL_AVAILABILITY(shadermodel, 6.2)
1140_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1141uint4 firstbitlow(uint16_t4);
1142#endif
1143
1144_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1146_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1148_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1150_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1152
1153_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1155_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1157_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1159_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1161
1162_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1164_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1166_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1168_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1170
1171_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1173_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1175_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1177_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1179
1180//===----------------------------------------------------------------------===//
1181// floor builtins
1182//===----------------------------------------------------------------------===//
1183
1184/// \fn T floor(T Val)
1185/// \brief Returns the largest integer that is less than or equal to the input
1186/// value, \a Val.
1187/// \param Val The input value.
1188
1189_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1190_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1191half floor(half);
1192_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1193_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1195_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1196_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1198_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1199_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1201
1202_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1203float floor(float);
1204_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1206_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1208_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1210
1211//===----------------------------------------------------------------------===//
1212// frac builtins
1213//===----------------------------------------------------------------------===//
1214
1215/// \fn T frac(T x)
1216/// \brief Returns the fractional (or decimal) part of x. \a x parameter.
1217/// \param x The specified input value.
1218///
1219/// If \a the return value is greater than or equal to 0 and less than 1.
1220
1221_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1222_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1223half frac(half);
1224_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1225_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1227_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1228_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1230_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1231_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1233
1234_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1235float frac(float);
1236_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1238_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1240_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1242
1243//===----------------------------------------------------------------------===//
1244// isinf builtins
1245//===----------------------------------------------------------------------===//
1246
1247/// \fn T isinf(T x)
1248/// \brief Determines if the specified value \a x is infinite.
1249/// \param x The specified input value.
1250///
1251/// Returns a value of the same size as the input, with a value set
1252/// to True if the x parameter is +INF or -INF. Otherwise, False.
1253
1254_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1255_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1256bool isinf(half);
1257_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1258_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1260_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1261_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1263_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1264_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1266
1267_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1268bool isinf(float);
1269_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1271_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1273_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1275
1276//===----------------------------------------------------------------------===//
1277// isnan builtins
1278//===----------------------------------------------------------------------===//
1279
1280/// \fn T isnan(T x)
1281/// \brief Determines if the specified value \a x is Not a Number.
1282/// \param x The specified input value.
1283///
1284/// Returns a value of the same size as the input, with a value set
1285/// to True if the x parameter is NaN or QNaN. Otherwise, False.
1286
1287_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1288_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1289bool isnan(half);
1290_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1291_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1293_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1294_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1296_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1297_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1299
1300_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1301bool isnan(float);
1302_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1304_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1306_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1308
1309//===----------------------------------------------------------------------===//
1310// lerp builtins
1311//===----------------------------------------------------------------------===//
1312
1313/// \fn T lerp(T x, T y, T s)
1314/// \brief Returns the linear interpolation of x to y by s.
1315/// \param x [in] The first-floating point value.
1316/// \param y [in] The second-floating point value.
1317/// \param s [in] A value that linearly interpolates between the x parameter and
1318/// the y parameter.
1319///
1320/// Linear interpolation is based on the following formula: x*(1-s) + y*s which
1321/// can equivalently be written as x + s(y-x).
1322
1323_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1324_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1325half lerp(half, half, half);
1326_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1327_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1329_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1330_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1332_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1333_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1335
1336_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1337float lerp(float, float, float);
1338_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1340_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1342_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1344
1345//===----------------------------------------------------------------------===//
1346// log builtins
1347//===----------------------------------------------------------------------===//
1348
1349/// \fn T log(T Val)
1350/// \brief The base-e logarithm of the input value, \a Val parameter.
1351/// \param Val The input value.
1352///
1353/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1354/// function returns negative infinity.
1355
1356_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1357_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1358half log(half);
1359_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1360_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1362_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1363_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1365_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1366_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1368
1369_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1370float log(float);
1371_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1373_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1375_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1377
1378//===----------------------------------------------------------------------===//
1379// log10 builtins
1380//===----------------------------------------------------------------------===//
1381
1382/// \fn T log10(T Val)
1383/// \brief The base-10 logarithm of the input value, \a Val parameter.
1384/// \param Val The input value.
1385///
1386/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1387/// function returns negative infinity.
1388
1389_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1390_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1391half log10(half);
1392_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1393_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1395_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1396_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1398_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1399_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1401
1402_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1403float log10(float);
1404_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1406_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1408_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1410
1411//===----------------------------------------------------------------------===//
1412// log2 builtins
1413//===----------------------------------------------------------------------===//
1414
1415/// \fn T log2(T Val)
1416/// \brief The base-2 logarithm of the input value, \a Val parameter.
1417/// \param Val The input value.
1418///
1419/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1420/// function returns negative infinity.
1421
1422_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1423_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1424half log2(half);
1425_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1426_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1428_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1429_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1431_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1432_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1434
1435_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1436float log2(float);
1437_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1439_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1441_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1443
1444//===----------------------------------------------------------------------===//
1445// mad builtins
1446//===----------------------------------------------------------------------===//
1447
1448/// \fn T mad(T M, T A, T B)
1449/// \brief The result of \a M * \a A + \a B.
1450/// \param M The multiplication value.
1451/// \param A The first addition value.
1452/// \param B The second addition value.
1453
1454_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1455_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1456half mad(half, half, half);
1457_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1458_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1460_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1461_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1463_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1464_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1466
1467#ifdef __HLSL_ENABLE_16_BIT
1468_HLSL_AVAILABILITY(shadermodel, 6.2)
1469_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1470int16_t mad(int16_t, int16_t, int16_t);
1471_HLSL_AVAILABILITY(shadermodel, 6.2)
1472_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1473int16_t2 mad(int16_t2, int16_t2, int16_t2);
1474_HLSL_AVAILABILITY(shadermodel, 6.2)
1475_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1476int16_t3 mad(int16_t3, int16_t3, int16_t3);
1477_HLSL_AVAILABILITY(shadermodel, 6.2)
1478_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1479int16_t4 mad(int16_t4, int16_t4, int16_t4);
1480
1481_HLSL_AVAILABILITY(shadermodel, 6.2)
1482_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1483uint16_t mad(uint16_t, uint16_t, uint16_t);
1484_HLSL_AVAILABILITY(shadermodel, 6.2)
1485_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1486uint16_t2 mad(uint16_t2, uint16_t2, uint16_t2);
1487_HLSL_AVAILABILITY(shadermodel, 6.2)
1488_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1489uint16_t3 mad(uint16_t3, uint16_t3, uint16_t3);
1490_HLSL_AVAILABILITY(shadermodel, 6.2)
1491_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1492uint16_t4 mad(uint16_t4, uint16_t4, uint16_t4);
1493#endif
1494
1495_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1496int mad(int, int, int);
1497_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1499_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1501_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1503
1504_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1506_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1508_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1510_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1512
1513_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1515_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1517_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1519_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1521
1522_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1524_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1526_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1528_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1530
1531_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1532float mad(float, float, float);
1533_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1535_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1537_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1539
1540_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1541double mad(double, double, double);
1542_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1544_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1546_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1548
1549//===----------------------------------------------------------------------===//
1550// max builtins
1551//===----------------------------------------------------------------------===//
1552
1553/// \fn T max(T X, T Y)
1554/// \brief Return the greater of \a X and \a Y.
1555/// \param X The X input value.
1556/// \param Y The Y input value.
1557
1558_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1559_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1560half max(half, half);
1561_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1562_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1564_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1565_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1567_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1568_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1570
1571#ifdef __HLSL_ENABLE_16_BIT
1572_HLSL_AVAILABILITY(shadermodel, 6.2)
1573_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1574int16_t max(int16_t, int16_t);
1575_HLSL_AVAILABILITY(shadermodel, 6.2)
1576_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1577int16_t2 max(int16_t2, int16_t2);
1578_HLSL_AVAILABILITY(shadermodel, 6.2)
1579_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1580int16_t3 max(int16_t3, int16_t3);
1581_HLSL_AVAILABILITY(shadermodel, 6.2)
1582_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1583int16_t4 max(int16_t4, int16_t4);
1584
1585_HLSL_AVAILABILITY(shadermodel, 6.2)
1586_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1587uint16_t max(uint16_t, uint16_t);
1588_HLSL_AVAILABILITY(shadermodel, 6.2)
1589_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1590uint16_t2 max(uint16_t2, uint16_t2);
1591_HLSL_AVAILABILITY(shadermodel, 6.2)
1592_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1593uint16_t3 max(uint16_t3, uint16_t3);
1594_HLSL_AVAILABILITY(shadermodel, 6.2)
1595_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1596uint16_t4 max(uint16_t4, uint16_t4);
1597#endif
1598
1599_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1600int max(int, int);
1601_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1603_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1605_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1607
1608_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1610_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1612_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1614_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1616
1617_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1619_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1621_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1623_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1625
1626_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1628_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1630_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1632_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1634
1635_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1636float max(float, float);
1637_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1639_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1641_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1643
1644_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1645double max(double, double);
1646_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1648_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1650_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1652
1653//===----------------------------------------------------------------------===//
1654// min builtins
1655//===----------------------------------------------------------------------===//
1656
1657/// \fn T min(T X, T Y)
1658/// \brief Return the lesser of \a X and \a Y.
1659/// \param X The X input value.
1660/// \param Y The Y input value.
1661
1662_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1663_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1664half min(half, half);
1665_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1666_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1668_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1669_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1671_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1672_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1674
1675#ifdef __HLSL_ENABLE_16_BIT
1676_HLSL_AVAILABILITY(shadermodel, 6.2)
1677_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1678int16_t min(int16_t, int16_t);
1679_HLSL_AVAILABILITY(shadermodel, 6.2)
1680_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1681int16_t2 min(int16_t2, int16_t2);
1682_HLSL_AVAILABILITY(shadermodel, 6.2)
1683_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1684int16_t3 min(int16_t3, int16_t3);
1685_HLSL_AVAILABILITY(shadermodel, 6.2)
1686_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1687int16_t4 min(int16_t4, int16_t4);
1688
1689_HLSL_AVAILABILITY(shadermodel, 6.2)
1690_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1691uint16_t min(uint16_t, uint16_t);
1692_HLSL_AVAILABILITY(shadermodel, 6.2)
1693_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1694uint16_t2 min(uint16_t2, uint16_t2);
1695_HLSL_AVAILABILITY(shadermodel, 6.2)
1696_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1697uint16_t3 min(uint16_t3, uint16_t3);
1698_HLSL_AVAILABILITY(shadermodel, 6.2)
1699_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1700uint16_t4 min(uint16_t4, uint16_t4);
1701#endif
1702
1703_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1704int min(int, int);
1705_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1707_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1709_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1711
1712_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1714_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1716_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1718_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1720
1721_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1722float min(float, float);
1723_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1725_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1727_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1729
1730_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1732_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1734_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1736_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1738
1739_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1741_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1743_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1745_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1747
1748_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1749double min(double, double);
1750_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1752_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1754_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1756
1757//===----------------------------------------------------------------------===//
1758// normalize builtins
1759//===----------------------------------------------------------------------===//
1760
1761/// \fn T normalize(T x)
1762/// \brief Returns the normalized unit vector of the specified floating-point
1763/// vector. \param x [in] The vector of floats.
1764///
1765/// Normalize is based on the following formula: x / length(x).
1766
1767_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1768_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1769half normalize(half);
1770_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1771_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1773_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1774_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1776_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1777_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1779
1780_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1781float normalize(float);
1782_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1784_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1786_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1788
1789//===----------------------------------------------------------------------===//
1790// or builtins
1791//===----------------------------------------------------------------------===//
1792
1793/// \fn bool or(bool x, bool y)
1794/// \brief Logically ors two boolean vectors or matrices elementwise and
1795/// produces a bool vector or matrix output.
1796
1797// TODO: Clean up clang-format marker once we've resolved
1798// https://github.com/llvm/llvm-project/issues/127851
1799//
1800// clang-format off
1801_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1802bool or(bool, bool);
1803_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1805_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1807_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1809
1810_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1812_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1814_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1816_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1818_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1820_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1822_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1824_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1826_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1828_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1830_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1832_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1834_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1836_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1838_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1840// clang-format on
1841
1842//===----------------------------------------------------------------------===//
1843// pow builtins
1844//===----------------------------------------------------------------------===//
1845
1846/// \fn T pow(T Val, T Pow)
1847/// \brief Return the value \a Val, raised to the power \a Pow.
1848/// \param Val The input value.
1849/// \param Pow The specified power.
1850
1851_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1852_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1853half pow(half, half);
1854_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1855_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1857_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1858_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1860_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1861_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1863
1864_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1865float pow(float, float);
1866_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1868_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1870_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1872
1873//===----------------------------------------------------------------------===//
1874// reversebits builtins
1875//===----------------------------------------------------------------------===//
1876
1877/// \fn T reversebits(T Val)
1878/// \brief Return the value \a Val with the bit order reversed.
1879/// \param Val The input value.
1880
1881#ifdef __HLSL_ENABLE_16_BIT
1882_HLSL_AVAILABILITY(shadermodel, 6.2)
1883_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1884uint16_t reversebits(uint16_t);
1885_HLSL_AVAILABILITY(shadermodel, 6.2)
1886_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1887uint16_t2 reversebits(uint16_t2);
1888_HLSL_AVAILABILITY(shadermodel, 6.2)
1889_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1890uint16_t3 reversebits(uint16_t3);
1891_HLSL_AVAILABILITY(shadermodel, 6.2)
1892_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1893uint16_t4 reversebits(uint16_t4);
1894#endif
1895
1896_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1898_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1900_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1902_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1904
1905_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1907_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1909_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1911_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1913
1914//===----------------------------------------------------------------------===//
1915// cross builtins
1916//===----------------------------------------------------------------------===//
1917
1918/// \fn T cross(T x, T y)
1919/// \brief Returns the cross product of two floating-point, 3D vectors.
1920/// \param x [in] The first floating-point, 3D vector.
1921/// \param y [in] The second floating-point, 3D vector.
1922///
1923/// Result is the cross product of x and y, i.e., the resulting
1924/// components are, in order :
1925/// x[1] * y[2] - y[1] * x[2]
1926/// x[2] * y[0] - y[2] * x[0]
1927/// x[0] * y[1] - y[0] * x[1]
1928
1929_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1930_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf16)
1932
1933_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf32)
1935
1936//===----------------------------------------------------------------------===//
1937// rcp builtins
1938//===----------------------------------------------------------------------===//
1939
1940/// \fn T rcp(T x)
1941/// \brief Calculates a fast, approximate, per-component reciprocal ie 1 / \a x.
1942/// \param x The specified input value.
1943///
1944/// The return value is the reciprocal of the \a x parameter.
1945
1946_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1947_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1948half rcp(half);
1949_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1950_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1952_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1953_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1955_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1956_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1958
1959_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1960float rcp(float);
1961_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1963_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1965_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1967
1968_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1969double rcp(double);
1970_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1972_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1974_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1976
1977//===----------------------------------------------------------------------===//
1978// rsqrt builtins
1979//===----------------------------------------------------------------------===//
1980
1981/// \fn T rsqrt(T x)
1982/// \brief Returns the reciprocal of the square root of the specified value.
1983/// ie 1 / sqrt( \a x).
1984/// \param x The specified input value.
1985///
1986/// This function uses the following formula: 1 / sqrt(x).
1987
1988_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1989_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1990half rsqrt(half);
1991_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1992_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1994_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1995_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1997_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1998_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2000
2001_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2002float rsqrt(float);
2003_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2005_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2007_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2009
2010//===----------------------------------------------------------------------===//
2011// round builtins
2012//===----------------------------------------------------------------------===//
2013
2014/// \fn T round(T x)
2015/// \brief Rounds the specified value \a x to the nearest integer.
2016/// \param x The specified input value.
2017///
2018/// The return value is the \a x parameter, rounded to the nearest integer
2019/// within a floating-point type. Halfway cases are
2020/// rounded to the nearest even value.
2021
2022_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2023_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2024half round(half);
2025_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2026_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2028_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2029_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2031_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2032_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2034
2035_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2036float round(float);
2037_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2039_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2041_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2043
2044//===----------------------------------------------------------------------===//
2045// saturate builtins
2046//===----------------------------------------------------------------------===//
2047
2048/// \fn T saturate(T Val)
2049/// \brief Returns input value, \a Val, clamped within the range of 0.0f
2050/// to 1.0f. \param Val The input value.
2051
2052_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2053_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2054half saturate(half);
2055_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2056_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2058_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2059_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2061_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2062_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2064
2065_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2066float saturate(float);
2067_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2069_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2071_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2073
2074_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2075double saturate(double);
2076_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2078_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2080_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2082
2083//===----------------------------------------------------------------------===//
2084// select builtins
2085//===----------------------------------------------------------------------===//
2086
2087/// \fn T select(bool Cond, T TrueVal, T FalseVal)
2088/// \brief ternary operator.
2089/// \param Cond The Condition input value.
2090/// \param TrueVal The Value returned if Cond is true.
2091/// \param FalseVal The Value returned if Cond is false.
2092
2093template <typename T>
2094_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2095T select(bool, T, T);
2096
2097/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2098/// vector<T,Sz> FalseVals)
2099/// \brief ternary operator for vectors. All vectors must be the same size.
2100/// \param Conds The Condition input values.
2101/// \param TrueVals The vector values are chosen from when conditions are true.
2102/// \param FalseVals The vector values are chosen from when conditions are
2103/// false.
2104
2105template <typename T>
2106_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2107vector<T, 2> select(vector<bool, 2>, vector<T, 2>, vector<T, 2>);
2108
2109template <typename T>
2110_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2111vector<T, 3> select(vector<bool, 3>, vector<T, 3>, vector<T, 3>);
2112
2113template <typename T>
2114_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2115vector<T, 4> select(vector<bool, 4>, vector<T, 4>, vector<T, 4>);
2116
2117/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, T TrueVal,
2118/// vector<T,Sz> FalseVals)
2119/// \brief ternary operator for vectors. All vectors must be the same size.
2120/// \param Conds The Condition input values.
2121/// \param TrueVal The scalar value to splat from when conditions are true.
2122/// \param FalseVals The vector values are chosen from when conditions are
2123/// false.
2124
2125template <typename T>
2126_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2127vector<T, 2> select(vector<bool, 2>, T, vector<T, 2>);
2128
2129template <typename T>
2130_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2131vector<T, 3> select(vector<bool, 3>, T, vector<T, 3>);
2132
2133template <typename T>
2134_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2135vector<T, 4> select(vector<bool, 4>, T, vector<T, 4>);
2136
2137/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2138/// T FalseVal)
2139/// \brief ternary operator for vectors. All vectors must be the same size.
2140/// \param Conds The Condition input values.
2141/// \param TrueVals The vector values are chosen from when conditions are true.
2142/// \param FalseVal The scalar value to splat from when conditions are false.
2143
2144template <typename T>
2145_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2146vector<T, 2> select(vector<bool, 2>, vector<T, 2>, T);
2147
2148template <typename T>
2149_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2150vector<T, 3> select(vector<bool, 3>, vector<T, 3>, T);
2151
2152template <typename T>
2153_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2154vector<T, 4> select(vector<bool, 4>, vector<T, 4>, T);
2155
2156/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2157/// T FalseVal)
2158/// \brief ternary operator for vectors. All vectors must be the same size.
2159/// \param Conds The Condition input values.
2160/// \param TrueVal The scalar value to splat from when conditions are true.
2161/// \param FalseVal The scalar value to splat from when conditions are false.
2162
2163template <typename T>
2164_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2165__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 2>> select(
2166 vector<bool, 2>, T, T);
2167
2168template <typename T>
2169_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2170__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 3>> select(
2171 vector<bool, 3>, T, T);
2172
2173template <typename T>
2174_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2175__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 4>> select(
2176 vector<bool, 4>, T, T);
2177
2178//===----------------------------------------------------------------------===//
2179// sin builtins
2180//===----------------------------------------------------------------------===//
2181
2182/// \fn T sin(T Val)
2183/// \brief Returns the sine of the input value, \a Val.
2184/// \param Val The input value.
2185
2186_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2187_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2188half sin(half);
2189_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2190_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2192_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2193_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2195_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2196_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2198
2199_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2200float sin(float);
2201_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2203_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2205_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2207
2208//===----------------------------------------------------------------------===//
2209// sinh builtins
2210//===----------------------------------------------------------------------===//
2211
2212/// \fn T sinh(T Val)
2213/// \brief Returns the hyperbolic sine of the input value, \a Val.
2214/// \param Val The input value.
2215
2216_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2217_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2218half sinh(half);
2219_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2220_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2222_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2223_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2225_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2226_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2228
2229_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2230float sinh(float);
2231_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2233_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2235_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2237
2238//===----------------------------------------------------------------------===//
2239// sqrt builtins
2240//===----------------------------------------------------------------------===//
2241
2242/// \fn T sqrt(T Val)
2243/// \brief Returns the square root of the input value, \a Val.
2244/// \param Val The input value.
2245
2246_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2247_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2248half sqrt(half);
2249_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2250_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2252_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2253_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2255_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2256_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2258
2259_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2260float sqrt(float);
2261_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2263_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2265_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2267
2268//===----------------------------------------------------------------------===//
2269// step builtins
2270//===----------------------------------------------------------------------===//
2271
2272/// \fn T step(T y, T x)
2273/// \brief Returns 1 if the x parameter is greater than or equal to the y
2274/// parameter; otherwise, 0. vector. \param y [in] The first floating-point
2275/// value to compare. \param x [in] The second floating-point value to compare.
2276///
2277/// Step is based on the following formula: (x >= y) ? 1 : 0
2278
2279_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2280_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2281half step(half, half);
2282_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2283_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2285_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2286_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2288_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2289_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2291
2292_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2293float step(float, float);
2294_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2296_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2298_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2300
2301//===----------------------------------------------------------------------===//
2302// tan builtins
2303//===----------------------------------------------------------------------===//
2304
2305/// \fn T tan(T Val)
2306/// \brief Returns the tangent of the input value, \a Val.
2307/// \param Val The input value.
2308
2309_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2310_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2311half tan(half);
2312_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2313_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2315_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2316_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2318_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2319_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2321
2322_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2323float tan(float);
2324_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2326_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2328_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2330
2331//===----------------------------------------------------------------------===//
2332// tanh builtins
2333//===----------------------------------------------------------------------===//
2334
2335/// \fn T tanh(T Val)
2336/// \brief Returns the hyperbolic tangent of the input value, \a Val.
2337/// \param Val The input value.
2338
2339_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2340_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2341half tanh(half);
2342_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2343_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2345_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2346_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2348_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2349_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2351
2352_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2353float tanh(float);
2354_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2356_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2358_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2360
2361//===----------------------------------------------------------------------===//
2362// trunc builtins
2363//===----------------------------------------------------------------------===//
2364
2365/// \fn T trunc(T Val)
2366/// \brief Returns the truncated integer value of the input value, \a Val.
2367/// \param Val The input value.
2368
2369_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2370_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2371half trunc(half);
2372_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2373_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2375_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2376_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2378_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2379_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2381
2382_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2383float trunc(float);
2384_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2386_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2388_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2390
2391//===----------------------------------------------------------------------===//
2392// Wave* builtins
2393//===----------------------------------------------------------------------===//
2394
2395/// \brief Returns true if the expression is true in all active lanes in the
2396/// current wave.
2397///
2398/// \param Val The boolean expression to evaluate.
2399/// \return True if the expression is true in all lanes.
2400_HLSL_AVAILABILITY(shadermodel, 6.0)
2401_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_true)
2402__attribute__((convergent)) bool WaveActiveAllTrue(bool Val);
2403
2404/// \brief Returns true if the expression is true in any active lane in the
2405/// current wave.
2406///
2407/// \param Val The boolean expression to evaluate.
2408/// \return True if the expression is true in any lane.
2409_HLSL_AVAILABILITY(shadermodel, 6.0)
2410_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_any_true)
2411__attribute__((convergent)) bool WaveActiveAnyTrue(bool Val);
2412
2413/// \brief Returns a uint4 containing a bitmask of the evaluation of the
2414/// boolean expression for all active lanes in the current wave.
2415/// The least-significant bit corresponds to the lane with index zero.
2416/// The bits corresponding to inactive lanes will be zero. The bits that
2417/// are greater than or equal to WaveGetLaneCount will be zero.
2418///
2419/// \param Val The boolean expression to evaluate.
2420/// \return uint4 bitmask
2421_HLSL_AVAILABILITY(shadermodel, 6.0)
2422_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_ballot)
2423__attribute__((convergent)) uint4 WaveActiveBallot(bool Val);
2424
2425/// \brief Counts the number of boolean variables which evaluate to true across
2426/// all active lanes in the current wave.
2427///
2428/// \param Val The input boolean value.
2429/// \return The number of lanes for which the boolean variable evaluates to
2430/// true, across all active lanes in the current wave.
2431_HLSL_AVAILABILITY(shadermodel, 6.0)
2432_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
2433__attribute__((convergent)) uint WaveActiveCountBits(bool Val);
2434
2435/// \brief Returns the index of the current lane within the current wave.
2436_HLSL_AVAILABILITY(shadermodel, 6.0)
2437_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index)
2438__attribute__((convergent)) uint WaveGetLaneIndex();
2439
2440_HLSL_AVAILABILITY(shadermodel, 6.0)
2441_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_is_first_lane)
2442__attribute__((convergent)) bool WaveIsFirstLane();
2443
2444_HLSL_AVAILABILITY(shadermodel, 6.0)
2445_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_count)
2446__attribute__((convergent)) uint WaveGetLaneCount();
2447
2448//===----------------------------------------------------------------------===//
2449// WaveReadLaneAt builtins
2450//===----------------------------------------------------------------------===//
2451
2452// \brief Returns the value of the expression for the given lane index within
2453// the specified wave.
2454
2455_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2456__attribute__((convergent)) bool WaveReadLaneAt(bool, uint32_t);
2457_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2458__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, uint32_t);
2459_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2460__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, uint32_t);
2461_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2462__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, uint32_t);
2463
2464#ifdef __HLSL_ENABLE_16_BIT
2465_HLSL_AVAILABILITY(shadermodel, 6.0)
2466_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2467__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, uint32_t);
2468_HLSL_AVAILABILITY(shadermodel, 6.0)
2469_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2470__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, uint32_t);
2471_HLSL_AVAILABILITY(shadermodel, 6.0)
2472_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2473__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, uint32_t);
2474_HLSL_AVAILABILITY(shadermodel, 6.0)
2475_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2476__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, uint32_t);
2477
2478_HLSL_AVAILABILITY(shadermodel, 6.0)
2479_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2480__attribute__((convergent)) uint16_t WaveReadLaneAt(uint16_t, uint32_t);
2481_HLSL_AVAILABILITY(shadermodel, 6.0)
2482_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2483__attribute__((convergent)) uint16_t2 WaveReadLaneAt(uint16_t2, uint32_t);
2484_HLSL_AVAILABILITY(shadermodel, 6.0)
2485_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2486__attribute__((convergent)) uint16_t3 WaveReadLaneAt(uint16_t3, uint32_t);
2487_HLSL_AVAILABILITY(shadermodel, 6.0)
2488_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2489__attribute__((convergent)) uint16_t4 WaveReadLaneAt(uint16_t4, uint32_t);
2490#endif
2491
2492_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2493_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2494__attribute__((convergent)) half WaveReadLaneAt(half, uint32_t);
2495_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2496_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2497__attribute__((convergent)) half2 WaveReadLaneAt(half2, uint32_t);
2498_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2499_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2500__attribute__((convergent)) half3 WaveReadLaneAt(half3, uint32_t);
2501_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2502_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2503__attribute__((convergent)) half4 WaveReadLaneAt(half4, uint32_t);
2504
2505_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2506__attribute__((convergent)) int WaveReadLaneAt(int, uint32_t);
2507_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2508__attribute__((convergent)) int2 WaveReadLaneAt(int2, uint32_t);
2509_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2510__attribute__((convergent)) int3 WaveReadLaneAt(int3, uint32_t);
2511_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2512__attribute__((convergent)) int4 WaveReadLaneAt(int4, uint32_t);
2513
2514_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2515__attribute__((convergent)) uint WaveReadLaneAt(uint, uint32_t);
2516_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2517__attribute__((convergent)) uint2 WaveReadLaneAt(uint2, uint32_t);
2518_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2519__attribute__((convergent)) uint3 WaveReadLaneAt(uint3, uint32_t);
2520_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2521__attribute__((convergent)) uint4 WaveReadLaneAt(uint4, uint32_t);
2522
2523_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2524__attribute__((convergent)) float WaveReadLaneAt(float, uint32_t);
2525_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2526__attribute__((convergent)) float2 WaveReadLaneAt(float2, uint32_t);
2527_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2528__attribute__((convergent)) float3 WaveReadLaneAt(float3, uint32_t);
2529_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2530__attribute__((convergent)) float4 WaveReadLaneAt(float4, uint32_t);
2531
2532_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2533__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, uint32_t);
2534_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2535__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, uint32_t);
2536_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2537__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, uint32_t);
2538_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2539__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, uint32_t);
2540
2541_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2542__attribute__((convergent)) uint64_t WaveReadLaneAt(uint64_t, uint32_t);
2543_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2544__attribute__((convergent)) uint64_t2 WaveReadLaneAt(uint64_t2, uint32_t);
2545_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2546__attribute__((convergent)) uint64_t3 WaveReadLaneAt(uint64_t3, uint32_t);
2547_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2548__attribute__((convergent)) uint64_t4 WaveReadLaneAt(uint64_t4, uint32_t);
2549
2550_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2551__attribute__((convergent)) double WaveReadLaneAt(double, uint32_t);
2552_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2553__attribute__((convergent)) double2 WaveReadLaneAt(double2, uint32_t);
2554_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2555__attribute__((convergent)) double3 WaveReadLaneAt(double3, uint32_t);
2556_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2557__attribute__((convergent)) double4 WaveReadLaneAt(double4, uint32_t);
2558
2559//===----------------------------------------------------------------------===//
2560// WaveActiveMax builtins
2561//===----------------------------------------------------------------------===//
2562
2563_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2564_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2565__attribute__((convergent)) half WaveActiveMax(half);
2566_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2567_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2568__attribute__((convergent)) half2 WaveActiveMax(half2);
2569_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2570_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2571__attribute__((convergent)) half3 WaveActiveMax(half3);
2572_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2573_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2574__attribute__((convergent)) half4 WaveActiveMax(half4);
2575
2576#ifdef __HLSL_ENABLE_16_BIT
2577_HLSL_AVAILABILITY(shadermodel, 6.0)
2578_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2579__attribute__((convergent)) int16_t WaveActiveMax(int16_t);
2580_HLSL_AVAILABILITY(shadermodel, 6.0)
2581_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2582__attribute__((convergent)) int16_t2 WaveActiveMax(int16_t2);
2583_HLSL_AVAILABILITY(shadermodel, 6.0)
2584_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2585__attribute__((convergent)) int16_t3 WaveActiveMax(int16_t3);
2586_HLSL_AVAILABILITY(shadermodel, 6.0)
2587_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2588__attribute__((convergent)) int16_t4 WaveActiveMax(int16_t4);
2589
2590_HLSL_AVAILABILITY(shadermodel, 6.0)
2591_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2592__attribute__((convergent)) uint16_t WaveActiveMax(uint16_t);
2593_HLSL_AVAILABILITY(shadermodel, 6.0)
2594_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2595__attribute__((convergent)) uint16_t2 WaveActiveMax(uint16_t2);
2596_HLSL_AVAILABILITY(shadermodel, 6.0)
2597_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2598__attribute__((convergent)) uint16_t3 WaveActiveMax(uint16_t3);
2599_HLSL_AVAILABILITY(shadermodel, 6.0)
2600_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2601__attribute__((convergent)) uint16_t4 WaveActiveMax(uint16_t4);
2602#endif
2603
2604_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2605__attribute__((convergent)) int WaveActiveMax(int);
2606_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2607__attribute__((convergent)) int2 WaveActiveMax(int2);
2608_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2609__attribute__((convergent)) int3 WaveActiveMax(int3);
2610_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2611__attribute__((convergent)) int4 WaveActiveMax(int4);
2612
2613_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2614__attribute__((convergent)) uint WaveActiveMax(uint);
2615_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2616__attribute__((convergent)) uint2 WaveActiveMax(uint2);
2617_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2618__attribute__((convergent)) uint3 WaveActiveMax(uint3);
2619_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2620__attribute__((convergent)) uint4 WaveActiveMax(uint4);
2621
2622_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2623__attribute__((convergent)) int64_t WaveActiveMax(int64_t);
2624_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2625__attribute__((convergent)) int64_t2 WaveActiveMax(int64_t2);
2626_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2627__attribute__((convergent)) int64_t3 WaveActiveMax(int64_t3);
2628_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2629__attribute__((convergent)) int64_t4 WaveActiveMax(int64_t4);
2630
2631_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2632__attribute__((convergent)) uint64_t WaveActiveMax(uint64_t);
2633_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2634__attribute__((convergent)) uint64_t2 WaveActiveMax(uint64_t2);
2635_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2636__attribute__((convergent)) uint64_t3 WaveActiveMax(uint64_t3);
2637_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2638__attribute__((convergent)) uint64_t4 WaveActiveMax(uint64_t4);
2639
2640_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2641__attribute__((convergent)) float WaveActiveMax(float);
2642_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2643__attribute__((convergent)) float2 WaveActiveMax(float2);
2644_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2645__attribute__((convergent)) float3 WaveActiveMax(float3);
2646_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2647__attribute__((convergent)) float4 WaveActiveMax(float4);
2648
2649_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2650__attribute__((convergent)) double WaveActiveMax(double);
2651_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2652__attribute__((convergent)) double2 WaveActiveMax(double2);
2653_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2654__attribute__((convergent)) double3 WaveActiveMax(double3);
2655_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2656__attribute__((convergent)) double4 WaveActiveMax(double4);
2657
2658//===----------------------------------------------------------------------===//
2659// WaveActiveMin builtins
2660//===----------------------------------------------------------------------===//
2661
2662_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2663_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2664__attribute__((convergent)) half WaveActiveMin(half);
2665_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2666_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2667__attribute__((convergent)) half2 WaveActiveMin(half2);
2668_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2669_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2670__attribute__((convergent)) half3 WaveActiveMin(half3);
2671_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2672_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2673__attribute__((convergent)) half4 WaveActiveMin(half4);
2674
2675#ifdef __HLSL_ENABLE_16_BIT
2676_HLSL_AVAILABILITY(shadermodel, 6.0)
2677_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2678__attribute__((convergent)) int16_t WaveActiveMin(int16_t);
2679_HLSL_AVAILABILITY(shadermodel, 6.0)
2680_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2681__attribute__((convergent)) int16_t2 WaveActiveMin(int16_t2);
2682_HLSL_AVAILABILITY(shadermodel, 6.0)
2683_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2684__attribute__((convergent)) int16_t3 WaveActiveMin(int16_t3);
2685_HLSL_AVAILABILITY(shadermodel, 6.0)
2686_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2687__attribute__((convergent)) int16_t4 WaveActiveMin(int16_t4);
2688
2689_HLSL_AVAILABILITY(shadermodel, 6.0)
2690_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2691__attribute__((convergent)) uint16_t WaveActiveMin(uint16_t);
2692_HLSL_AVAILABILITY(shadermodel, 6.0)
2693_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2694__attribute__((convergent)) uint16_t2 WaveActiveMin(uint16_t2);
2695_HLSL_AVAILABILITY(shadermodel, 6.0)
2696_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2697__attribute__((convergent)) uint16_t3 WaveActiveMin(uint16_t3);
2698_HLSL_AVAILABILITY(shadermodel, 6.0)
2699_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2700__attribute__((convergent)) uint16_t4 WaveActiveMin(uint16_t4);
2701#endif
2702
2703_HLSL_AVAILABILITY(shadermodel, 6.0)
2704_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2705__attribute__((convergent)) int WaveActiveMin(int);
2706_HLSL_AVAILABILITY(shadermodel, 6.0)
2707_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2708__attribute__((convergent)) int2 WaveActiveMin(int2);
2709_HLSL_AVAILABILITY(shadermodel, 6.0)
2710_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2711__attribute__((convergent)) int3 WaveActiveMin(int3);
2712_HLSL_AVAILABILITY(shadermodel, 6.0)
2713_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2714__attribute__((convergent)) int4 WaveActiveMin(int4);
2715
2716_HLSL_AVAILABILITY(shadermodel, 6.0)
2717_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2718__attribute__((convergent)) uint WaveActiveMin(uint);
2719_HLSL_AVAILABILITY(shadermodel, 6.0)
2720_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2721__attribute__((convergent)) uint2 WaveActiveMin(uint2);
2722_HLSL_AVAILABILITY(shadermodel, 6.0)
2723_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2724__attribute__((convergent)) uint3 WaveActiveMin(uint3);
2725_HLSL_AVAILABILITY(shadermodel, 6.0)
2726_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2727__attribute__((convergent)) uint4 WaveActiveMin(uint4);
2728
2729_HLSL_AVAILABILITY(shadermodel, 6.0)
2730_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2731__attribute__((convergent)) int64_t WaveActiveMin(int64_t);
2732_HLSL_AVAILABILITY(shadermodel, 6.0)
2733_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2734__attribute__((convergent)) int64_t2 WaveActiveMin(int64_t2);
2735_HLSL_AVAILABILITY(shadermodel, 6.0)
2736_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2737__attribute__((convergent)) int64_t3 WaveActiveMin(int64_t3);
2738_HLSL_AVAILABILITY(shadermodel, 6.0)
2739_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2740__attribute__((convergent)) int64_t4 WaveActiveMin(int64_t4);
2741
2742_HLSL_AVAILABILITY(shadermodel, 6.0)
2743_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2744__attribute__((convergent)) uint64_t WaveActiveMin(uint64_t);
2745_HLSL_AVAILABILITY(shadermodel, 6.0)
2746_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2747__attribute__((convergent)) uint64_t2 WaveActiveMin(uint64_t2);
2748_HLSL_AVAILABILITY(shadermodel, 6.0)
2749_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2750__attribute__((convergent)) uint64_t3 WaveActiveMin(uint64_t3);
2751_HLSL_AVAILABILITY(shadermodel, 6.0)
2752_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2753__attribute__((convergent)) uint64_t4 WaveActiveMin(uint64_t4);
2754
2755_HLSL_AVAILABILITY(shadermodel, 6.0)
2756_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2757__attribute__((convergent)) float WaveActiveMin(float);
2758_HLSL_AVAILABILITY(shadermodel, 6.0)
2759_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2760__attribute__((convergent)) float2 WaveActiveMin(float2);
2761_HLSL_AVAILABILITY(shadermodel, 6.0)
2762_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2763__attribute__((convergent)) float3 WaveActiveMin(float3);
2764_HLSL_AVAILABILITY(shadermodel, 6.0)
2765_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2766__attribute__((convergent)) float4 WaveActiveMin(float4);
2767
2768_HLSL_AVAILABILITY(shadermodel, 6.0)
2769_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2770__attribute__((convergent)) double WaveActiveMin(double);
2771_HLSL_AVAILABILITY(shadermodel, 6.0)
2772_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2773__attribute__((convergent)) double2 WaveActiveMin(double2);
2774_HLSL_AVAILABILITY(shadermodel, 6.0)
2775_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2776__attribute__((convergent)) double3 WaveActiveMin(double3);
2777_HLSL_AVAILABILITY(shadermodel, 6.0)
2778_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2779__attribute__((convergent)) double4 WaveActiveMin(double4);
2780
2781//===----------------------------------------------------------------------===//
2782// WaveActiveSum builtins
2783//===----------------------------------------------------------------------===//
2784
2785_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2786_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2787__attribute__((convergent)) half WaveActiveSum(half);
2788_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2789_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2790__attribute__((convergent)) half2 WaveActiveSum(half2);
2791_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2792_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2793__attribute__((convergent)) half3 WaveActiveSum(half3);
2794_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2795_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2796__attribute__((convergent)) half4 WaveActiveSum(half4);
2797
2798#ifdef __HLSL_ENABLE_16_BIT
2799_HLSL_AVAILABILITY(shadermodel, 6.0)
2800_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2801__attribute__((convergent)) int16_t WaveActiveSum(int16_t);
2802_HLSL_AVAILABILITY(shadermodel, 6.0)
2803_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2804__attribute__((convergent)) int16_t2 WaveActiveSum(int16_t2);
2805_HLSL_AVAILABILITY(shadermodel, 6.0)
2806_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2807__attribute__((convergent)) int16_t3 WaveActiveSum(int16_t3);
2808_HLSL_AVAILABILITY(shadermodel, 6.0)
2809_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2810__attribute__((convergent)) int16_t4 WaveActiveSum(int16_t4);
2811
2812_HLSL_AVAILABILITY(shadermodel, 6.0)
2813_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2814__attribute__((convergent)) uint16_t WaveActiveSum(uint16_t);
2815_HLSL_AVAILABILITY(shadermodel, 6.0)
2816_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2817__attribute__((convergent)) uint16_t2 WaveActiveSum(uint16_t2);
2818_HLSL_AVAILABILITY(shadermodel, 6.0)
2819_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2820__attribute__((convergent)) uint16_t3 WaveActiveSum(uint16_t3);
2821_HLSL_AVAILABILITY(shadermodel, 6.0)
2822_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2823__attribute__((convergent)) uint16_t4 WaveActiveSum(uint16_t4);
2824#endif
2825
2826_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2827__attribute__((convergent)) int WaveActiveSum(int);
2828_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2829__attribute__((convergent)) int2 WaveActiveSum(int2);
2830_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2831__attribute__((convergent)) int3 WaveActiveSum(int3);
2832_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2833__attribute__((convergent)) int4 WaveActiveSum(int4);
2834
2835_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2836__attribute__((convergent)) uint WaveActiveSum(uint);
2837_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2838__attribute__((convergent)) uint2 WaveActiveSum(uint2);
2839_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2840__attribute__((convergent)) uint3 WaveActiveSum(uint3);
2841_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2842__attribute__((convergent)) uint4 WaveActiveSum(uint4);
2843
2844_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2845__attribute__((convergent)) int64_t WaveActiveSum(int64_t);
2846_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2847__attribute__((convergent)) int64_t2 WaveActiveSum(int64_t2);
2848_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2849__attribute__((convergent)) int64_t3 WaveActiveSum(int64_t3);
2850_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2851__attribute__((convergent)) int64_t4 WaveActiveSum(int64_t4);
2852
2853_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2854__attribute__((convergent)) uint64_t WaveActiveSum(uint64_t);
2855_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2856__attribute__((convergent)) uint64_t2 WaveActiveSum(uint64_t2);
2857_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2858__attribute__((convergent)) uint64_t3 WaveActiveSum(uint64_t3);
2859_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2860__attribute__((convergent)) uint64_t4 WaveActiveSum(uint64_t4);
2861
2862_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2863__attribute__((convergent)) float WaveActiveSum(float);
2864_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2865__attribute__((convergent)) float2 WaveActiveSum(float2);
2866_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2867__attribute__((convergent)) float3 WaveActiveSum(float3);
2868_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2869__attribute__((convergent)) float4 WaveActiveSum(float4);
2870
2871_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2872__attribute__((convergent)) double WaveActiveSum(double);
2873_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2874__attribute__((convergent)) double2 WaveActiveSum(double2);
2875_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2876__attribute__((convergent)) double3 WaveActiveSum(double3);
2877_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2878__attribute__((convergent)) double4 WaveActiveSum(double4);
2879
2880//===----------------------------------------------------------------------===//
2881// sign builtins
2882//===----------------------------------------------------------------------===//
2883
2884/// \fn T sign(T Val)
2885/// \brief Returns -1 if \a Val is less than zero; 0 if \a Val equals zero; and
2886/// 1 if \a Val is greater than zero. \param Val The input value.
2887
2888#ifdef __HLSL_ENABLE_16_BIT
2889_HLSL_AVAILABILITY(shadermodel, 6.2)
2890_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2891int sign(int16_t);
2892_HLSL_AVAILABILITY(shadermodel, 6.2)
2893_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2894int2 sign(int16_t2);
2895_HLSL_AVAILABILITY(shadermodel, 6.2)
2896_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2897int3 sign(int16_t3);
2898_HLSL_AVAILABILITY(shadermodel, 6.2)
2899_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2900int4 sign(int16_t4);
2901
2902_HLSL_AVAILABILITY(shadermodel, 6.2)
2903_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2904int sign(uint16_t);
2905_HLSL_AVAILABILITY(shadermodel, 6.2)
2906_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2907int2 sign(uint16_t2);
2908_HLSL_AVAILABILITY(shadermodel, 6.2)
2909_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2910int3 sign(uint16_t3);
2911_HLSL_AVAILABILITY(shadermodel, 6.2)
2912_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2913int4 sign(uint16_t4);
2914#endif
2915
2916_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2917_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2918int sign(half);
2919_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2920_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2922_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2923_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2925_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2926_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2928
2929_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2930int sign(int);
2931_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2933_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2935_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2937
2938_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2940_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2942_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2944_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2946
2947_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2948int sign(float);
2949_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2951_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2953_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2955
2956_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2958_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2960_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2962_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2964
2965_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2967_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2969_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2971_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2973
2974_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2975int sign(double);
2976_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2978_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2980_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2982
2983//===----------------------------------------------------------------------===//
2984// radians builtins
2985//===----------------------------------------------------------------------===//
2986
2987/// \fn T radians(T Val)
2988/// \brief Converts the specified value from degrees to radians.
2989
2990_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2991_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2992half radians(half);
2993_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2994_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2996_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2997_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2999_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3000_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3002
3003_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3004float radians(float);
3005_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3007_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3009_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3011
3012//===----------------------------------------------------------------------===//
3013// GroupMemoryBarrierWithGroupSync builtins
3014//===----------------------------------------------------------------------===//
3015
3016/// \fn void GroupMemoryBarrierWithGroupSync(void)
3017/// \brief Blocks execution of all threads in a group until all group shared
3018/// accesses have been completed and all threads in the group have reached this
3019/// call.
3020
3021_HLSL_BUILTIN_ALIAS(__builtin_hlsl_group_memory_barrier_with_group_sync)
3022__attribute__((convergent)) void GroupMemoryBarrierWithGroupSync(void);
3023
3024//===----------------------------------------------------------------------===//
3025// ddx_coarse builtin
3026//===----------------------------------------------------------------------===//
3027
3028/// \fn T ddx_coarse(T value)
3029/// \brief Computes a low precision partial derivative with respect to the
3030/// screen-space x-coordinate.
3031/// \param value The input value.
3032///
3033/// The return value is a floating point scalar or vector containing the low
3034/// prevision partial derivative of the input value.
3035
3036_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3037_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3038half ddx_coarse(half);
3039_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3040_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3042_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3043_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3045_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3046_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3048
3049_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3050float ddx_coarse(float);
3051_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3053_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3055_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3057
3058//===----------------------------------------------------------------------===//
3059// ddy_coarse builtin
3060//===----------------------------------------------------------------------===//
3061
3062/// \fn T ddy_coarse(T value)
3063/// \brief Computes a low precision partial derivative with respect to the
3064/// screen-space y-coordinate.
3065/// \param value The input value.
3066///
3067/// The return value is a floating point scalar or vector containing the low
3068/// prevision partial derivative of the input value.
3069
3070_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3071_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3072half ddy_coarse(half);
3073_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3074_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3076_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3077_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3079_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3080_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3082
3083_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3084float ddy_coarse(float);
3085_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3087_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3089_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3091
3092//===----------------------------------------------------------------------===//
3093// ddx_fine builtin
3094//===----------------------------------------------------------------------===//
3095
3096/// \fn T ddx_fine(T value)
3097/// \brief Computes a high precision partial derivative with respect to the
3098/// screen-space x-coordinate.
3099/// \param value The input value.
3100///
3101/// The return value is a floating point scalar or vector containing the high
3102/// prevision partial derivative of the input value.
3103
3104_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3105_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3106half ddx_fine(half);
3107_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3108_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3110_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3111_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3113_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3114_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3116
3117_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3118float ddx_fine(float);
3119_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3121_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3123_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3125
3126//===----------------------------------------------------------------------===//
3127// ddy_fine builtin
3128//===----------------------------------------------------------------------===//
3129
3130/// \fn T ddy_fine(T value)
3131/// \brief Computes a high precision partial derivative with respect to the
3132/// screen-space y-coordinate.
3133/// \param value The input value.
3134///
3135/// The return value is a floating point scalar or vector containing the high
3136/// prevision partial derivative of the input value.
3137
3138_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3139_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3140half ddy_fine(half);
3141_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3142_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3144_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3145_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3147_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3148_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3150
3151_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3152float ddy_fine(float);
3153_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3155_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3157_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3159
3160} // namespace hlsl
3161#endif //_HLSL_HLSL_ALIAS_INTRINSICS_H_
#define V(N, I)
__DEVICE__ long long abs(long long __n)
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
__device__ double
__device__ float
#define _HLSL_BUILTIN_ALIAS(builtin)
#define _HLSL_AVAILABILITY(platform, version)
#define _HLSL_16BIT_AVAILABILITY(environment, version)
half ddx_coarse(half)
half sinh(half)
int sign(half)
unsigned int uint
An unsigned 32-bit integer.
half radians(half)
double asdouble(uint, uint)
Reinterprets a cast value (two 32-bit values) into a double.
half normalize(half)
vector< half, 4 > half4
half mad(half, half, half)
bool and(bool x, bool y)
Logically ands two boolean vectors or matrices elementwise and produces a bool vector or matrix outpu...
matrix< bool, 2, 1 > bool2x1
bool any(half)
T select(bool, T, T)
ternary operator.
half acos(half)
const uint countbits(int x)
vector< half, 2 > half2
vector< uint, 2 > uint2
vector< int, 3 > int3
vector< uint64_t, 2 > uint64_t2
half rsqrt(half)
half max(half, half)
half saturate(half)
matrix< bool, 1, 4 > bool1x4
half ddy_coarse(half)
matrix< bool, 4, 1 > bool4x1
half3 cross(half3, half3)
half abs(half)
half cosh(half)
vector< float, 4 > float4
matrix< bool, 2, 3 > bool2x3
matrix< bool, 2, 2 > bool2x2
half dot(half, half)
half sin(half)
vector< int64_t, 4 > int64_t4
unsigned long uint64_t
matrix< bool, 2, 4 > bool2x4
matrix< bool, 3, 1 > bool3x1
matrix< bool, 3, 4 > bool3x4
int dot4add_i8packed(uint, uint, int)
half ddy_fine(half)
vector< uint64_t, 3 > uint64_t3
matrix< bool, 3, 2 > bool3x2
half lerp(half, half, half)
half atan2(half y, half x)
half pow(half, half)
bool or(bool, bool)
Logically ors two boolean vectors or matrices elementwise and produces a bool vector or matrix output...
vector< bool, 4 > bool4
long int64_t
vector< int64_t, 3 > int64_t3
vector< int, 4 > int4
half ceil(half)
half atan(half)
void clip(float)
vector< bool, 3 > bool3
half clamp(half, half, half)
vector< uint64_t, 4 > uint64_t4
matrix< bool, 1, 2 > bool1x2
half sqrt(half)
half ddx_fine(half)
half step(half, half)
half cos(half)
vector< double, 3 > double3
vector< float, 2 > float2
float f16tof32(uint)
Returns the half value stored in the low 16 bits of the uint arg converted to a float.
vector< float, 3 > float3
half log(half)
vector< int64_t, 2 > int64_t2
matrix< bool, 1, 3 > bool1x3
vector< uint, 3 > uint3
half degrees(half)
half trunc(half)
vector< uint32_t, 2 > uint32_t2
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
unsigned int uint32_t
matrix< bool, 3, 3 > bool3x3
half min(half, half)
half log2(half)
uint dot4add_u8packed(uint, uint, uint)
vector< uint, 4 > uint4
vector< half, 3 > half3
matrix< bool, 4, 2 > bool4x2
half asin(half)
vector< uint32_t, 4 > uint32_t4
half frac(half)
uint firstbitlow(int)
__attribute__((convergent)) bool WaveActiveAllTrue(bool Val)
Returns true if the expression is true in all active lanes in the current wave.
matrix< bool, 4, 4 > bool4x4
matrix< bool, 4, 3 > bool4x3
half tan(half)
bool isnan(half)
bool all(half)
half tanh(half)
half exp(half)
half floor(half)
bool isinf(half)
uint reversebits(uint)
uint32_t2 AddUint64(uint32_t2, uint32_t2)