clang 22.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 Counts the number of boolean variables which evaluate to true across
2414/// all active lanes in the current wave.
2415///
2416/// \param Val The input boolean value.
2417/// \return The number of lanes for which the boolean variable evaluates to
2418/// true, across all active lanes in the current wave.
2419_HLSL_AVAILABILITY(shadermodel, 6.0)
2420_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
2421__attribute__((convergent)) uint WaveActiveCountBits(bool Val);
2422
2423/// \brief Returns the index of the current lane within the current wave.
2424_HLSL_AVAILABILITY(shadermodel, 6.0)
2425_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index)
2426__attribute__((convergent)) uint WaveGetLaneIndex();
2427
2428_HLSL_AVAILABILITY(shadermodel, 6.0)
2429_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_is_first_lane)
2430__attribute__((convergent)) bool WaveIsFirstLane();
2431
2432_HLSL_AVAILABILITY(shadermodel, 6.0)
2433_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_count)
2434__attribute__((convergent)) uint WaveGetLaneCount();
2435
2436//===----------------------------------------------------------------------===//
2437// WaveReadLaneAt builtins
2438//===----------------------------------------------------------------------===//
2439
2440// \brief Returns the value of the expression for the given lane index within
2441// the specified wave.
2442
2443_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2444__attribute__((convergent)) bool WaveReadLaneAt(bool, uint32_t);
2445_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2446__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, uint32_t);
2447_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2448__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, uint32_t);
2449_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2450__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, uint32_t);
2451
2452#ifdef __HLSL_ENABLE_16_BIT
2453_HLSL_AVAILABILITY(shadermodel, 6.0)
2454_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2455__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, uint32_t);
2456_HLSL_AVAILABILITY(shadermodel, 6.0)
2457_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2458__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, uint32_t);
2459_HLSL_AVAILABILITY(shadermodel, 6.0)
2460_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2461__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, uint32_t);
2462_HLSL_AVAILABILITY(shadermodel, 6.0)
2463_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2464__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, uint32_t);
2465
2466_HLSL_AVAILABILITY(shadermodel, 6.0)
2467_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2468__attribute__((convergent)) uint16_t WaveReadLaneAt(uint16_t, uint32_t);
2469_HLSL_AVAILABILITY(shadermodel, 6.0)
2470_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2471__attribute__((convergent)) uint16_t2 WaveReadLaneAt(uint16_t2, uint32_t);
2472_HLSL_AVAILABILITY(shadermodel, 6.0)
2473_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2474__attribute__((convergent)) uint16_t3 WaveReadLaneAt(uint16_t3, uint32_t);
2475_HLSL_AVAILABILITY(shadermodel, 6.0)
2476_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2477__attribute__((convergent)) uint16_t4 WaveReadLaneAt(uint16_t4, uint32_t);
2478#endif
2479
2480_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2481_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2482__attribute__((convergent)) half WaveReadLaneAt(half, uint32_t);
2483_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2484_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2485__attribute__((convergent)) half2 WaveReadLaneAt(half2, uint32_t);
2486_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2487_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2488__attribute__((convergent)) half3 WaveReadLaneAt(half3, uint32_t);
2489_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2490_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2491__attribute__((convergent)) half4 WaveReadLaneAt(half4, uint32_t);
2492
2493_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2494__attribute__((convergent)) int WaveReadLaneAt(int, uint32_t);
2495_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2496__attribute__((convergent)) int2 WaveReadLaneAt(int2, uint32_t);
2497_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2498__attribute__((convergent)) int3 WaveReadLaneAt(int3, uint32_t);
2499_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2500__attribute__((convergent)) int4 WaveReadLaneAt(int4, uint32_t);
2501
2502_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2503__attribute__((convergent)) uint WaveReadLaneAt(uint, uint32_t);
2504_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2505__attribute__((convergent)) uint2 WaveReadLaneAt(uint2, uint32_t);
2506_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2507__attribute__((convergent)) uint3 WaveReadLaneAt(uint3, uint32_t);
2508_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2509__attribute__((convergent)) uint4 WaveReadLaneAt(uint4, uint32_t);
2510
2511_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2512__attribute__((convergent)) float WaveReadLaneAt(float, uint32_t);
2513_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2514__attribute__((convergent)) float2 WaveReadLaneAt(float2, uint32_t);
2515_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2516__attribute__((convergent)) float3 WaveReadLaneAt(float3, uint32_t);
2517_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2518__attribute__((convergent)) float4 WaveReadLaneAt(float4, uint32_t);
2519
2520_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2521__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, uint32_t);
2522_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2523__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, uint32_t);
2524_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2525__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, uint32_t);
2526_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2527__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, uint32_t);
2528
2529_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2530__attribute__((convergent)) uint64_t WaveReadLaneAt(uint64_t, uint32_t);
2531_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2532__attribute__((convergent)) uint64_t2 WaveReadLaneAt(uint64_t2, uint32_t);
2533_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2534__attribute__((convergent)) uint64_t3 WaveReadLaneAt(uint64_t3, uint32_t);
2535_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2536__attribute__((convergent)) uint64_t4 WaveReadLaneAt(uint64_t4, uint32_t);
2537
2538_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2539__attribute__((convergent)) double WaveReadLaneAt(double, uint32_t);
2540_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2541__attribute__((convergent)) double2 WaveReadLaneAt(double2, uint32_t);
2542_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2543__attribute__((convergent)) double3 WaveReadLaneAt(double3, uint32_t);
2544_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2545__attribute__((convergent)) double4 WaveReadLaneAt(double4, uint32_t);
2546
2547//===----------------------------------------------------------------------===//
2548// WaveActiveMax builtins
2549//===----------------------------------------------------------------------===//
2550
2551_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2552_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2553__attribute__((convergent)) half WaveActiveMax(half);
2554_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2555_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2556__attribute__((convergent)) half2 WaveActiveMax(half2);
2557_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2558_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2559__attribute__((convergent)) half3 WaveActiveMax(half3);
2560_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2561_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2562__attribute__((convergent)) half4 WaveActiveMax(half4);
2563
2564#ifdef __HLSL_ENABLE_16_BIT
2565_HLSL_AVAILABILITY(shadermodel, 6.0)
2566_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2567__attribute__((convergent)) int16_t WaveActiveMax(int16_t);
2568_HLSL_AVAILABILITY(shadermodel, 6.0)
2569_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2570__attribute__((convergent)) int16_t2 WaveActiveMax(int16_t2);
2571_HLSL_AVAILABILITY(shadermodel, 6.0)
2572_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2573__attribute__((convergent)) int16_t3 WaveActiveMax(int16_t3);
2574_HLSL_AVAILABILITY(shadermodel, 6.0)
2575_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2576__attribute__((convergent)) int16_t4 WaveActiveMax(int16_t4);
2577
2578_HLSL_AVAILABILITY(shadermodel, 6.0)
2579_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2580__attribute__((convergent)) uint16_t WaveActiveMax(uint16_t);
2581_HLSL_AVAILABILITY(shadermodel, 6.0)
2582_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2583__attribute__((convergent)) uint16_t2 WaveActiveMax(uint16_t2);
2584_HLSL_AVAILABILITY(shadermodel, 6.0)
2585_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2586__attribute__((convergent)) uint16_t3 WaveActiveMax(uint16_t3);
2587_HLSL_AVAILABILITY(shadermodel, 6.0)
2588_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2589__attribute__((convergent)) uint16_t4 WaveActiveMax(uint16_t4);
2590#endif
2591
2592_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2593__attribute__((convergent)) int WaveActiveMax(int);
2594_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2595__attribute__((convergent)) int2 WaveActiveMax(int2);
2596_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2597__attribute__((convergent)) int3 WaveActiveMax(int3);
2598_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2599__attribute__((convergent)) int4 WaveActiveMax(int4);
2600
2601_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2602__attribute__((convergent)) uint WaveActiveMax(uint);
2603_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2604__attribute__((convergent)) uint2 WaveActiveMax(uint2);
2605_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2606__attribute__((convergent)) uint3 WaveActiveMax(uint3);
2607_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2608__attribute__((convergent)) uint4 WaveActiveMax(uint4);
2609
2610_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2611__attribute__((convergent)) int64_t WaveActiveMax(int64_t);
2612_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2613__attribute__((convergent)) int64_t2 WaveActiveMax(int64_t2);
2614_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2615__attribute__((convergent)) int64_t3 WaveActiveMax(int64_t3);
2616_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2617__attribute__((convergent)) int64_t4 WaveActiveMax(int64_t4);
2618
2619_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2620__attribute__((convergent)) uint64_t WaveActiveMax(uint64_t);
2621_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2622__attribute__((convergent)) uint64_t2 WaveActiveMax(uint64_t2);
2623_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2624__attribute__((convergent)) uint64_t3 WaveActiveMax(uint64_t3);
2625_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2626__attribute__((convergent)) uint64_t4 WaveActiveMax(uint64_t4);
2627
2628_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2629__attribute__((convergent)) float WaveActiveMax(float);
2630_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2631__attribute__((convergent)) float2 WaveActiveMax(float2);
2632_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2633__attribute__((convergent)) float3 WaveActiveMax(float3);
2634_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2635__attribute__((convergent)) float4 WaveActiveMax(float4);
2636
2637_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2638__attribute__((convergent)) double WaveActiveMax(double);
2639_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2640__attribute__((convergent)) double2 WaveActiveMax(double2);
2641_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2642__attribute__((convergent)) double3 WaveActiveMax(double3);
2643_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2644__attribute__((convergent)) double4 WaveActiveMax(double4);
2645
2646//===----------------------------------------------------------------------===//
2647// WaveActiveMin builtins
2648//===----------------------------------------------------------------------===//
2649
2650_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2651_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2652__attribute__((convergent)) half WaveActiveMin(half);
2653_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2654_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2655__attribute__((convergent)) half2 WaveActiveMin(half2);
2656_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2657_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2658__attribute__((convergent)) half3 WaveActiveMin(half3);
2659_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2660_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2661__attribute__((convergent)) half4 WaveActiveMin(half4);
2662
2663#ifdef __HLSL_ENABLE_16_BIT
2664_HLSL_AVAILABILITY(shadermodel, 6.0)
2665_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2666__attribute__((convergent)) int16_t WaveActiveMin(int16_t);
2667_HLSL_AVAILABILITY(shadermodel, 6.0)
2668_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2669__attribute__((convergent)) int16_t2 WaveActiveMin(int16_t2);
2670_HLSL_AVAILABILITY(shadermodel, 6.0)
2671_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2672__attribute__((convergent)) int16_t3 WaveActiveMin(int16_t3);
2673_HLSL_AVAILABILITY(shadermodel, 6.0)
2674_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2675__attribute__((convergent)) int16_t4 WaveActiveMin(int16_t4);
2676
2677_HLSL_AVAILABILITY(shadermodel, 6.0)
2678_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2679__attribute__((convergent)) uint16_t WaveActiveMin(uint16_t);
2680_HLSL_AVAILABILITY(shadermodel, 6.0)
2681_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2682__attribute__((convergent)) uint16_t2 WaveActiveMin(uint16_t2);
2683_HLSL_AVAILABILITY(shadermodel, 6.0)
2684_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2685__attribute__((convergent)) uint16_t3 WaveActiveMin(uint16_t3);
2686_HLSL_AVAILABILITY(shadermodel, 6.0)
2687_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2688__attribute__((convergent)) uint16_t4 WaveActiveMin(uint16_t4);
2689#endif
2690
2691_HLSL_AVAILABILITY(shadermodel, 6.0)
2692_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2693__attribute__((convergent)) int WaveActiveMin(int);
2694_HLSL_AVAILABILITY(shadermodel, 6.0)
2695_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2696__attribute__((convergent)) int2 WaveActiveMin(int2);
2697_HLSL_AVAILABILITY(shadermodel, 6.0)
2698_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2699__attribute__((convergent)) int3 WaveActiveMin(int3);
2700_HLSL_AVAILABILITY(shadermodel, 6.0)
2701_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2702__attribute__((convergent)) int4 WaveActiveMin(int4);
2703
2704_HLSL_AVAILABILITY(shadermodel, 6.0)
2705_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2706__attribute__((convergent)) uint WaveActiveMin(uint);
2707_HLSL_AVAILABILITY(shadermodel, 6.0)
2708_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2709__attribute__((convergent)) uint2 WaveActiveMin(uint2);
2710_HLSL_AVAILABILITY(shadermodel, 6.0)
2711_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2712__attribute__((convergent)) uint3 WaveActiveMin(uint3);
2713_HLSL_AVAILABILITY(shadermodel, 6.0)
2714_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2715__attribute__((convergent)) uint4 WaveActiveMin(uint4);
2716
2717_HLSL_AVAILABILITY(shadermodel, 6.0)
2718_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2719__attribute__((convergent)) int64_t WaveActiveMin(int64_t);
2720_HLSL_AVAILABILITY(shadermodel, 6.0)
2721_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2722__attribute__((convergent)) int64_t2 WaveActiveMin(int64_t2);
2723_HLSL_AVAILABILITY(shadermodel, 6.0)
2724_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2725__attribute__((convergent)) int64_t3 WaveActiveMin(int64_t3);
2726_HLSL_AVAILABILITY(shadermodel, 6.0)
2727_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2728__attribute__((convergent)) int64_t4 WaveActiveMin(int64_t4);
2729
2730_HLSL_AVAILABILITY(shadermodel, 6.0)
2731_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2732__attribute__((convergent)) uint64_t WaveActiveMin(uint64_t);
2733_HLSL_AVAILABILITY(shadermodel, 6.0)
2734_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2735__attribute__((convergent)) uint64_t2 WaveActiveMin(uint64_t2);
2736_HLSL_AVAILABILITY(shadermodel, 6.0)
2737_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2738__attribute__((convergent)) uint64_t3 WaveActiveMin(uint64_t3);
2739_HLSL_AVAILABILITY(shadermodel, 6.0)
2740_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2741__attribute__((convergent)) uint64_t4 WaveActiveMin(uint64_t4);
2742
2743_HLSL_AVAILABILITY(shadermodel, 6.0)
2744_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2745__attribute__((convergent)) float WaveActiveMin(float);
2746_HLSL_AVAILABILITY(shadermodel, 6.0)
2747_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2748__attribute__((convergent)) float2 WaveActiveMin(float2);
2749_HLSL_AVAILABILITY(shadermodel, 6.0)
2750_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2751__attribute__((convergent)) float3 WaveActiveMin(float3);
2752_HLSL_AVAILABILITY(shadermodel, 6.0)
2753_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2754__attribute__((convergent)) float4 WaveActiveMin(float4);
2755
2756_HLSL_AVAILABILITY(shadermodel, 6.0)
2757_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2758__attribute__((convergent)) double WaveActiveMin(double);
2759_HLSL_AVAILABILITY(shadermodel, 6.0)
2760_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2761__attribute__((convergent)) double2 WaveActiveMin(double2);
2762_HLSL_AVAILABILITY(shadermodel, 6.0)
2763_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2764__attribute__((convergent)) double3 WaveActiveMin(double3);
2765_HLSL_AVAILABILITY(shadermodel, 6.0)
2766_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2767__attribute__((convergent)) double4 WaveActiveMin(double4);
2768
2769//===----------------------------------------------------------------------===//
2770// WaveActiveSum builtins
2771//===----------------------------------------------------------------------===//
2772
2773_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2774_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2775__attribute__((convergent)) half WaveActiveSum(half);
2776_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2777_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2778__attribute__((convergent)) half2 WaveActiveSum(half2);
2779_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2780_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2781__attribute__((convergent)) half3 WaveActiveSum(half3);
2782_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2783_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2784__attribute__((convergent)) half4 WaveActiveSum(half4);
2785
2786#ifdef __HLSL_ENABLE_16_BIT
2787_HLSL_AVAILABILITY(shadermodel, 6.0)
2788_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2789__attribute__((convergent)) int16_t WaveActiveSum(int16_t);
2790_HLSL_AVAILABILITY(shadermodel, 6.0)
2791_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2792__attribute__((convergent)) int16_t2 WaveActiveSum(int16_t2);
2793_HLSL_AVAILABILITY(shadermodel, 6.0)
2794_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2795__attribute__((convergent)) int16_t3 WaveActiveSum(int16_t3);
2796_HLSL_AVAILABILITY(shadermodel, 6.0)
2797_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2798__attribute__((convergent)) int16_t4 WaveActiveSum(int16_t4);
2799
2800_HLSL_AVAILABILITY(shadermodel, 6.0)
2801_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2802__attribute__((convergent)) uint16_t WaveActiveSum(uint16_t);
2803_HLSL_AVAILABILITY(shadermodel, 6.0)
2804_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2805__attribute__((convergent)) uint16_t2 WaveActiveSum(uint16_t2);
2806_HLSL_AVAILABILITY(shadermodel, 6.0)
2807_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2808__attribute__((convergent)) uint16_t3 WaveActiveSum(uint16_t3);
2809_HLSL_AVAILABILITY(shadermodel, 6.0)
2810_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2811__attribute__((convergent)) uint16_t4 WaveActiveSum(uint16_t4);
2812#endif
2813
2814_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2815__attribute__((convergent)) int WaveActiveSum(int);
2816_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2817__attribute__((convergent)) int2 WaveActiveSum(int2);
2818_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2819__attribute__((convergent)) int3 WaveActiveSum(int3);
2820_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2821__attribute__((convergent)) int4 WaveActiveSum(int4);
2822
2823_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2824__attribute__((convergent)) uint WaveActiveSum(uint);
2825_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2826__attribute__((convergent)) uint2 WaveActiveSum(uint2);
2827_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2828__attribute__((convergent)) uint3 WaveActiveSum(uint3);
2829_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2830__attribute__((convergent)) uint4 WaveActiveSum(uint4);
2831
2832_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2833__attribute__((convergent)) int64_t WaveActiveSum(int64_t);
2834_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2835__attribute__((convergent)) int64_t2 WaveActiveSum(int64_t2);
2836_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2837__attribute__((convergent)) int64_t3 WaveActiveSum(int64_t3);
2838_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2839__attribute__((convergent)) int64_t4 WaveActiveSum(int64_t4);
2840
2841_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2842__attribute__((convergent)) uint64_t WaveActiveSum(uint64_t);
2843_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2844__attribute__((convergent)) uint64_t2 WaveActiveSum(uint64_t2);
2845_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2846__attribute__((convergent)) uint64_t3 WaveActiveSum(uint64_t3);
2847_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2848__attribute__((convergent)) uint64_t4 WaveActiveSum(uint64_t4);
2849
2850_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2851__attribute__((convergent)) float WaveActiveSum(float);
2852_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2853__attribute__((convergent)) float2 WaveActiveSum(float2);
2854_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2855__attribute__((convergent)) float3 WaveActiveSum(float3);
2856_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2857__attribute__((convergent)) float4 WaveActiveSum(float4);
2858
2859_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2860__attribute__((convergent)) double WaveActiveSum(double);
2861_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2862__attribute__((convergent)) double2 WaveActiveSum(double2);
2863_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2864__attribute__((convergent)) double3 WaveActiveSum(double3);
2865_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2866__attribute__((convergent)) double4 WaveActiveSum(double4);
2867
2868//===----------------------------------------------------------------------===//
2869// sign builtins
2870//===----------------------------------------------------------------------===//
2871
2872/// \fn T sign(T Val)
2873/// \brief Returns -1 if \a Val is less than zero; 0 if \a Val equals zero; and
2874/// 1 if \a Val is greater than zero. \param Val The input value.
2875
2876#ifdef __HLSL_ENABLE_16_BIT
2877_HLSL_AVAILABILITY(shadermodel, 6.2)
2878_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2879int sign(int16_t);
2880_HLSL_AVAILABILITY(shadermodel, 6.2)
2881_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2882int2 sign(int16_t2);
2883_HLSL_AVAILABILITY(shadermodel, 6.2)
2884_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2885int3 sign(int16_t3);
2886_HLSL_AVAILABILITY(shadermodel, 6.2)
2887_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2888int4 sign(int16_t4);
2889
2890_HLSL_AVAILABILITY(shadermodel, 6.2)
2891_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2892int sign(uint16_t);
2893_HLSL_AVAILABILITY(shadermodel, 6.2)
2894_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2895int2 sign(uint16_t2);
2896_HLSL_AVAILABILITY(shadermodel, 6.2)
2897_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2898int3 sign(uint16_t3);
2899_HLSL_AVAILABILITY(shadermodel, 6.2)
2900_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2901int4 sign(uint16_t4);
2902#endif
2903
2904_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2905_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2906int sign(half);
2907_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2908_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2910_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2911_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2913_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2914_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2916
2917_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2918int sign(int);
2919_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2921_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2923_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2925
2926_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2928_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2930_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2932_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2934
2935_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2936int sign(float);
2937_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2939_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2941_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2943
2944_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2946_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2948_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2950_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2952
2953_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2955_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2957_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2959_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2961
2962_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2963int sign(double);
2964_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2966_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2968_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2970
2971//===----------------------------------------------------------------------===//
2972// radians builtins
2973//===----------------------------------------------------------------------===//
2974
2975/// \fn T radians(T Val)
2976/// \brief Converts the specified value from degrees to radians.
2977
2978_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2979_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2980half radians(half);
2981_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2982_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2984_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2985_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2987_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2988_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2990
2991_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2992float radians(float);
2993_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2995_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2997_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2999
3000//===----------------------------------------------------------------------===//
3001// GroupMemoryBarrierWithGroupSync builtins
3002//===----------------------------------------------------------------------===//
3003
3004/// \fn void GroupMemoryBarrierWithGroupSync(void)
3005/// \brief Blocks execution of all threads in a group until all group shared
3006/// accesses have been completed and all threads in the group have reached this
3007/// call.
3008
3009_HLSL_BUILTIN_ALIAS(__builtin_hlsl_group_memory_barrier_with_group_sync)
3010__attribute__((convergent)) void GroupMemoryBarrierWithGroupSync(void);
3011
3012//===----------------------------------------------------------------------===//
3013// ddx_coarse builtin
3014//===----------------------------------------------------------------------===//
3015
3016/// \fn T ddx_coarse(T value)
3017/// \brief Computes a low precision partial derivative with respect to the
3018/// screen-space x-coordinate.
3019/// \param value The input value.
3020///
3021/// The return value is a floating point scalar or vector containing the low
3022/// prevision partial derivative of the input value.
3023
3024_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3025_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3026half ddx_coarse(half);
3027_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3028_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3030_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3031_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3033_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3034_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3036
3037_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3038float ddx_coarse(float);
3039_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3041_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3043_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3045
3046//===----------------------------------------------------------------------===//
3047// ddy_coarse builtin
3048//===----------------------------------------------------------------------===//
3049
3050/// \fn T ddy_coarse(T value)
3051/// \brief Computes a low precision partial derivative with respect to the
3052/// screen-space y-coordinate.
3053/// \param value The input value.
3054///
3055/// The return value is a floating point scalar or vector containing the low
3056/// prevision partial derivative of the input value.
3057
3058_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3059_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3060half ddy_coarse(half);
3061_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3062_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3064_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3065_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3067_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3068_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3070
3071_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3072float ddy_coarse(float);
3073_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3075_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3077_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3079
3080//===----------------------------------------------------------------------===//
3081// ddx_fine builtin
3082//===----------------------------------------------------------------------===//
3083
3084/// \fn T ddx_fine(T value)
3085/// \brief Computes a high precision partial derivative with respect to the
3086/// screen-space x-coordinate.
3087/// \param value The input value.
3088///
3089/// The return value is a floating point scalar or vector containing the high
3090/// prevision partial derivative of the input value.
3091
3092_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3093_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3094half ddx_fine(half);
3095_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3096_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3098_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3099_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3101_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3102_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3104
3105_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3106float ddx_fine(float);
3107_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3109_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3111_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3113
3114//===----------------------------------------------------------------------===//
3115// ddy_fine builtin
3116//===----------------------------------------------------------------------===//
3117
3118/// \fn T ddy_fine(T value)
3119/// \brief Computes a high precision partial derivative with respect to the
3120/// screen-space y-coordinate.
3121/// \param value The input value.
3122///
3123/// The return value is a floating point scalar or vector containing the high
3124/// prevision partial derivative of the input value.
3125
3126_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3127_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3128half ddy_fine(half);
3129_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3130_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3132_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3133_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3135_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
3136_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3138
3139_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3140float ddy_fine(float);
3141_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3143_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3145_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3147
3148} // namespace hlsl
3149#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)