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